From b70e0a28d229f147b202e5c274ad14e92cc18238 Mon Sep 17 00:00:00 2001 From: Julian Storer Date: Fri, 12 Aug 2011 10:04:52 +0100 Subject: [PATCH] First check-in of the "jucequake": a major re-organisation of the library to break it up into modules. For more details about this, see the website forum.. --- .gitignore | 70 +- Builds/Linux/Makefile | 2056 - Builds/MacOSX/Juce.xcodeproj/project.pbxproj | 2442 - Builds/VisualStudio2005/Juce.sln | 19 - Builds/VisualStudio2005/Juce.vcproj | 1038 - Builds/VisualStudio2008/Juce.vcproj | 1038 - Builds/VisualStudio2008_DLL/Juce.vcproj | 1040 - Builds/VisualStudio2010/Juce.vcxproj | 845 - Builds/VisualStudio2010/Juce.vcxproj.filters | 2446 - Builds/iOS/Juce.xcodeproj/project.pbxproj | 2446 - Juce.jucer | 1640 - amalgamation/juce_amalgamated_template.cpp | 391 +- bin/ReadMe.txt | 1 - extras/Introjucer/Builds/Linux/Makefile | 58 +- extras/Introjucer/Builds/MacOSX/Icon.icns | Bin 81944 -> 81944 bytes .../The Introjucer.xcodeproj/project.pbxproj | 1494 +- .../VisualStudio2005/The Introjucer.vcproj | 3425 +- .../Builds/VisualStudio2005/icon.ico | Bin 82726 -> 82726 bytes .../VisualStudio2008/The Introjucer.vcproj | 3425 +- .../Builds/VisualStudio2008/icon.ico | Bin 82726 -> 82726 bytes .../VisualStudio2010/The Introjucer.vcxproj | 1215 +- .../The Introjucer.vcxproj.filters | 2183 +- .../Builds/VisualStudio2010/icon.ico | Bin 82726 -> 82726 bytes extras/Introjucer/Introjucer.jucer | 31 +- extras/Introjucer/JuceLibraryCode/AppConfig.h | 46 +- .../Introjucer/JuceLibraryCode/BinaryData.cpp | 6 +- .../Introjucer/JuceLibraryCode/BinaryData.h | 6 +- .../Introjucer/JuceLibraryCode/JuceHeader.h | 19 +- .../JuceLibraryCode/JuceLibraryCode3.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode3.mm | 15 - .../JuceLibraryCode/JuceLibraryCode4.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode4.mm | 15 - extras/Introjucer/JuceLibraryCode/ReadMe.txt | 12 + .../juce_audio_basics_wrapper.cpp | 14 + .../juce_audio_basics_wrapper.mm | 14 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_cryptography_wrapper.cpp | 14 + .../juce_cryptography_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../juce_gui_extra_wrapper.cpp | 14 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 14 + .../Source/Application/jucer_Application.h | 8 +- .../Source/Application/jucer_CommandIDs.h | 2 +- .../Source/Application/jucer_CommonHeaders.h | 8 +- .../jucer_DocumentEditorComponent.cpp | 2 +- .../jucer_DocumentEditorComponent.h | 2 +- .../jucer_FilePreviewComponent.cpp | 2 +- .../Application/jucer_FilePreviewComponent.h | 8 +- .../Source/Application/jucer_JuceUpdater.cpp | 4 +- .../Source/Application/jucer_JuceUpdater.h | 8 +- .../Source/Application/jucer_Main.cpp | 2 +- .../Source/Application/jucer_MainWindow.cpp | 10 +- .../Source/Application/jucer_MainWindow.h | 2 +- .../Application/jucer_OpenDocumentManager.cpp | 2 +- .../Application/jucer_OpenDocumentManager.h | 2 +- .../jucer_AudioPluginEditorTemplate.cpp | 2 +- .../jucer_AudioPluginEditorTemplate.h | 2 +- .../Source/BinaryData/jucer_MainTemplate.cpp | 2 +- .../Code Editor/jucer_SourceCodeEditor.cpp | 2 +- .../Code Editor/jucer_SourceCodeEditor.h | 2 +- .../Source/Project/jucer_AudioPluginModule.h | 398 + .../jucer_GroupInformationComponent.cpp | 2 +- .../Project/jucer_GroupInformationComponent.h | 2 +- .../Source/Project/jucer_JuceLibraryModule.h | 354 + .../Source/Project/jucer_Module.cpp | 157 + .../Introjucer/Source/Project/jucer_Module.h | 81 + .../Source/Project/jucer_NewFileWizard.cpp | 6 +- .../Source/Project/jucer_NewFileWizard.h | 2 +- .../Source/Project/jucer_NewProjectWizard.cpp | 31 +- .../Source/Project/jucer_NewProjectWizard.h | 8 +- .../Source/Project/jucer_Project.cpp | 213 +- .../Introjucer/Source/Project/jucer_Project.h | 46 +- .../Project/jucer_ProjectContentComponent.cpp | 2 +- .../Project/jucer_ProjectContentComponent.h | 2 +- .../Project/jucer_ProjectExport_Android.h | 12 +- .../Source/Project/jucer_ProjectExport_MSVC.h | 45 +- .../Source/Project/jucer_ProjectExport_Make.h | 24 +- .../Project/jucer_ProjectExport_XCode.h | 16 +- .../Source/Project/jucer_ProjectExporter.cpp | 47 +- .../Source/Project/jucer_ProjectExporter.h | 9 +- .../jucer_ProjectInformationComponent.cpp | 388 +- .../Source/Project/jucer_ProjectSaver.h | 282 +- .../Project/jucer_ProjectTreeViewBase.cpp | 2 +- .../Project/jucer_ProjectTreeViewBase.h | 2 +- .../Source/Project/jucer_ProjectType.cpp | 867 +- .../Source/Project/jucer_ProjectType.h | 25 +- .../Source/Project/jucer_ResourceFile.cpp | 2 +- .../Source/Project/jucer_ResourceFile.h | 2 +- .../Source/Project/jucer_TreeViewTypes.cpp | 6 +- .../Source/Project/jucer_TreeViewTypes.h | 2 +- .../Source/Utility/jucer_CodeHelpers.cpp | 7 +- .../Source/Utility/jucer_CodeHelpers.h | 8 +- .../Introjucer/Source/Utility/jucer_Colours.h | 2 +- .../Source/Utility/jucer_FileHelpers.cpp | 26 +- .../Source/Utility/jucer_FileHelpers.h | 8 +- .../Utility/jucer_JucerTreeViewBase.cpp | 2 +- .../Source/Utility/jucer_JucerTreeViewBase.h | 2 +- .../Source/Utility/jucer_MiscUtilities.cpp | 2 +- .../Source/Utility/jucer_MiscUtilities.h | 3 +- .../Source/Utility/jucer_PresetIDs.h | 9 +- .../Source/Utility/jucer_RelativePath.h | 4 +- .../Source/Utility/jucer_StoredSettings.cpp | 2 +- .../Source/Utility/jucer_StoredSettings.h | 4 +- .../Source/Utility/jucer_ValueSourceHelpers.h | 8 +- extras/Introjucer/Source/jucer_Headers.h | 2 +- extras/JuceDemo/Builds/Android/jni/Android.mk | 22 +- .../Builds/Android/jni/Application.mk | 4 +- .../JuceDemo/Builds/Android/local.properties | 2 +- .../Builds/Android/res/drawable-hdpi/icon.png | Bin 7561 -> 7082 bytes .../Builds/Android/res/drawable-ldpi/icon.png | Bin 2642 -> 2302 bytes .../Builds/Android/res/drawable-mdpi/icon.png | Bin 4097 -> 3713 bytes extras/JuceDemo/Builds/Linux/Makefile | 88 +- extras/JuceDemo/Builds/MacOSX/Icon.icns | Bin 81944 -> 81944 bytes .../Juce Demo.xcodeproj/project.pbxproj | 1834 +- .../Builds/VisualStudio2005/Juce Demo.vcproj | 4263 +- .../JuceDemo/Builds/VisualStudio2005/icon.ico | Bin 82726 -> 82726 bytes .../Builds/VisualStudio2008/Juce Demo.vcproj | 4263 +- .../JuceDemo/Builds/VisualStudio2008/icon.ico | Bin 82726 -> 82726 bytes .../Builds/VisualStudio2010/Juce Demo.vcxproj | 1456 +- .../Juce Demo.vcxproj.filters | 2678 +- .../JuceDemo/Builds/VisualStudio2010/icon.ico | Bin 82726 -> 82726 bytes extras/JuceDemo/Builds/iOS/Icon.icns | Bin 81944 -> 81944 bytes .../iOS/Juce Demo.xcodeproj/project.pbxproj | 1834 +- extras/JuceDemo/Juce Demo.jucer | 32 +- extras/JuceDemo/JuceLibraryCode/AppConfig.h | 69 +- extras/JuceDemo/JuceLibraryCode/JuceHeader.h | 25 +- .../JuceLibraryCode/JuceLibraryCode1.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode1.mm | 15 - .../JuceLibraryCode/JuceLibraryCode2.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode2.mm | 15 - .../JuceLibraryCode/JuceLibraryCode3.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode3.mm | 15 - .../JuceLibraryCode/JuceLibraryCode4.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode4.mm | 15 - extras/JuceDemo/JuceLibraryCode/ReadMe.txt | 12 + .../juce_audio_basics_wrapper.cpp | 14 + .../juce_audio_basics_wrapper.mm | 14 + .../juce_audio_devices_wrapper.cpp | 14 + .../juce_audio_devices_wrapper.mm | 14 + .../juce_audio_formats_wrapper.cpp | 14 + .../juce_audio_formats_wrapper.mm | 14 + .../juce_audio_processors_wrapper.cpp | 14 + .../juce_audio_processors_wrapper.mm | 14 + .../juce_audio_utils_wrapper.cpp | 14 + .../juce_audio_utils_wrapper.mm | 14 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_cryptography_wrapper.cpp | 14 + .../juce_cryptography_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../juce_gui_extra_wrapper.cpp | 14 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 14 + .../JuceLibraryCode/juce_opengl_wrapper.cpp | 14 + .../JuceLibraryCode/juce_opengl_wrapper.mm | 14 + .../JuceLibraryCode/juce_video_wrapper.cpp | 14 + .../JuceLibraryCode/juce_video_wrapper.mm | 14 + .../Source/demos/AudioDemoPlaybackPage.cpp | 1 + .../Source/demos/AudioDemoTabComponent.cpp | 2 +- extras/amalgamator/Amalgamator.jucer | 42 - extras/amalgamator/Builds/Linux/Makefile | 74 - .../Amalgamator.xcodeproj/project.pbxproj | 160 - .../Builds/VisualStudio2005/Amalgamator.sln | 19 - .../VisualStudio2005/Amalgamator.vcproj | 142 - .../Builds/VisualStudio2008/Amalgamator.sln | 19 - .../VisualStudio2008/Amalgamator.vcproj | 142 - .../amalgamator/JuceLibraryCode/AppConfig.h | 41 - .../amalgamator/JuceLibraryCode/JuceHeader.h | 26 - .../JuceLibraryCode/JuceLibraryCode.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode.mm | 15 - extras/amalgamator/Source/Main.cpp | 402 - .../audio plugin demo/Builds/Linux/Makefile | 164 + .../Builds/MacOSX/Info.plist | 0 .../JuceDemoPlugin.xcodeproj/project.pbxproj | 2020 + .../VisualStudio2005/JuceDemoPlugin.sln | 0 .../VisualStudio2005/JuceDemoPlugin.vcproj | 4092 + .../VisualStudio2008/JuceDemoPlugin.sln | 0 .../VisualStudio2008/JuceDemoPlugin.vcproj | 4092 + .../How to use this framework.txt | 0 .../JuceDemoPlugin.jucer | 40 +- .../JuceLibraryCode/AppConfig.h | 91 + .../JuceLibraryCode/JuceHeader.h | 42 + .../JuceLibraryCode/ReadMe.txt | 12 + .../juce_AU_Wrapper_wrapper.mm | 14 + .../juce_RTAS_DigiCode1_wrapper.cpp | 14 + .../juce_RTAS_DigiCode1_wrapper.mm | 14 + .../juce_RTAS_DigiCode2_wrapper.cpp | 14 + .../juce_RTAS_DigiCode2_wrapper.mm | 14 + .../juce_RTAS_DigiCode3_wrapper.cpp | 14 + .../juce_RTAS_DigiCode3_wrapper.mm | 14 + .../juce_RTAS_MacUtilities_wrapper.mm | 14 + .../juce_RTAS_WinUtilities_wrapper.cpp | 14 + .../juce_RTAS_Wrapper_wrapper.cpp | 14 + .../juce_RTAS_Wrapper_wrapper.mm | 14 + .../juce_VST_Wrapper_wrapper.cpp | 14 + .../juce_VST_Wrapper_wrapper.mm | 14 + .../juce_audio_basics_wrapper.cpp | 14 + .../juce_audio_basics_wrapper.mm | 14 + .../juce_audio_devices_wrapper.cpp | 14 + .../juce_audio_devices_wrapper.mm | 14 + .../juce_audio_formats_wrapper.cpp | 14 + .../juce_audio_formats_wrapper.mm | 14 + .../juce_audio_processors_wrapper.cpp | 14 + .../juce_audio_processors_wrapper.mm | 14 + .../juce_audio_utils_wrapper.cpp | 14 + .../juce_audio_utils_wrapper.mm | 14 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../Source/PluginEditor.cpp | 0 .../Source/PluginEditor.h | 1 - .../Source/PluginProcessor.cpp | 0 .../Source/PluginProcessor.h | 1 - .../audio plugin host/Builds/Linux/Makefile | 90 +- .../Plugin Host.xcodeproj/project.pbxproj | 1798 +- .../VisualStudio2005/Plugin Host.vcproj | 4180 +- .../VisualStudio2008/Plugin Host.vcproj | 4180 +- .../JuceLibraryCode/AppConfig.h | 69 +- .../JuceLibraryCode/JuceHeader.h | 24 +- .../JuceLibraryCode/JuceLibraryCode1.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode1.mm | 15 - .../JuceLibraryCode/JuceLibraryCode2.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode2.mm | 15 - .../JuceLibraryCode/JuceLibraryCode3.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode3.mm | 15 - .../JuceLibraryCode/JuceLibraryCode4.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode4.mm | 15 - .../JuceLibraryCode/ReadMe.txt | 12 + .../juce_audio_basics_wrapper.cpp | 14 + .../juce_audio_basics_wrapper.mm | 14 + .../juce_audio_devices_wrapper.cpp | 14 + .../juce_audio_devices_wrapper.mm | 14 + .../juce_audio_formats_wrapper.cpp | 14 + .../juce_audio_formats_wrapper.mm | 14 + .../juce_audio_processors_wrapper.cpp | 14 + .../juce_audio_processors_wrapper.mm | 14 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_cryptography_wrapper.cpp | 14 + .../juce_cryptography_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../juce_gui_extra_wrapper.cpp | 14 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 14 + .../JuceLibraryCode/juce_opengl_wrapper.cpp | 14 + .../JuceLibraryCode/juce_opengl_wrapper.mm | 14 + .../JuceLibraryCode/juce_video_wrapper.cpp | 14 + .../JuceLibraryCode/juce_video_wrapper.mm | 14 + extras/audio plugin host/Plugin Host.jucer | 31 +- .../audio plugin host/Source/HostStartup.cpp | 2 +- .../Source/MainHostWindow.cpp | 28 +- .../audio plugins/demo/Builds/Linux/Makefile | 104 - .../JuceDemoPlugin.xcodeproj/project.pbxproj | 370 - .../VisualStudio2005/JuceDemoPlugin.vcproj | 150 - .../VisualStudio2008/JuceDemoPlugin.vcproj | 150 - .../demo/JuceLibraryCode/AppConfig.h | 41 - .../demo/JuceLibraryCode/JuceHeader.h | 26 - .../demo/JuceLibraryCode/JuceLibraryCode1.cpp | 15 - .../demo/JuceLibraryCode/JuceLibraryCode1.mm | 15 - .../demo/JuceLibraryCode/JuceLibraryCode2.cpp | 15 - .../demo/JuceLibraryCode/JuceLibraryCode2.mm | 15 - .../demo/JuceLibraryCode/JuceLibraryCode3.cpp | 15 - .../demo/JuceLibraryCode/JuceLibraryCode3.mm | 15 - .../demo/JuceLibraryCode/JuceLibraryCode4.cpp | 15 - .../demo/JuceLibraryCode/JuceLibraryCode4.mm | 15 - .../JucePluginCharacteristics.h | 48 - extras/binarybuilder/BinaryBuilder.jucer | 17 +- extras/binarybuilder/Builds/Linux/Makefile | 10 +- .../BinaryBuilder.xcodeproj/project.pbxproj | 398 +- .../Builds/VisualStudio2005/BinaryBuilder.sln | 19 - .../VisualStudio2005/BinaryBuilder.vcproj | 142 - .../VisualStudio2008/BinaryBuilder.vcproj | 836 +- .../binarybuilder/JuceLibraryCode/AppConfig.h | 36 +- .../JuceLibraryCode/JuceHeader.h | 12 +- .../JuceLibraryCode/JuceLibraryCode.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode.mm | 15 - .../binarybuilder/JuceLibraryCode/ReadMe.txt | 12 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../How to build a browser plugin.txt | 69 + .../build/mac/Info.plist | 0 .../project.pbxproj | 81 +- .../build/win32/JuceBrowserPluginDemo.sln | 0 .../build/win32/JuceBrowserPluginDemo.vcproj | 26 +- extras/browser plugin demo/src/AppConfig.h | 2 + .../src/BrowserPluginCharacteristics.h | 0 .../src/JuceBrowserPluginDemo.cpp | 44 +- extras/browser plugin demo/src/JuceHeader.h | 18 + .../src/juce_browser_plugin_wrapper.cpp | 3 + .../src/juce_browser_plugin_wrapper.mm | 3 + .../src/juce_core_wrapper.cpp} | 4 +- .../src/juce_core_wrapper.mm} | 4 +- .../src/juce_data_structures_wrapper.cpp | 15 + .../src/juce_data_structures_wrapper.mm | 15 + .../src/juce_events_wrapper.cpp} | 4 +- .../src/juce_events_wrapper.mm} | 4 +- .../src/juce_graphics_wrapper.cpp | 15 + .../src/juce_graphics_wrapper.mm | 15 + .../src/juce_gui_basics_wrapper.cpp | 15 + .../src/juce_gui_basics_wrapper.mm | 15 + .../demo => browser plugin demo}/test.html | 0 .../build/mac/English.lproj/InfoPlist.strings | Bin 92 -> 0 bytes .../TemplateIcon.tiff | Bin 3068 -> 0 bytes .../demo/src/juce_LibrarySource.cpp | 11 - .../demo/src/juce_LibrarySource.mm | 11 - extras/example projects/Builds/Linux/Makefile | 40 +- .../HelloWorld.xcodeproj/project.pbxproj | 1354 +- .../Builds/VisualStudio2005/HelloWorld.vcproj | 3124 +- .../Builds/VisualStudio2008/HelloWorld.vcproj | 3124 +- .../iOS/HelloWorld.xcodeproj/project.pbxproj | 1354 +- extras/example projects/HelloWorld.jucer | 20 +- .../JuceLibraryCode/AppConfig.h | 46 +- .../JuceLibraryCode/JuceHeader.h | 17 +- .../JuceLibraryCode/JuceLibraryCode1.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode1.mm | 15 - .../JuceLibraryCode/JuceLibraryCode2.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode2.mm | 15 - .../JuceLibraryCode/JuceLibraryCode3.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode3.mm | 15 - .../JuceLibraryCode/JuceLibraryCode4.cpp | 15 - .../JuceLibraryCode/JuceLibraryCode4.mm | 15 - .../JuceLibraryCode/ReadMe.txt | 12 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../juce_gui_extra_wrapper.cpp | 14 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 14 + .../MacOSX/juce.xcodeproj/project.pbxproj | 1884 + .../Builds/VisualStudio2008/juce.sln | 10 +- .../Builds/VisualStudio2008/juce.vcproj | 4286 + .../Builds/VisualStudio2010/juce.sln | 10 +- .../Builds/VisualStudio2010/juce.vcxproj | 1559 + .../VisualStudio2010/juce.vcxproj.filters | 2656 + .../JuceLibraryCode/AppConfig.h | 68 + .../JuceLibraryCode/JuceHeader.h | 44 + .../static library/JuceLibraryCode/ReadMe.txt | 12 + .../juce_audio_basics_wrapper.cpp | 14 + .../juce_audio_basics_wrapper.mm | 14 + .../juce_audio_devices_wrapper.cpp | 14 + .../juce_audio_devices_wrapper.mm | 14 + .../juce_audio_formats_wrapper.cpp | 14 + .../juce_audio_formats_wrapper.mm | 14 + .../juce_audio_processors_wrapper.cpp | 14 + .../juce_audio_processors_wrapper.mm | 14 + .../JuceLibraryCode/juce_core_wrapper.cpp | 14 + .../JuceLibraryCode/juce_core_wrapper.mm | 14 + .../juce_cryptography_wrapper.cpp | 14 + .../juce_cryptography_wrapper.mm | 14 + .../juce_data_structures_wrapper.cpp | 14 + .../juce_data_structures_wrapper.mm | 14 + .../JuceLibraryCode/juce_events_wrapper.cpp | 14 + .../JuceLibraryCode/juce_events_wrapper.mm | 14 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 14 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 14 + .../juce_gui_basics_wrapper.cpp | 14 + .../juce_gui_basics_wrapper.mm | 14 + .../juce_gui_extra_wrapper.cpp | 14 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 14 + .../JuceLibraryCode/juce_opengl_wrapper.cpp | 14 + .../JuceLibraryCode/juce_opengl_wrapper.mm | 14 + .../JuceLibraryCode/juce_video_wrapper.cpp | 14 + .../JuceLibraryCode/juce_video_wrapper.mm | 14 + extras/static library/juce.jucer | 42 + .../build/mac/English.lproj/InfoPlist.strings | Bin 212 -> 0 bytes .../build/mac/Jucer.xcodeproj/project.pbxproj | 19 +- extras/the jucer/build/vc6/Jucer.dsp | 549 - extras/the jucer/build/vc6/Jucer.dsw | 44 - extras/the jucer/build/vc6/jucer.rc | 2 - extras/the jucer/build/vc6/jucer_icon.ico | Bin 15086 -> 0 bytes extras/the jucer/build/vc8/jucer.vcproj | 1395 +- extras/the jucer/src/juce_AppConfig.h | 10 - extras/the jucer/src/juce_LibrarySource.mm | 8 - extras/the jucer/src/jucer_Main.cpp | 27 +- .../components/jucer_ComponentTypeHandler.cpp | 7 +- .../components/jucer_TabbedComponentHandler.h | 20 +- .../model/components/jucer_ViewportHandler.h | 3 +- .../model/documents/jucer_ButtonDocument.cpp | 3 +- .../documents/jucer_ComponentDocument.cpp | 3 +- .../src/model/jucer_ComponentLayout.cpp | 30 +- .../src/model/jucer_JucerDocument.cpp | 17 +- .../the jucer/src/model/jucer_ObjectTypes.cpp | 22 +- .../src/model/jucer_PaintRoutine.cpp | 28 +- .../paintelements/jucer_ColouredElement.cpp | 16 +- .../paintelements/jucer_PaintElementGroup.h | 10 +- .../paintelements/jucer_PaintElementPath.cpp | 12 +- extras/the jucer/src/ui/jucer_MainWindow.cpp | 16 +- .../src/ui/jucer_PaintRoutineEditor.cpp | 6 +- .../Builds/VisualStudio2008/juce_dll.sln | 10 +- .../Builds/VisualStudio2008/juce_dll.vcproj | 4357 + .../windows dll/JuceLibraryCode/AppConfig.h | 63 + .../windows dll/JuceLibraryCode/JuceHeader.h | 46 + .../juce_audio_basics_wrapper.cpp | 15 + .../juce_audio_basics_wrapper.mm | 15 + .../juce_audio_devices_wrapper.cpp | 15 + .../juce_audio_devices_wrapper.mm | 15 + .../juce_audio_formats_wrapper.cpp | 15 + .../juce_audio_formats_wrapper.mm | 15 + .../juce_audio_processors_wrapper.cpp | 15 + .../juce_audio_processors_wrapper.mm | 15 + .../JuceLibraryCode/juce_core_wrapper.cpp | 15 + .../JuceLibraryCode/juce_core_wrapper.mm | 15 + .../juce_cryptography_wrapper.cpp | 15 + .../juce_cryptography_wrapper.mm | 15 + .../juce_data_structures_wrapper.cpp | 15 + .../juce_data_structures_wrapper.mm | 15 + .../JuceLibraryCode/juce_events_wrapper.cpp | 15 + .../JuceLibraryCode/juce_events_wrapper.mm | 15 + .../JuceLibraryCode/juce_graphics_wrapper.cpp | 15 + .../JuceLibraryCode/juce_graphics_wrapper.mm | 15 + .../juce_gui_audio_wrapper.cpp | 15 + .../JuceLibraryCode/juce_gui_audio_wrapper.mm | 15 + .../juce_gui_basics_wrapper.cpp | 15 + .../juce_gui_basics_wrapper.mm | 15 + .../juce_gui_extra_wrapper.cpp | 15 + .../JuceLibraryCode/juce_gui_extra_wrapper.mm | 15 + .../JuceLibraryCode/juce_opengl_wrapper.cpp | 15 + .../JuceLibraryCode/juce_opengl_wrapper.mm | 15 + .../JuceLibraryCode/juce_video_wrapper.cpp | 15 + .../JuceLibraryCode/juce_video_wrapper.mm | 15 + extras/windows dll/jucedll.jucer | 41 + juce.h | 159 +- juce_Config.h | 321 - juce_amalgamated.cpp | 293484 +-------------- juce_amalgamated.h | 70040 +--- juce_amalgamated.mm | 8 - .../buffers}/juce_AudioDataConverters.cpp | 8 - .../buffers}/juce_AudioDataConverters.h | 12 +- .../buffers}/juce_AudioSampleBuffer.cpp | 90 +- .../buffers}/juce_AudioSampleBuffer.h | 39 +- .../effects}/juce_Decibels.h | 0 .../effects}/juce_IIRFilter.cpp | 5 - .../effects}/juce_IIRFilter.h | 2 - .../juce_audio_basics/effects}/juce_Reverb.h | 8 +- .../juce_audio_basics/juce_audio_basics.cpp | 54 + modules/juce_audio_basics/juce_audio_basics.h | 99 + modules/juce_audio_basics/juce_module_info | 20 + .../midi/juce_MidiBuffer.cpp | 5 - .../juce_audio_basics}/midi/juce_MidiBuffer.h | 1 - .../juce_audio_basics}/midi/juce_MidiFile.cpp | 6 - .../juce_audio_basics}/midi/juce_MidiFile.h | 2 - .../midi/juce_MidiKeyboardState.cpp | 6 - .../midi/juce_MidiKeyboardState.h | 1 - .../midi/juce_MidiMessage.cpp | 5 - .../midi/juce_MidiMessage.h | 2 - .../midi/juce_MidiMessageSequence.cpp | 6 - .../midi/juce_MidiMessageSequence.h | 1 - .../sources}/juce_AudioSource.h | 2 +- .../sources}/juce_BufferingAudioSource.cpp | 125 +- .../sources}/juce_BufferingAudioSource.h | 13 +- .../juce_ChannelRemappingAudioSource.cpp | 5 - .../juce_ChannelRemappingAudioSource.h | 3 - .../sources}/juce_IIRFilterAudioSource.cpp | 5 - .../sources}/juce_IIRFilterAudioSource.h | 4 +- .../sources}/juce_MixerAudioSource.cpp | 6 - .../sources}/juce_MixerAudioSource.h | 3 - .../sources}/juce_PositionableAudioSource.h | 0 .../sources}/juce_ResamplingAudioSource.cpp | 5 - .../sources}/juce_ResamplingAudioSource.h | 2 - .../sources}/juce_ReverbAudioSource.cpp | 5 - .../sources}/juce_ReverbAudioSource.h | 4 +- .../juce_ToneGeneratorAudioSource.cpp | 5 - .../sources}/juce_ToneGeneratorAudioSource.h | 0 .../synthesisers/juce_Synthesiser.cpp | 5 - .../synthesisers/juce_Synthesiser.h | 7 +- .../audio_cd}/juce_AudioCDBurner.h | 3 - .../audio_cd}/juce_AudioCDReader.cpp | 5 - .../audio_cd}/juce_AudioCDReader.h | 10 +- .../audio_io}/juce_AudioDeviceManager.cpp | 5 - .../audio_io}/juce_AudioDeviceManager.h | 8 +- .../audio_io}/juce_AudioIODevice.cpp | 5 - .../audio_io}/juce_AudioIODevice.h | 6 +- .../audio_io}/juce_AudioIODeviceType.cpp | 5 - .../audio_io}/juce_AudioIODeviceType.h | 1 - .../juce_audio_devices/juce_audio_devices.cpp | 218 + .../juce_audio_devices/juce_audio_devices.h | 129 + modules/juce_audio_devices/juce_module_info | 22 + .../midi_io}/juce_MidiInput.h | 2 - .../midi_io}/juce_MidiMessageCollector.cpp | 6 - .../midi_io}/juce_MidiMessageCollector.h | 1 - .../midi_io}/juce_MidiOutput.cpp | 14 +- .../midi_io}/juce_MidiOutput.h | 5 - .../native}/juce_MidiDataConcatenator.h | 4 +- .../native}/juce_android_Audio.cpp | 11 +- .../native}/juce_android_Midi.cpp | 9 - .../native}/juce_ios_Audio.cpp | 92 +- .../native/juce_linux_ALSA.cpp | 12 +- .../native}/juce_linux_AudioCDReader.cpp | 10 +- .../native}/juce_linux_JackAudio.cpp | 52 +- .../native}/juce_linux_Midi.cpp | 4 - .../native}/juce_mac_AudioCDBurner.mm | 18 - .../native}/juce_mac_AudioCDReader.mm | 17 +- .../native}/juce_mac_CoreAudio.cpp | 14 +- .../native}/juce_mac_CoreMidi.cpp | 12 +- .../native}/juce_win32_ASIO.cpp | 42 +- .../native/juce_win32_AudioCDBurner.cpp | 415 + .../native}/juce_win32_AudioCDReader.cpp | 407 +- .../native}/juce_win32_DirectSound.cpp | 244 +- .../native}/juce_win32_Midi.cpp | 75 +- .../native}/juce_win32_WASAPI.cpp | 24 +- .../sources}/juce_AudioSourcePlayer.cpp | 5 - .../sources}/juce_AudioSourcePlayer.h | 3 - .../sources}/juce_AudioTransportSource.cpp | 16 +- .../sources}/juce_AudioTransportSource.h | 12 +- .../codecs}/flac/Flac Licence.txt | 0 .../juce_audio_formats/codecs}/flac/all.h | 0 .../juce_audio_formats/codecs}/flac/alloc.h | 0 .../juce_audio_formats/codecs}/flac/assert.h | 0 .../codecs}/flac/callback.h | 0 .../juce_audio_formats/codecs}/flac/export.h | 0 .../juce_audio_formats/codecs}/flac/format.h | 0 .../codecs}/flac/libFLAC/bitmath.c | 6 - .../codecs}/flac/libFLAC/bitreader.c | 5 - .../codecs}/flac/libFLAC/bitwriter.c | 5 - .../codecs}/flac/libFLAC/cpu.c | 5 - .../codecs}/flac/libFLAC/crc.c | 6 - .../codecs}/flac/libFLAC/fixed.c | 6 - .../codecs}/flac/libFLAC/float.c | 6 - .../codecs}/flac/libFLAC/format.c | 6 - .../flac/libFLAC/include/private/all.h | 0 .../flac/libFLAC/include/private/bitmath.h | 0 .../flac/libFLAC/include/private/bitreader.h | 0 .../flac/libFLAC/include/private/bitwriter.h | 0 .../flac/libFLAC/include/private/cpu.h | 0 .../flac/libFLAC/include/private/crc.h | 0 .../flac/libFLAC/include/private/fixed.h | 0 .../flac/libFLAC/include/private/float.h | 0 .../flac/libFLAC/include/private/format.h | 0 .../flac/libFLAC/include/private/lpc.h | 0 .../flac/libFLAC/include/private/md5.h | 0 .../flac/libFLAC/include/private/memory.h | 0 .../flac/libFLAC/include/private/metadata.h | 0 .../include/private/stream_encoder_framing.h | 0 .../flac/libFLAC/include/private/window.h | 0 .../flac/libFLAC/include/protected/all.h | 0 .../include/protected/stream_decoder.h | 0 .../include/protected/stream_encoder.h | 0 .../codecs}/flac/libFLAC/lpc_flac.c | 6 - .../codecs}/flac/libFLAC/md5.c | 6 - .../codecs}/flac/libFLAC/memory.c | 6 - .../codecs}/flac/libFLAC/stream_decoder.c | 5 - .../codecs}/flac/libFLAC/stream_encoder.c | 5 - .../flac/libFLAC/stream_encoder_framing.c | 6 - .../codecs}/flac/libFLAC/window_flac.c | 5 - .../codecs}/flac/metadata.h | 0 .../codecs}/flac/ordinals.h | 0 .../codecs}/flac/stream_decoder.h | 0 .../codecs}/flac/stream_encoder.h | 0 .../codecs}/juce_AiffAudioFormat.cpp | 399 +- .../codecs}/juce_AiffAudioFormat.h | 6 +- .../codecs}/juce_CoreAudioFormat.cpp | 35 +- .../codecs}/juce_CoreAudioFormat.h | 6 +- .../codecs}/juce_FlacAudioFormat.cpp | 57 +- .../codecs}/juce_FlacAudioFormat.h | 10 +- .../codecs}/juce_OggVorbisAudioFormat.cpp | 55 +- .../codecs}/juce_OggVorbisAudioFormat.h | 17 +- .../codecs}/juce_QuickTimeAudioFormat.cpp | 20 +- .../codecs}/juce_QuickTimeAudioFormat.h | 6 +- .../codecs}/juce_WavAudioFormat.cpp | 791 +- .../codecs}/juce_WavAudioFormat.h | 6 +- .../codecs}/oggvorbis/Ogg Vorbis Licence.txt | 0 .../codecs}/oggvorbis/bitwise.c | 5 - .../codecs}/oggvorbis/codec.h | 0 .../codecs}/oggvorbis/config_types.h | 0 .../codecs}/oggvorbis/framing.c | 5 - .../codecs}/oggvorbis/libvorbis-1.3.2/AUTHORS | 0 .../codecs}/oggvorbis/libvorbis-1.3.2/CHANGES | 0 .../codecs}/oggvorbis/libvorbis-1.3.2/COPYING | 0 .../codecs}/oggvorbis/libvorbis-1.3.2/README | 0 .../oggvorbis/libvorbis-1.3.2/lib/analysis.c | 4 - .../oggvorbis/libvorbis-1.3.2/lib/backends.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/bitrate.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/bitrate.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/block.c | 5 - .../lib/books/coupled/res_books_51.h | 0 .../lib/books/coupled/res_books_stereo.h | 0 .../lib/books/floor/floor_books.h | 0 .../lib/books/uncoupled/res_books_uncoupled.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/codebook.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/codebook.h | 0 .../libvorbis-1.3.2/lib/codec_internal.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/envelope.c | 7 - .../oggvorbis/libvorbis-1.3.2/lib/envelope.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/floor0.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/floor1.c | 7 - .../oggvorbis/libvorbis-1.3.2/lib/highlevel.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/info.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/lookup.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/lookup.h | 0 .../libvorbis-1.3.2/lib/lookup_data.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/lpc.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/lpc.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/lsp.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/lsp.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/mapping0.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/masking.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/mdct.c | 4 - .../oggvorbis/libvorbis-1.3.2/lib/mdct.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/misc.h | 0 .../libvorbis-1.3.2/lib/modes/floor_all.h | 0 .../libvorbis-1.3.2/lib/modes/psych_11.h | 0 .../libvorbis-1.3.2/lib/modes/psych_16.h | 0 .../libvorbis-1.3.2/lib/modes/psych_44.h | 0 .../libvorbis-1.3.2/lib/modes/psych_8.h | 0 .../libvorbis-1.3.2/lib/modes/residue_16.h | 0 .../libvorbis-1.3.2/lib/modes/residue_44.h | 0 .../libvorbis-1.3.2/lib/modes/residue_44p51.h | 0 .../libvorbis-1.3.2/lib/modes/residue_44u.h | 0 .../libvorbis-1.3.2/lib/modes/residue_8.h | 0 .../libvorbis-1.3.2/lib/modes/setup_11.h | 0 .../libvorbis-1.3.2/lib/modes/setup_16.h | 0 .../libvorbis-1.3.2/lib/modes/setup_22.h | 0 .../libvorbis-1.3.2/lib/modes/setup_32.h | 0 .../libvorbis-1.3.2/lib/modes/setup_44.h | 0 .../libvorbis-1.3.2/lib/modes/setup_44p51.h | 0 .../libvorbis-1.3.2/lib/modes/setup_44u.h | 0 .../libvorbis-1.3.2/lib/modes/setup_8.h | 0 .../libvorbis-1.3.2/lib/modes/setup_X.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/os.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/psy.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/psy.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/registry.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/registry.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/res0.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/scales.h | 0 .../libvorbis-1.3.2/lib/sharedbook.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/smallft.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/smallft.h | 0 .../oggvorbis/libvorbis-1.3.2/lib/synthesis.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c | 5 - .../libvorbis-1.3.2/lib/vorbisfile.c | 6 - .../oggvorbis/libvorbis-1.3.2/lib/window.c | 5 - .../oggvorbis/libvorbis-1.3.2/lib/window.h | 0 .../codecs}/oggvorbis/ogg.h | 0 .../codecs}/oggvorbis/os_types.h | 0 .../codecs}/oggvorbis/vorbisenc.h | 0 .../codecs}/oggvorbis/vorbisfile.h | 0 .../format}/juce_AudioFormat.cpp | 5 - .../format}/juce_AudioFormat.h | 5 +- .../format}/juce_AudioFormatManager.cpp | 12 - .../format}/juce_AudioFormatManager.h | 1 - .../format}/juce_AudioFormatReader.cpp | 74 +- .../format}/juce_AudioFormatReader.h | 18 +- .../format}/juce_AudioFormatReaderSource.cpp | 21 +- .../format}/juce_AudioFormatReaderSource.h | 6 - .../format}/juce_AudioFormatWriter.cpp | 42 +- .../format}/juce_AudioFormatWriter.h | 30 +- .../format}/juce_AudioSubsectionReader.cpp | 5 - .../format}/juce_AudioSubsectionReader.h | 0 .../juce_audio_formats/juce_audio_formats.cpp | 100 + .../juce_audio_formats/juce_audio_formats.h | 97 + modules/juce_audio_formats/juce_module_info | 18 + .../sampler}/juce_Sampler.cpp | 8 +- .../sampler}/juce_Sampler.h | 4 - .../AU/juce_AU_Resources.r | 7 +- .../AU/juce_AU_Wrapper.mm | 30 +- .../RTAS/juce_RTAS_DigiCode1.cpp | 4 +- .../RTAS/juce_RTAS_DigiCode2.cpp | 4 +- .../RTAS/juce_RTAS_DigiCode3.cpp | 7 +- .../RTAS/juce_RTAS_DigiCode_Header.h | 3 +- .../RTAS/juce_RTAS_MacResources.r | 0 .../RTAS/juce_RTAS_MacUtilities.mm | 19 +- .../RTAS/juce_RTAS_WinExports.def | 0 .../RTAS/juce_RTAS_WinResources.rsr | Bin .../RTAS/juce_RTAS_WinUtilities.cpp | 9 +- .../RTAS/juce_RTAS_Wrapper.cpp | 40 +- .../juce_StandaloneFilterWindow.cpp | 0 .../Standalone/juce_StandaloneFilterWindow.h | 2 +- .../VST/juce_VST_Wrapper.cpp | 108 +- .../VST/juce_VST_Wrapper.mm | 13 +- .../juce_audio_plugin_client.h | 15 +- .../juce_audio_plugin_client/juce_module_info | 38 + .../utility/juce_CarbonVisibility.h | 59 +- .../utility/juce_CheckSettingMacros.h | 58 +- .../utility/juce_FakeMouseMoveGenerator.h | 74 + .../utility/juce_IncludeModuleHeaders.h | 11 +- .../utility/juce_IncludeSystemHeaders.h | 42 +- .../utility}/juce_PluginHostType.h | 0 .../format}/juce_AudioPluginFormat.cpp | 15 +- .../format}/juce_AudioPluginFormat.h | 3 +- .../format}/juce_AudioPluginFormatManager.cpp | 12 - .../format}/juce_AudioPluginFormatManager.h | 2 - .../juce_AudioUnitPluginFormat.h | 2 +- .../juce_AudioUnitPluginFormat.mm | 111 +- .../format_types}/juce_DirectXPluginFormat.h | 2 +- .../format_types}/juce_LADSPAPluginFormat.h | 2 +- .../format_types}/juce_VSTMidiEventList.h | 0 .../format_types}/juce_VSTPluginFormat.cpp | 76 +- .../format_types}/juce_VSTPluginFormat.h | 2 +- .../juce_audio_processors.cpp | 66 + .../juce_audio_processors.h | 125 + .../juce_audio_processors/juce_module_info | 21 + .../processors/juce_AudioPlayHead.h | 0 .../processors}/juce_AudioPluginInstance.h | 0 .../processors/juce_AudioProcessor.cpp | 8 +- .../processors/juce_AudioProcessor.h | 12 +- .../processors/juce_AudioProcessorEditor.cpp | 6 - .../processors/juce_AudioProcessorEditor.h | 1 - .../processors/juce_AudioProcessorGraph.cpp | 26 +- .../processors/juce_AudioProcessorGraph.h | 6 +- .../processors/juce_AudioProcessorListener.h | 0 .../juce_GenericAudioProcessorEditor.cpp | 6 - .../juce_GenericAudioProcessorEditor.h | 1 - .../processors}/juce_PluginDescription.cpp | 6 - .../processors}/juce_PluginDescription.h | 3 - .../scanning}/juce_KnownPluginList.cpp | 6 - .../scanning}/juce_KnownPluginList.h | 6 +- .../scanning}/juce_PluginDirectoryScanner.cpp | 7 - .../scanning}/juce_PluginDirectoryScanner.h | 2 +- .../scanning}/juce_PluginListComponent.cpp | 12 - .../scanning}/juce_PluginListComponent.h | 5 +- .../juce_AudioDeviceSelectorComponent.cpp | 42 +- .../gui}/juce_AudioDeviceSelectorComponent.h | 6 - .../gui}/juce_AudioThumbnail.cpp | 20 +- .../gui}/juce_AudioThumbnail.h | 12 +- .../gui}/juce_AudioThumbnailCache.cpp | 7 - .../gui}/juce_AudioThumbnailCache.h | 0 .../gui}/juce_MidiKeyboardComponent.cpp | 5 - .../gui}/juce_MidiKeyboardComponent.h | 6 - modules/juce_audio_utils/juce_audio_utils.cpp | 45 + modules/juce_audio_utils/juce_audio_utils.h | 57 + modules/juce_audio_utils/juce_module_info | 20 + .../players}/juce_AudioProcessorPlayer.cpp | 5 - .../players}/juce_AudioProcessorPlayer.h | 7 +- .../How to build a browser plugin.txt | 0 .../juce_browser_plugin.cpp | 55 + .../juce_browser_plugin/juce_browser_plugin.h | 146 + modules/juce_browser_plugin/juce_module_info | 16 + .../wrapper/juce_ActiveX_GlueCode.cpp | 46 +- .../wrapper/juce_BrowserPluginComponent.h | 21 +- .../wrapper/juce_NPAPI_GlueCode.cpp | 65 +- .../wrapper/juce_NPAPI_MacResource.r | 0 .../wrapper/juce_NPAPI_WinResource.rc | 2 +- .../wrapper/npapi/ReadMe.txt | 0 .../juce_browser_plugin}/wrapper/npapi/jni.h | 0 .../wrapper/npapi/jni_md.h | 0 .../juce_browser_plugin}/wrapper/npapi/jri.h | 0 .../wrapper/npapi/jri_md.h | 0 .../wrapper/npapi/jritypes.h | 0 .../wrapper/npapi/npapi.h | 0 .../wrapper/npapi/npruntime.h | 0 .../wrapper/npapi/nptypes.h | 0 .../wrapper/npapi/npupp.h | 0 .../wrapper/npapi/obsolete/protypes.h | 0 .../wrapper/npapi/prcpucfg.h | 0 .../wrapper/npapi/prtypes.h | 0 .../containers/juce_AbstractFifo.cpp | 7 +- .../juce_core}/containers/juce_AbstractFifo.h | 0 .../juce_core}/containers/juce_Array.h | 0 .../containers/juce_ArrayAllocationBase.h | 2 +- .../containers/juce_DynamicObject.cpp | 5 - .../containers/juce_DynamicObject.h | 0 .../containers/juce_ElementComparator.h | 0 .../juce_core}/containers/juce_HashMap.h | 0 .../containers/juce_LinkedListPointer.h | 0 .../containers/juce_NamedValueSet.cpp | 6 - .../containers/juce_NamedValueSet.h | 0 .../juce_core}/containers/juce_OwnedArray.h | 0 .../containers/juce_PropertySet.cpp | 6 - .../juce_core}/containers/juce_PropertySet.h | 2 +- .../containers/juce_ReferenceCountedArray.h | 0 .../containers/juce_ScopedValueSetter.h | 0 .../juce_core}/containers/juce_SortedSet.h | 0 .../juce_core}/containers/juce_SparseSet.h | 0 .../juce_core}/containers/juce_Variant.cpp | 10 +- .../juce_core}/containers/juce_Variant.h | 4 +- .../files/juce_DirectoryIterator.cpp | 5 - .../juce_core}/files/juce_DirectoryIterator.h | 2 +- .../juce_core}/files/juce_File.cpp | 21 +- .../juce_core}/files/juce_File.h | 12 +- .../juce_core}/files/juce_FileInputStream.cpp | 8 +- .../juce_core}/files/juce_FileInputStream.h | 0 .../files/juce_FileOutputStream.cpp | 13 +- .../juce_core}/files/juce_FileOutputStream.h | 0 .../juce_core}/files/juce_FileSearchPath.cpp | 5 - .../juce_core}/files/juce_FileSearchPath.h | 2 +- .../juce_core}/files/juce_MemoryMappedFile.h | 0 .../juce_core}/files/juce_TemporaryFile.cpp | 7 - .../juce_core}/files/juce_TemporaryFile.h | 0 .../juce_core/json}/juce_JSON.cpp | 10 +- .../juce_core/json}/juce_JSON.h | 2 +- modules/juce_core/juce_core.cpp | 147 + .../juce_core/juce_core.h | 316 +- modules/juce_core/juce_module_info | 32 + .../juce_core/logging}/juce_FileLogger.cpp | 17 +- .../juce_core/logging}/juce_FileLogger.h | 2 +- .../juce_core/logging}/juce_Logger.cpp | 5 - .../juce_core/logging}/juce_Logger.h | 0 .../juce_core}/maths/juce_BigInteger.cpp | 80 +- .../juce_core}/maths/juce_BigInteger.h | 11 +- .../juce_core}/maths/juce_Expression.cpp | 18 +- .../juce_core}/maths/juce_Expression.h | 0 .../juce_core}/maths/juce_MathsFunctions.h | 71 +- .../juce_core}/maths/juce_Random.cpp | 8 +- .../juce_core}/maths/juce_Random.h | 0 {src => modules/juce_core}/maths/juce_Range.h | 0 .../juce_core}/memory/juce_Atomic.h | 1 - .../juce_core}/memory/juce_ByteOrder.h | 34 +- .../juce_core}/memory/juce_HeapBlock.h | 34 +- .../memory/juce_LeakedObjectDetector.h | 0 .../juce_core}/memory/juce_Memory.h | 26 +- .../juce_core}/memory/juce_MemoryBlock.cpp | 17 +- .../juce_core}/memory/juce_MemoryBlock.h | 0 .../memory/juce_OptionalScopedPointer.h | 0 .../memory/juce_ReferenceCountedObject.h | 0 .../juce_core}/memory/juce_ScopedPointer.h | 5 +- .../juce_core/memory}/juce_Singleton.h | 0 .../juce_core}/memory/juce_WeakReference.h | 37 +- .../juce_core/misc}/juce_Result.cpp | 5 - .../juce_core/misc}/juce_Result.h | 0 .../juce_core/misc}/juce_Uuid.cpp | 8 - .../juce_core/misc}/juce_Uuid.h | 0 .../juce_core/misc}/juce_WindowsRegistry.h | 0 .../native}/java/ComponentPeerView.java | 0 .../native}/java/JuceAppActivity.java | 0 .../native/juce_BasicNativeHeaders.h | 210 + .../juce_core/native}/juce_android_Files.cpp | 9 - .../native}/juce_android_JNIHelpers.h | 85 +- .../juce_core/native/juce_android_Misc.cpp | 15 +- .../native}/juce_android_Network.cpp | 6 - .../native}/juce_android_SystemStats.cpp | 117 +- .../native}/juce_android_Threads.cpp | 7 - .../juce_core/native}/juce_linux_Files.cpp | 7 - .../juce_core/native}/juce_linux_Network.cpp | 9 - .../native}/juce_linux_SystemStats.cpp | 9 - .../juce_core/native}/juce_linux_Threads.cpp | 6 - .../juce_core/native}/juce_mac_Files.mm | 8 +- .../juce_core/native}/juce_mac_Network.mm | 8 - .../juce_core/native}/juce_mac_ObjCSuffix.h | 0 .../juce_core/native}/juce_mac_Strings.mm | 7 - .../juce_core/native}/juce_mac_SystemStats.mm | 21 +- .../juce_core/native}/juce_mac_Threads.mm | 7 - .../juce_core/native}/juce_osx_ObjCHelpers.h | 0 .../juce_core/native/juce_posix_NamedPipe.cpp | 198 + .../juce_core/native}/juce_posix_SharedCode.h | 0 .../native}/juce_win32_ComSmartPtr.h | 4 +- .../juce_core/native}/juce_win32_Files.cpp | 152 +- .../juce_core/native}/juce_win32_Network.cpp | 25 +- .../juce_core/native}/juce_win32_Registry.cpp | 10 +- .../native}/juce_win32_SystemStats.cpp | 18 +- .../juce_core/native}/juce_win32_Threads.cpp | 13 +- .../juce_core}/network/juce_MACAddress.cpp | 5 - .../juce_core}/network/juce_MACAddress.h | 2 +- .../juce_core/network}/juce_NamedPipe.cpp | 17 +- .../juce_core/network}/juce_NamedPipe.h | 5 +- .../juce_core}/network/juce_Socket.cpp | 8 +- .../juce_core}/network/juce_Socket.h | 2 +- .../juce_core}/network/juce_URL.cpp | 14 +- .../juce_core}/network/juce_URL.h | 4 +- .../streams/juce_BufferedInputStream.cpp | 16 +- .../streams/juce_BufferedInputStream.h | 4 +- .../streams/juce_FileInputSource.cpp | 6 - .../juce_core}/streams/juce_FileInputSource.h | 0 .../juce_core}/streams/juce_InputSource.h | 0 .../juce_core}/streams/juce_InputStream.cpp | 10 +- .../juce_core}/streams/juce_InputStream.h | 2 +- .../streams/juce_MemoryInputStream.cpp | 14 +- .../streams/juce_MemoryInputStream.h | 2 +- .../streams/juce_MemoryOutputStream.cpp | 10 +- .../streams/juce_MemoryOutputStream.h | 4 +- .../juce_core}/streams/juce_OutputStream.cpp | 12 +- .../juce_core}/streams/juce_OutputStream.h | 4 +- .../streams/juce_SubregionStream.cpp | 5 - .../juce_core}/streams/juce_SubregionStream.h | 2 +- .../juce_core/system}/juce_PlatformDefs.h | 31 +- .../juce_core/system}/juce_StandardHeader.h | 92 +- .../juce_core/system}/juce_SystemStats.cpp | 7 - .../juce_core/system}/juce_SystemStats.h | 0 .../juce_core/system}/juce_TargetPlatform.h | 2 + .../juce_core}/text/juce_CharPointer_ASCII.h | 12 +- .../juce_core}/text/juce_CharPointer_UTF16.h | 2 +- .../juce_core}/text/juce_CharPointer_UTF32.h | 0 .../juce_core}/text/juce_CharPointer_UTF8.h | 8 +- .../text/juce_CharacterFunctions.cpp | 17 +- .../juce_core}/text/juce_CharacterFunctions.h | 15 +- .../juce_core}/text/juce_Identifier.cpp | 6 - .../juce_core}/text/juce_Identifier.h | 0 .../juce_core}/text/juce_LocalisedStrings.cpp | 6 - .../juce_core}/text/juce_LocalisedStrings.h | 2 +- .../juce_core}/text/juce_NewLine.h | 0 .../juce_core}/text/juce_String.cpp | 76 +- {src => modules/juce_core}/text/juce_String.h | 2 +- .../juce_core}/text/juce_StringArray.cpp | 7 +- .../juce_core}/text/juce_StringArray.h | 0 .../juce_core}/text/juce_StringPairArray.cpp | 5 - .../juce_core}/text/juce_StringPairArray.h | 0 .../juce_core}/text/juce_StringPool.cpp | 5 - .../juce_core}/text/juce_StringPool.h | 0 .../juce_core}/threads/juce_CriticalSection.h | 0 .../juce_core}/threads/juce_DynamicLibrary.h | 0 .../threads/juce_InterProcessLock.h | 0 .../juce_core}/threads/juce_Process.h | 0 .../juce_core}/threads/juce_ReadWriteLock.cpp | 6 - .../juce_core}/threads/juce_ReadWriteLock.h | 0 .../juce_core}/threads/juce_ScopedLock.h | 0 .../juce_core}/threads/juce_ScopedReadLock.h | 0 .../juce_core}/threads/juce_ScopedWriteLock.h | 0 .../juce_core}/threads/juce_SpinLock.h | 0 .../juce_core}/threads/juce_Thread.cpp | 10 +- .../juce_core}/threads/juce_Thread.h | 0 .../juce_core}/threads/juce_ThreadPool.cpp | 6 - .../juce_core}/threads/juce_ThreadPool.h | 0 .../threads/juce_TimeSliceThread.cpp | 5 - .../juce_core}/threads/juce_TimeSliceThread.h | 2 +- .../juce_core}/threads/juce_WaitableEvent.h | 0 .../time}/juce_PerformanceCounter.cpp | 9 +- .../juce_core/time}/juce_PerformanceCounter.h | 2 +- .../juce_core/time}/juce_RelativeTime.cpp | 6 - .../juce_core/time}/juce_RelativeTime.h | 0 .../juce_core/time}/juce_Time.cpp | 29 +- .../juce_core/time}/juce_Time.h | 0 .../juce_core/unit_tests}/juce_UnitTest.cpp | 5 - .../juce_core/unit_tests}/juce_UnitTest.h | 0 .../juce_core/xml}/juce_XmlDocument.cpp | 25 +- .../juce_core/xml}/juce_XmlDocument.h | 4 +- .../juce_core/xml}/juce_XmlElement.cpp | 10 - .../juce_core/xml}/juce_XmlElement.h | 6 +- .../zip}/juce_GZIPCompressorOutputStream.cpp | 19 +- .../zip}/juce_GZIPCompressorOutputStream.h | 6 +- .../zip}/juce_GZIPDecompressorInputStream.cpp | 35 +- .../zip}/juce_GZIPDecompressorInputStream.h | 6 +- .../juce_core/zip}/juce_ZipFile.cpp | 26 +- .../juce_core/zip}/juce_ZipFile.h | 6 +- .../juce_core/zip}/zlib/README | 0 .../juce_core/zip}/zlib/adler32.c | 0 .../juce_core/zip}/zlib/compress.c | 0 .../juce_core/zip}/zlib/crc32.c | 0 .../juce_core/zip}/zlib/crc32.h | 0 .../juce_core/zip}/zlib/deflate.c | 0 .../juce_core/zip}/zlib/deflate.h | 0 .../juce_core/zip}/zlib/infback.c | 0 .../juce_core/zip}/zlib/inffast.c | 0 .../juce_core/zip}/zlib/inffast.h | 0 .../juce_core/zip}/zlib/inffixed.h | 0 .../juce_core/zip}/zlib/inflate.c | 0 .../juce_core/zip}/zlib/inflate.h | 0 .../juce_core/zip}/zlib/inftrees.c | 0 .../juce_core/zip}/zlib/inftrees.h | 0 .../juce_core/zip}/zlib/trees.c | 0 .../juce_core/zip}/zlib/trees.h | 0 .../juce_core/zip}/zlib/uncompr.c | 0 .../juce_core/zip}/zlib/zconf.h | 0 .../juce_core/zip}/zlib/zconf.in.h | 0 .../juce_core/zip}/zlib/zlib.h | 0 .../juce_core/zip}/zlib/zutil.c | 0 .../juce_core/zip}/zlib/zutil.h | 0 .../encryption}/juce_BlowFish.cpp | 5 - .../encryption}/juce_BlowFish.h | 2 - .../encryption}/juce_Primes.cpp | 6 - .../encryption}/juce_Primes.h | 2 - .../encryption}/juce_RSAKey.cpp | 6 - .../encryption}/juce_RSAKey.h | 2 - .../juce_cryptography/hashing}/juce_MD5.cpp | 6 - .../juce_cryptography/hashing}/juce_MD5.h | 5 - .../hashing}/juce_SHA256.cpp | 9 - .../juce_cryptography/hashing}/juce_SHA256.h | 4 - .../juce_cryptography/juce_cryptography.cpp | 43 + modules/juce_cryptography/juce_cryptography.h | 54 + modules/juce_cryptography/juce_module_info | 17 + .../juce_ApplicationProperties.cpp | 40 - .../juce_ApplicationProperties.h | 18 +- .../app_properties}/juce_PropertiesFile.cpp | 16 - .../app_properties}/juce_PropertiesFile.h | 6 - .../juce_data_structures.cpp | 43 + .../juce_data_structures.h | 44 +- modules/juce_data_structures/juce_module_info | 19 + .../undomanager}/juce_UndoManager.cpp | 7 - .../undomanager}/juce_UndoManager.h | 5 - .../undomanager}/juce_UndoableAction.h | 0 .../values}/juce_Value.cpp | 4 - .../juce_data_structures/values}/juce_Value.h | 6 - .../values}/juce_ValueTree.cpp | 6 - .../values}/juce_ValueTree.h | 6 +- .../broadcasters}/juce_ActionBroadcaster.cpp | 6 - .../broadcasters}/juce_ActionBroadcaster.h | 3 +- .../broadcasters}/juce_ActionListener.h | 2 - .../broadcasters}/juce_AsyncUpdater.cpp | 7 - .../broadcasters}/juce_AsyncUpdater.h | 3 +- .../broadcasters}/juce_ChangeBroadcaster.cpp | 6 - .../broadcasters}/juce_ChangeBroadcaster.h | 0 .../broadcasters}/juce_ChangeListener.h | 0 .../broadcasters}/juce_ListenerList.h | 2 - .../juce_InterprocessConnection.cpp | 9 +- .../juce_InterprocessConnection.h | 6 +- .../juce_InterprocessConnectionServer.cpp | 6 - .../juce_InterprocessConnectionServer.h | 0 modules/juce_events/juce_events.cpp | 101 + modules/juce_events/juce_events.h | 91 + modules/juce_events/juce_module_info | 20 + .../messages/juce_ApplicationBase.cpp | 59 + .../messages/juce_ApplicationBase.h | 163 + .../messages}/juce_CallbackMessage.h | 0 .../messages}/juce_DeletedAtShutdown.cpp | 8 - .../messages}/juce_DeletedAtShutdown.h | 2 - .../juce_events/messages}/juce_Message.cpp | 5 - .../juce_events/messages}/juce_Message.h | 1 - .../messages}/juce_MessageListener.cpp | 6 - .../messages}/juce_MessageListener.h | 0 .../messages}/juce_MessageManager.cpp | 12 +- .../messages}/juce_MessageManager.h | 4 - .../juce_events/native}/juce_ScopedXLock.h | 0 .../native}/juce_android_Messaging.cpp | 8 - .../native}/juce_ios_MessageManager.mm | 43 - .../native}/juce_linux_Messaging.cpp | 15 +- .../native}/juce_mac_MessageManager.mm | 34 +- .../native}/juce_osx_MessageQueue.h | 0 .../native}/juce_win32_HiddenMessageWindow.h | 0 .../native}/juce_win32_Messaging.cpp | 84 +- .../juce_events/timers}/juce_MultiTimer.cpp | 6 - .../juce_events/timers}/juce_MultiTimer.h | 3 - .../juce_events/timers}/juce_Timer.cpp | 15 +- .../juce_events/timers}/juce_Timer.h | 0 .../juce_graphics}/colour/juce_Colour.cpp | 7 +- .../juce_graphics}/colour/juce_Colour.h | 0 .../colour/juce_ColourGradient.cpp | 9 +- .../colour/juce_ColourGradient.h | 2 - .../juce_graphics}/colour/juce_Colours.cpp | 7 +- .../juce_graphics}/colour/juce_Colours.h | 1 - .../juce_graphics/colour}/juce_FillType.cpp | 6 - .../juce_graphics/colour}/juce_FillType.h | 3 +- .../juce_graphics}/colour/juce_PixelFormats.h | 4 +- .../contexts/juce_GraphicsContext.cpp | 8 - .../contexts/juce_GraphicsContext.h | 3 +- .../contexts/juce_LowLevelGraphicsContext.h | 4 +- ...uce_LowLevelGraphicsPostScriptRenderer.cpp | 10 - .../juce_LowLevelGraphicsPostScriptRenderer.h | 0 .../juce_LowLevelGraphicsSoftwareRenderer.cpp | 74 +- .../juce_LowLevelGraphicsSoftwareRenderer.h | 0 .../effects/juce_DropShadowEffect.cpp | 8 +- .../effects/juce_DropShadowEffect.h | 0 .../effects/juce_GlowEffect.cpp | 6 - .../juce_graphics}/effects/juce_GlowEffect.h | 0 .../effects/juce_ImageEffectFilter.h | 2 +- .../fonts/juce_CustomTypeface.cpp | 10 - .../fonts/juce_CustomTypeface.h | 1 - .../juce_graphics}/fonts/juce_Font.cpp | 20 +- .../juce_graphics}/fonts/juce_Font.h | 16 +- .../fonts/juce_GlyphArrangement.cpp | 8 - .../fonts/juce_GlyphArrangement.h | 0 .../juce_graphics}/fonts/juce_TextLayout.cpp | 6 - .../juce_graphics}/fonts/juce_TextLayout.h | 3 +- .../juce_graphics}/fonts/juce_Typeface.cpp | 9 - .../juce_graphics}/fonts/juce_Typeface.h | 2 - .../geometry/juce_AffineTransform.cpp | 5 - .../geometry/juce_AffineTransform.h | 0 .../juce_graphics}/geometry/juce_BorderSize.h | 0 .../geometry}/juce_EdgeTable.cpp | 19 +- .../juce_graphics/geometry}/juce_EdgeTable.h | 1 - .../juce_graphics}/geometry/juce_Line.h | 0 .../juce_graphics}/geometry/juce_Path.cpp | 11 +- .../juce_graphics}/geometry/juce_Path.h | 5 +- .../geometry/juce_PathIterator.cpp | 8 +- .../geometry/juce_PathIterator.h | 0 .../geometry/juce_PathStrokeType.cpp | 6 - .../geometry/juce_PathStrokeType.h | 0 .../juce_graphics}/geometry/juce_Point.h | 0 .../juce_graphics}/geometry/juce_Rectangle.h | 1 - .../geometry/juce_RectangleList.cpp | 5 - .../geometry/juce_RectangleList.h | 0 .../image_formats}/jpglib/README | 0 .../image_formats}/jpglib/cderror.h | 0 .../jpglib/changes to libjpeg for JUCE.txt | 0 .../image_formats}/jpglib/jcapimin.c | 0 .../image_formats}/jpglib/jcapistd.c | 0 .../image_formats}/jpglib/jccoefct.c | 0 .../image_formats}/jpglib/jccolor.c | 0 .../image_formats}/jpglib/jcdctmgr.c | 0 .../image_formats}/jpglib/jchuff.c | 0 .../image_formats}/jpglib/jchuff.h | 0 .../image_formats}/jpglib/jcinit.c | 0 .../image_formats}/jpglib/jcmainct.c | 0 .../image_formats}/jpglib/jcmarker.c | 0 .../image_formats}/jpglib/jcmaster.c | 0 .../image_formats}/jpglib/jcomapi.c | 0 .../image_formats}/jpglib/jconfig.h | 0 .../image_formats}/jpglib/jcparam.c | 0 .../image_formats}/jpglib/jcphuff.c | 0 .../image_formats}/jpglib/jcprepct.c | 0 .../image_formats}/jpglib/jcsample.c | 0 .../image_formats}/jpglib/jctrans.c | 0 .../image_formats}/jpglib/jdapimin.c | 0 .../image_formats}/jpglib/jdapistd.c | 0 .../image_formats}/jpglib/jdatasrc.c | 0 .../image_formats}/jpglib/jdcoefct.c | 0 .../image_formats}/jpglib/jdcolor.c | 0 .../image_formats}/jpglib/jdct.h | 0 .../image_formats}/jpglib/jddctmgr.c | 0 .../image_formats}/jpglib/jdhuff.c | 0 .../image_formats}/jpglib/jdhuff.h | 0 .../image_formats}/jpglib/jdinput.c | 0 .../image_formats}/jpglib/jdmainct.c | 0 .../image_formats}/jpglib/jdmarker.c | 0 .../image_formats}/jpglib/jdmaster.c | 0 .../image_formats}/jpglib/jdmerge.c | 0 .../image_formats}/jpglib/jdphuff.c | 0 .../image_formats}/jpglib/jdpostct.c | 0 .../image_formats}/jpglib/jdsample.c | 0 .../image_formats}/jpglib/jdtrans.c | 0 .../image_formats}/jpglib/jerror.c | 0 .../image_formats}/jpglib/jerror.h | 0 .../image_formats}/jpglib/jfdctflt.c | 0 .../image_formats}/jpglib/jfdctfst.c | 0 .../image_formats}/jpglib/jfdctint.c | 0 .../image_formats}/jpglib/jidctflt.c | 0 .../image_formats}/jpglib/jidctfst.c | 0 .../image_formats}/jpglib/jidctint.c | 0 .../image_formats}/jpglib/jidctred.c | 0 .../image_formats}/jpglib/jinclude.h | 0 .../image_formats}/jpglib/jmemmgr.c | 0 .../image_formats}/jpglib/jmemnobs.c | 0 .../image_formats}/jpglib/jmemsys.h | 0 .../image_formats}/jpglib/jmorecfg.h | 0 .../image_formats}/jpglib/jpegint.h | 0 .../image_formats}/jpglib/jpeglib.h | 0 .../image_formats}/jpglib/jquant1.c | 0 .../image_formats}/jpglib/jquant2.c | 0 .../image_formats}/jpglib/jutils.c | 0 .../image_formats}/jpglib/jversion.h | 0 .../image_formats}/jpglib/transupp.c | 0 .../image_formats}/jpglib/transupp.h | 0 .../image_formats}/juce_GIFLoader.cpp | 12 +- .../image_formats}/juce_JPEGLoader.cpp | 32 +- .../image_formats}/juce_PNGLoader.cpp | 31 +- .../image_formats}/pnglib/LICENSE | 0 .../image_formats}/pnglib/libpng_readme.txt | 0 .../juce_graphics/image_formats}/pnglib/png.c | 0 .../juce_graphics/image_formats}/pnglib/png.h | 2 +- .../image_formats}/pnglib/pngconf.h | 0 .../image_formats}/pnglib/pngerror.c | 0 .../image_formats}/pnglib/pngget.c | 0 .../image_formats}/pnglib/pngmem.c | 0 .../image_formats}/pnglib/pngpread.c | 0 .../image_formats}/pnglib/pngread.c | 0 .../image_formats}/pnglib/pngrio.c | 0 .../image_formats}/pnglib/pngrtran.c | 0 .../image_formats}/pnglib/pngrutil.c | 0 .../image_formats}/pnglib/pngset.c | 0 .../image_formats}/pnglib/pngtrans.c | 0 .../image_formats}/pnglib/pngwio.c | 0 .../image_formats}/pnglib/pngwrite.c | 0 .../image_formats}/pnglib/pngwtran.c | 0 .../image_formats}/pnglib/pngwutil.c | 0 .../juce_graphics/images}/juce_Image.cpp | 17 +- .../juce_graphics/images}/juce_Image.h | 3 +- .../juce_graphics/images}/juce_ImageCache.cpp | 12 +- .../juce_graphics/images}/juce_ImageCache.h | 1 - .../images}/juce_ImageConvolutionKernel.cpp | 7 +- .../images}/juce_ImageConvolutionKernel.h | 0 .../images}/juce_ImageFileFormat.cpp | 9 +- .../images}/juce_ImageFileFormat.h | 5 +- modules/juce_graphics/juce_graphics.cpp | 112 + modules/juce_graphics/juce_graphics.h | 163 + modules/juce_graphics/juce_module_info | 25 + .../native}/juce_android_Fonts.cpp | 41 +- .../native}/juce_android_GraphicsContext.cpp | 46 +- .../native}/juce_linux_Fonts.cpp | 36 +- .../native/juce_mac_CoreGraphicsContext.h | 118 + .../native/juce_mac_CoreGraphicsContext.mm | 867 + .../native/juce_mac_CoreGraphicsHelpers.h | 56 + .../juce_graphics/native}/juce_mac_Fonts.mm | 47 +- .../juce_win32_Direct2DGraphicsContext.cpp | 9 - .../native}/juce_win32_Fonts.cpp | 85 +- .../placement}/juce_Justification.cpp | 5 - .../placement}/juce_Justification.h | 0 .../placement}/juce_RectanglePlacement.cpp | 5 - .../placement}/juce_RectanglePlacement.h | 0 .../application/juce_Application.cpp | 39 +- .../application/juce_Application.h | 47 +- .../application}/juce_Initialisation.h | 10 +- .../buttons/juce_ArrowButton.cpp | 5 - .../buttons/juce_ArrowButton.h | 1 - .../juce_gui_basics}/buttons/juce_Button.cpp | 9 - .../juce_gui_basics}/buttons/juce_Button.h | 6 +- .../buttons/juce_DrawableButton.cpp | 6 - .../buttons/juce_DrawableButton.h | 2 +- .../buttons/juce_HyperlinkButton.cpp | 5 - .../buttons/juce_HyperlinkButton.h | 1 - .../buttons/juce_ImageButton.cpp | 7 - .../buttons/juce_ImageButton.h | 0 .../buttons/juce_ShapeButton.cpp | 5 - .../buttons/juce_ShapeButton.h | 2 - .../buttons/juce_TextButton.cpp | 6 - .../buttons/juce_TextButton.h | 0 .../buttons/juce_ToggleButton.cpp | 6 - .../buttons/juce_ToggleButton.h | 0 .../buttons/juce_ToolbarButton.cpp | 8 - .../buttons/juce_ToolbarButton.h | 2 +- .../commands}/juce_ApplicationCommandID.h | 0 .../commands}/juce_ApplicationCommandInfo.cpp | 5 - .../commands}/juce_ApplicationCommandInfo.h | 4 +- .../juce_ApplicationCommandManager.cpp | 12 - .../juce_ApplicationCommandManager.h | 4 +- .../juce_ApplicationCommandTarget.cpp | 6 - .../commands}/juce_ApplicationCommandTarget.h | 3 +- .../commands}/juce_KeyPressMappingSet.cpp | 61 +- .../commands}/juce_KeyPressMappingSet.h | 10 +- .../components/juce_Component.cpp | 29 +- .../components/juce_Component.h | 22 +- .../components/juce_ComponentListener.cpp | 5 - .../components/juce_ComponentListener.h | 0 .../components/juce_Desktop.cpp | 10 - .../components/juce_Desktop.h | 7 +- .../components/juce_ModalComponentManager.cpp | 10 - .../components/juce_ModalComponentManager.h | 4 - .../drawables/juce_Drawable.cpp | 16 +- .../drawables/juce_Drawable.h | 9 +- .../drawables/juce_DrawableComposite.cpp | 6 - .../drawables/juce_DrawableComposite.h | 6 +- .../drawables/juce_DrawableImage.cpp | 9 +- .../drawables/juce_DrawableImage.h | 3 +- .../drawables/juce_DrawablePath.cpp | 7 - .../drawables/juce_DrawablePath.h | 2 +- .../drawables/juce_DrawableRectangle.cpp | 7 - .../drawables/juce_DrawableRectangle.h | 2 +- .../drawables/juce_DrawableShape.cpp | 6 - .../drawables/juce_DrawableShape.h | 4 +- .../drawables/juce_DrawableText.cpp | 6 - .../drawables/juce_DrawableText.h | 3 +- .../drawables/juce_SVGParser.cpp | 11 +- ...juce_DirectoryContentsDisplayComponent.cpp | 5 - .../juce_DirectoryContentsDisplayComponent.h | 2 +- .../juce_DirectoryContentsList.cpp | 6 - .../filebrowser/juce_DirectoryContentsList.h | 4 - .../filebrowser/juce_FileBrowserComponent.cpp | 11 - .../filebrowser/juce_FileBrowserComponent.h | 6 +- .../filebrowser/juce_FileBrowserListener.h | 0 .../filebrowser/juce_FileChooser.cpp | 13 +- .../filebrowser/juce_FileChooser.h | 0 .../filebrowser/juce_FileChooserDialogBox.cpp | 7 - .../filebrowser/juce_FileChooserDialogBox.h | 1 - .../filebrowser/juce_FileFilter.cpp | 5 - .../filebrowser/juce_FileFilter.h | 2 - .../filebrowser/juce_FileListComponent.cpp | 7 - .../filebrowser/juce_FileListComponent.h | 4 +- .../filebrowser/juce_FilePreviewComponent.h | 3 +- .../juce_FileSearchPathListComponent.cpp | 9 - .../juce_FileSearchPathListComponent.h | 3 +- .../filebrowser/juce_FileTreeComponent.cpp | 9 - .../filebrowser/juce_FileTreeComponent.h | 2 +- .../filebrowser/juce_FilenameComponent.cpp | 10 +- .../filebrowser/juce_FilenameComponent.h | 4 +- .../juce_ImagePreviewComponent.cpp | 7 - .../filebrowser/juce_ImagePreviewComponent.h | 1 - .../filebrowser/juce_WildcardFileFilter.cpp | 5 - .../filebrowser/juce_WildcardFileFilter.h | 0 modules/juce_gui_basics/juce_gui_basics.cpp | 280 + modules/juce_gui_basics/juce_gui_basics.h | 442 + modules/juce_gui_basics/juce_module_info | 35 + .../keyboard/juce_CaretComponent.cpp | 6 - .../keyboard/juce_CaretComponent.h | 3 +- .../keyboard/juce_KeyListener.cpp | 6 - .../keyboard/juce_KeyListener.h | 0 .../keyboard/juce_KeyPress.cpp | 10 +- .../juce_gui_basics}/keyboard/juce_KeyPress.h | 1 - .../keyboard/juce_KeyboardFocusTraverser.cpp | 6 - .../keyboard/juce_KeyboardFocusTraverser.h | 0 .../keyboard/juce_ModifierKeys.cpp | 5 - .../keyboard/juce_ModifierKeys.h | 0 .../keyboard}/juce_SystemClipboard.h | 2 - .../keyboard/juce_TextEditorKeyMapper.h | 0 .../keyboard/juce_TextInputTarget.h | 2 - .../layout/juce_ComponentAnimator.cpp | 9 +- .../layout/juce_ComponentAnimator.h | 4 +- .../juce_ComponentBoundsConstrainer.cpp | 7 - .../layout/juce_ComponentBoundsConstrainer.h | 2 +- .../layout/juce_ComponentBuilder.cpp | 5 - .../layout/juce_ComponentBuilder.h | 3 +- .../layout/juce_ComponentMovementWatcher.cpp | 7 - .../layout/juce_ComponentMovementWatcher.h | 2 +- .../layout/juce_GroupComponent.cpp | 6 - .../layout/juce_GroupComponent.h | 2 +- .../layout/juce_MultiDocumentPanel.cpp | 10 +- .../layout/juce_MultiDocumentPanel.h | 0 .../layout/juce_ResizableBorderComponent.cpp | 8 - .../layout/juce_ResizableBorderComponent.h | 0 .../layout/juce_ResizableCornerComponent.cpp | 8 - .../layout/juce_ResizableCornerComponent.h | 0 .../layout/juce_ResizableEdgeComponent.cpp | 6 - .../layout/juce_ResizableEdgeComponent.h | 0 .../layout/juce_ScrollBar.cpp | 7 - .../juce_gui_basics}/layout/juce_ScrollBar.h | 3 - .../layout/juce_StretchableLayoutManager.cpp | 5 - .../layout/juce_StretchableLayoutManager.h | 2 +- .../juce_StretchableLayoutResizerBar.cpp | 6 - .../layout/juce_StretchableLayoutResizerBar.h | 2 +- .../layout/juce_StretchableObjectResizer.cpp | 5 - .../layout/juce_StretchableObjectResizer.h | 2 - .../layout/juce_TabbedButtonBar.cpp | 7 - .../layout/juce_TabbedButtonBar.h | 2 - .../layout/juce_TabbedComponent.cpp | 6 - .../layout/juce_TabbedComponent.h | 0 .../juce_gui_basics}/layout/juce_Viewport.cpp | 6 - .../juce_gui_basics}/layout/juce_Viewport.h | 0 .../lookandfeel/juce_LookAndFeel.cpp | 140 +- .../lookandfeel/juce_LookAndFeel.h | 8 +- .../menus/juce_MenuBarComponent.cpp | 7 - .../menus/juce_MenuBarComponent.h | 0 .../menus/juce_MenuBarModel.cpp | 5 - .../menus/juce_MenuBarModel.h | 0 .../juce_gui_basics}/menus/juce_PopupMenu.cpp | 13 - .../juce_gui_basics}/menus/juce_PopupMenu.h | 3 - .../misc}/juce_BubbleComponent.cpp | 6 - .../misc}/juce_BubbleComponent.h | 3 - .../misc}/juce_DropShadower.cpp | 11 - .../juce_gui_basics/misc}/juce_DropShadower.h | 2 +- .../mouse/juce_ComponentDragger.cpp | 15 +- .../mouse/juce_ComponentDragger.h | 0 .../mouse/juce_DragAndDropContainer.cpp | 16 +- .../mouse/juce_DragAndDropContainer.h | 0 .../mouse/juce_DragAndDropTarget.h | 2 +- .../mouse/juce_FileDragAndDropTarget.h | 2 +- .../mouse/juce_LassoComponent.h | 4 +- .../mouse/juce_MouseCursor.cpp | 9 - .../juce_gui_basics}/mouse/juce_MouseCursor.h | 1 - .../mouse/juce_MouseEvent.cpp | 6 - .../juce_gui_basics}/mouse/juce_MouseEvent.h | 2 - .../mouse/juce_MouseInputSource.cpp | 11 - .../mouse/juce_MouseInputSource.h | 5 +- .../mouse/juce_MouseListener.cpp | 44 +- .../mouse/juce_MouseListener.h | 0 .../mouse}/juce_SelectedItemSet.h | 2 - .../mouse/juce_TooltipClient.h | 0 .../native}/juce_android_FileChooser.cpp | 9 - .../native}/juce_android_Windowing.cpp | 50 +- .../native}/juce_ios_UIViewComponentPeer.mm | 6 - .../native}/juce_ios_Windowing.mm | 39 +- .../native}/juce_linux_Clipboard.cpp | 7 - .../native}/juce_linux_FileChooser.cpp | 7 - .../native}/juce_linux_Windowing.cpp | 108 +- .../native}/juce_mac_FileChooser.mm | 6 - .../native}/juce_mac_MainMenu.mm | 8 - .../native}/juce_mac_MouseCursor.mm | 29 +- .../native}/juce_mac_NSViewComponentPeer.mm | 8 +- .../native}/juce_mac_Windowing.mm | 16 +- .../native/juce_win32_DragAndDrop.cpp | 294 + .../native}/juce_win32_FileChooser.cpp | 14 +- .../native}/juce_win32_Windowing.cpp | 841 +- .../positioning/juce_MarkerList.cpp | 7 - .../positioning/juce_MarkerList.h | 1 - .../positioning/juce_RelativeCoordinate.cpp | 5 - .../positioning/juce_RelativeCoordinate.h | 4 - .../juce_RelativeCoordinatePositioner.cpp | 5 - .../juce_RelativeCoordinatePositioner.h | 2 +- .../juce_RelativeParallelogram.cpp | 4 - .../positioning/juce_RelativeParallelogram.h | 0 .../positioning/juce_RelativePoint.cpp | 4 - .../positioning/juce_RelativePoint.h | 0 .../positioning/juce_RelativePointPath.cpp | 6 - .../positioning/juce_RelativePointPath.h | 2 - .../positioning/juce_RelativeRectangle.cpp | 6 - .../positioning/juce_RelativeRectangle.h | 0 .../juce_BooleanPropertyComponent.cpp | 6 - .../juce_BooleanPropertyComponent.h | 0 .../juce_ButtonPropertyComponent.cpp | 5 - .../properties/juce_ButtonPropertyComponent.h | 0 .../juce_ChoicePropertyComponent.cpp | 5 - .../properties/juce_ChoicePropertyComponent.h | 2 +- .../properties/juce_PropertyComponent.cpp | 6 - .../properties/juce_PropertyComponent.h | 2 +- .../properties/juce_PropertyPanel.cpp | 7 - .../properties/juce_PropertyPanel.h | 1 - .../juce_SliderPropertyComponent.cpp | 5 - .../properties/juce_SliderPropertyComponent.h | 2 +- .../properties/juce_TextPropertyComponent.cpp | 6 - .../properties/juce_TextPropertyComponent.h | 2 +- .../widgets}/juce_ComboBox.cpp | 8 - .../juce_gui_basics/widgets}/juce_ComboBox.h | 2 - .../widgets}/juce_ImageComponent.cpp | 5 - .../widgets}/juce_ImageComponent.h | 2 +- .../juce_gui_basics/widgets}/juce_Label.cpp | 8 - .../juce_gui_basics/widgets}/juce_Label.h | 0 .../juce_gui_basics/widgets}/juce_ListBox.cpp | 8 - .../juce_gui_basics/widgets}/juce_ListBox.h | 1 - .../widgets}/juce_ProgressBar.cpp | 6 - .../widgets}/juce_ProgressBar.h | 4 +- .../juce_gui_basics/widgets}/juce_Slider.cpp | 11 - .../juce_gui_basics/widgets}/juce_Slider.h | 5 +- .../widgets}/juce_TableHeaderComponent.cpp | 9 - .../widgets}/juce_TableHeaderComponent.h | 1 - .../widgets}/juce_TableListBox.cpp | 10 - .../widgets}/juce_TableListBox.h | 0 .../widgets}/juce_TextEditor.cpp | 19 +- .../widgets}/juce_TextEditor.h | 6 +- .../juce_gui_basics/widgets}/juce_Toolbar.cpp | 15 - .../juce_gui_basics/widgets}/juce_Toolbar.h | 0 .../widgets}/juce_ToolbarItemComponent.cpp | 10 - .../widgets}/juce_ToolbarItemComponent.h | 2 +- .../widgets}/juce_ToolbarItemFactory.h | 0 .../widgets}/juce_ToolbarItemPalette.cpp | 6 - .../widgets}/juce_ToolbarItemPalette.h | 0 .../widgets}/juce_TreeView.cpp | 10 - .../juce_gui_basics/widgets}/juce_TreeView.h | 2 - .../windows/juce_AlertWindow.cpp | 13 - .../windows/juce_AlertWindow.h | 7 +- .../windows/juce_CallOutBox.cpp | 8 - .../windows/juce_CallOutBox.h | 2 +- .../windows/juce_ComponentPeer.cpp | 13 - .../windows/juce_ComponentPeer.h | 4 +- .../windows/juce_DialogWindow.cpp | 6 - .../windows/juce_DialogWindow.h | 0 .../windows/juce_DocumentWindow.cpp | 9 - .../windows/juce_DocumentWindow.h | 0 .../windows/juce_NativeMessageBox.h | 0 .../windows/juce_ResizableWindow.cpp | 9 - .../windows/juce_ResizableWindow.h | 0 .../windows/juce_ThreadWithProgressWindow.cpp | 9 +- .../windows/juce_ThreadWithProgressWindow.h | 3 - .../windows/juce_TooltipWindow.cpp | 11 - .../windows/juce_TooltipWindow.h | 3 +- .../windows/juce_TopLevelWindow.cpp | 11 - .../windows/juce_TopLevelWindow.h | 4 +- .../juce_CPlusPlusCodeTokeniser.cpp | 16 +- .../code_editor/juce_CPlusPlusCodeTokeniser.h | 0 .../code_editor/juce_CodeDocument.cpp | 10 +- .../code_editor/juce_CodeDocument.h | 5 - .../code_editor/juce_CodeEditorComponent.cpp | 8 - .../code_editor/juce_CodeEditorComponent.h | 4 - .../code_editor/juce_CodeTokeniser.h | 0 .../documents}/juce_FileBasedDocument.cpp | 9 - .../documents}/juce_FileBasedDocument.h | 3 - .../embedding}/juce_ActiveXControlComponent.h | 2 - .../embedding}/juce_NSViewComponent.h | 15 +- .../embedding/juce_UIViewComponent.h | 88 + modules/juce_gui_extra/juce_gui_extra.cpp | 142 + modules/juce_gui_extra/juce_gui_extra.h | 103 + modules/juce_gui_extra/juce_module_info | 21 + .../lookandfeel/juce_OldSchoolLookAndFeel.cpp | 21 - .../lookandfeel/juce_OldSchoolLookAndFeel.h | 2 - .../juce_gui_extra/misc}/juce_AppleRemote.h | 0 .../misc}/juce_BubbleMessageComponent.cpp | 7 - .../misc}/juce_BubbleMessageComponent.h | 4 - .../misc}/juce_ColourSelector.cpp | 9 - .../misc}/juce_ColourSelector.h | 3 - .../misc}/juce_KeyMappingEditorComponent.cpp | 14 - .../misc}/juce_KeyMappingEditorComponent.h | 4 - .../misc}/juce_PreferencesPanel.cpp | 8 - .../misc}/juce_PreferencesPanel.h | 4 - .../misc}/juce_RecentlyOpenedFilesList.cpp | 5 - .../misc}/juce_RecentlyOpenedFilesList.h | 3 - .../misc}/juce_SplashScreen.cpp | 9 - .../juce_gui_extra/misc}/juce_SplashScreen.h | 4 - .../misc}/juce_SystemTrayIconComponent.cpp | 6 - .../misc}/juce_SystemTrayIconComponent.h | 12 +- .../misc}/juce_WebBrowserComponent.h | 2 - .../juce_android_WebBrowserComponent.cpp | 8 - .../native/juce_ios_UIViewComponent.mm | 128 + .../native/juce_ios_WebBrowserComponent.mm | 85 + .../native/juce_linux_SystemTrayIcon.cpp | 124 + .../juce_linux_WebBrowserComponent.cpp | 6 - .../native}/juce_mac_AppleRemote.mm | 7 - .../juce_mac_CarbonViewWrapperComponent.h | 0 .../native}/juce_mac_NSViewComponent.mm | 61 +- .../native}/juce_mac_WebBrowserComponent.mm | 76 - .../native}/juce_win32_ActiveXComponent.cpp | 41 +- .../native/juce_win32_SystemTrayIcon.cpp | 204 + .../juce_win32_WebBrowserComponent.cpp | 9 +- modules/juce_opengl/juce_module_info | 17 + modules/juce_opengl/juce_opengl.cpp | 152 + .../juce_opengl/juce_opengl.h | 49 +- .../native}/juce_android_OpenGLComponent.cpp | 9 - .../native/juce_ios_OpenGLComponent.mm | 239 + .../native}/juce_linux_OpenGLComponent.cpp | 8 - .../native}/juce_mac_OpenGLComponent.mm | 241 +- .../native}/juce_win32_OpenGLComponent.cpp | 20 +- .../opengl}/juce_OpenGLComponent.cpp | 14 +- .../opengl}/juce_OpenGLComponent.h | 155 +- .../juce_opengl/opengl/juce_OpenGLContext.h | 119 + .../opengl/juce_OpenGLPixelFormat.h | 85 + .../juce_video/capture}/juce_CameraDevice.h | 0 modules/juce_video/juce_module_info | 18 + modules/juce_video/juce_video.cpp | 155 + modules/juce_video/juce_video.h | 90 + .../native}/juce_android_CameraDevice.cpp | 10 - .../native}/juce_mac_CameraDevice.mm | 6 - .../juce_mac_QuickTimeMovieComponent.mm | 5 +- .../native}/juce_win32_CameraDevice.cpp | 9 - .../juce_win32_DirectShowComponent.cpp | 6 - .../juce_win32_QuickTimeMovieComponent.cpp | 21 +- .../playback}/juce_DirectShowComponent.h | 2 - .../playback}/juce_QuickTimeMovieComponent.h | 5 - src/juce_DefineMacros.h | 63 - src/juce_WithoutMacros.h | 67 - src/juce_app_includes.h | 811 - src/native/android/juce_android_Misc.cpp | 85 - .../android/juce_android_NativeCode.cpp | 119 - src/native/common/juce_posix_NamedPipe.cpp | 213 - src/native/linux/juce_linux_NativeCode.cpp | 129 - src/native/linux/juce_linux_NativeIncludes.h | 140 - .../mac/juce_mac_CoreGraphicsContext.mm | 938 - src/native/mac/juce_mac_NativeCode.mm | 157 - src/native/mac/juce_mac_NativeIncludes.h | 93 - .../windows/juce_win32_AutoLinkLibraries.h | 58 - src/native/windows/juce_win32_NativeCode.cpp | 137 - .../windows/juce_win32_NativeIncludes.h | 218 - 1527 files changed, 90380 insertions(+), 396643 deletions(-) delete mode 100644 Builds/Linux/Makefile delete mode 100644 Builds/MacOSX/Juce.xcodeproj/project.pbxproj delete mode 100644 Builds/VisualStudio2005/Juce.sln delete mode 100644 Builds/VisualStudio2005/Juce.vcproj delete mode 100644 Builds/VisualStudio2008/Juce.vcproj delete mode 100644 Builds/VisualStudio2008_DLL/Juce.vcproj delete mode 100644 Builds/VisualStudio2010/Juce.vcxproj delete mode 100644 Builds/VisualStudio2010/Juce.vcxproj.filters delete mode 100644 Builds/iOS/Juce.xcodeproj/project.pbxproj delete mode 100644 Juce.jucer delete mode 100644 bin/ReadMe.txt delete mode 100644 extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.cpp delete mode 100644 extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.mm delete mode 100644 extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.cpp delete mode 100644 extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.mm create mode 100644 extras/Introjucer/JuceLibraryCode/ReadMe.txt create mode 100644 extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/Introjucer/Source/Project/jucer_AudioPluginModule.h create mode 100644 extras/Introjucer/Source/Project/jucer_JuceLibraryModule.h create mode 100644 extras/Introjucer/Source/Project/jucer_Module.cpp create mode 100644 extras/Introjucer/Source/Project/jucer_Module.h delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.cpp delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.mm delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.cpp delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.mm delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.cpp delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.mm delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.cpp delete mode 100644 extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/ReadMe.txt create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.mm create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.cpp create mode 100644 extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.mm delete mode 100644 extras/amalgamator/Amalgamator.jucer delete mode 100644 extras/amalgamator/Builds/Linux/Makefile delete mode 100644 extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj delete mode 100644 extras/amalgamator/Builds/VisualStudio2005/Amalgamator.sln delete mode 100644 extras/amalgamator/Builds/VisualStudio2005/Amalgamator.vcproj delete mode 100644 extras/amalgamator/Builds/VisualStudio2008/Amalgamator.sln delete mode 100644 extras/amalgamator/Builds/VisualStudio2008/Amalgamator.vcproj delete mode 100644 extras/amalgamator/JuceLibraryCode/AppConfig.h delete mode 100644 extras/amalgamator/JuceLibraryCode/JuceHeader.h delete mode 100644 extras/amalgamator/JuceLibraryCode/JuceLibraryCode.cpp delete mode 100644 extras/amalgamator/JuceLibraryCode/JuceLibraryCode.mm delete mode 100644 extras/amalgamator/Source/Main.cpp create mode 100644 extras/audio plugin demo/Builds/Linux/Makefile rename extras/{audio plugins/demo => audio plugin demo}/Builds/MacOSX/Info.plist (100%) create mode 100644 extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj rename extras/{audio plugins/demo => audio plugin demo}/Builds/VisualStudio2005/JuceDemoPlugin.sln (100%) create mode 100644 extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj rename extras/{audio plugins/demo => audio plugin demo}/Builds/VisualStudio2008/JuceDemoPlugin.sln (100%) create mode 100644 extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj rename extras/{audio plugins => audio plugin demo}/How to use this framework.txt (100%) rename extras/{audio plugins/demo => audio plugin demo}/JuceDemoPlugin.jucer (58%) create mode 100644 extras/audio plugin demo/JuceLibraryCode/AppConfig.h create mode 100644 extras/audio plugin demo/JuceLibraryCode/JuceHeader.h create mode 100644 extras/audio plugin demo/JuceLibraryCode/ReadMe.txt create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_AU_Wrapper_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_MacUtilities_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_WinUtilities_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.mm rename extras/{audio plugins/demo => audio plugin demo}/Source/PluginEditor.cpp (100%) rename extras/{audio plugins/demo => audio plugin demo}/Source/PluginEditor.h (93%) rename extras/{audio plugins/demo => audio plugin demo}/Source/PluginProcessor.cpp (100%) rename extras/{audio plugins/demo => audio plugin demo}/Source/PluginProcessor.h (96%) delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.cpp delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.mm delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.cpp delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.mm delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.cpp delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.mm delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.cpp delete mode 100644 extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/ReadMe.txt create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.mm create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.cpp create mode 100644 extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.mm delete mode 100644 extras/audio plugins/demo/Builds/Linux/Makefile delete mode 100644 extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj delete mode 100644 extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj delete mode 100644 extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/AppConfig.h delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceHeader.h delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.cpp delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.mm delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.cpp delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.mm delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.cpp delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.mm delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.cpp delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.mm delete mode 100644 extras/audio plugins/demo/JuceLibraryCode/JucePluginCharacteristics.h delete mode 100644 extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.sln delete mode 100644 extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.vcproj delete mode 100644 extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.cpp delete mode 100644 extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.mm create mode 100644 extras/binarybuilder/JuceLibraryCode/ReadMe.txt create mode 100644 extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/browser plugin demo/How to build a browser plugin.txt rename extras/{browser plugins/demo => browser plugin demo}/build/mac/Info.plist (100%) rename extras/{browser plugins/demo => browser plugin demo}/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj (73%) rename extras/{browser plugins/demo => browser plugin demo}/build/win32/JuceBrowserPluginDemo.sln (100%) rename extras/{browser plugins/demo => browser plugin demo}/build/win32/JuceBrowserPluginDemo.vcproj (83%) create mode 100644 extras/browser plugin demo/src/AppConfig.h rename extras/{browser plugins/demo => browser plugin demo}/src/BrowserPluginCharacteristics.h (100%) rename extras/{browser plugins/demo => browser plugin demo}/src/JuceBrowserPluginDemo.cpp (79%) create mode 100644 extras/browser plugin demo/src/JuceHeader.h create mode 100644 extras/browser plugin demo/src/juce_browser_plugin_wrapper.cpp create mode 100644 extras/browser plugin demo/src/juce_browser_plugin_wrapper.mm rename extras/{Introjucer/JuceLibraryCode/JuceLibraryCode1.cpp => browser plugin demo/src/juce_core_wrapper.cpp} (70%) rename extras/{Introjucer/JuceLibraryCode/JuceLibraryCode1.mm => browser plugin demo/src/juce_core_wrapper.mm} (70%) create mode 100644 extras/browser plugin demo/src/juce_data_structures_wrapper.cpp create mode 100644 extras/browser plugin demo/src/juce_data_structures_wrapper.mm rename extras/{Introjucer/JuceLibraryCode/JuceLibraryCode2.cpp => browser plugin demo/src/juce_events_wrapper.cpp} (70%) rename extras/{Introjucer/JuceLibraryCode/JuceLibraryCode2.mm => browser plugin demo/src/juce_events_wrapper.mm} (70%) create mode 100644 extras/browser plugin demo/src/juce_graphics_wrapper.cpp create mode 100644 extras/browser plugin demo/src/juce_graphics_wrapper.mm create mode 100644 extras/browser plugin demo/src/juce_gui_basics_wrapper.cpp create mode 100644 extras/browser plugin demo/src/juce_gui_basics_wrapper.mm rename extras/{browser plugins/demo => browser plugin demo}/test.html (100%) delete mode 100644 extras/browser plugins/demo/build/mac/English.lproj/InfoPlist.strings delete mode 100644 extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff delete mode 100644 extras/browser plugins/demo/src/juce_LibrarySource.cpp delete mode 100644 extras/browser plugins/demo/src/juce_LibrarySource.mm delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode1.cpp delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode1.mm delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode2.cpp delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode2.mm delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode3.cpp delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode3.mm delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode4.cpp delete mode 100644 extras/example projects/JuceLibraryCode/JuceLibraryCode4.mm create mode 100644 extras/example projects/JuceLibraryCode/ReadMe.txt create mode 100644 extras/example projects/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/example projects/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/example projects/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj rename Builds/VisualStudio2008/Juce.sln => extras/static library/Builds/VisualStudio2008/juce.sln (55%) create mode 100644 extras/static library/Builds/VisualStudio2008/juce.vcproj rename Builds/VisualStudio2010/Juce.sln => extras/static library/Builds/VisualStudio2010/juce.sln (53%) create mode 100644 extras/static library/Builds/VisualStudio2010/juce.vcxproj create mode 100644 extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters create mode 100644 extras/static library/JuceLibraryCode/AppConfig.h create mode 100644 extras/static library/JuceLibraryCode/JuceHeader.h create mode 100644 extras/static library/JuceLibraryCode/ReadMe.txt create mode 100644 extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_cryptography_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_cryptography_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_opengl_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_opengl_wrapper.mm create mode 100644 extras/static library/JuceLibraryCode/juce_video_wrapper.cpp create mode 100644 extras/static library/JuceLibraryCode/juce_video_wrapper.mm create mode 100644 extras/static library/juce.jucer delete mode 100644 extras/the jucer/build/mac/English.lproj/InfoPlist.strings delete mode 100644 extras/the jucer/build/vc6/Jucer.dsp delete mode 100644 extras/the jucer/build/vc6/Jucer.dsw delete mode 100644 extras/the jucer/build/vc6/jucer.rc delete mode 100644 extras/the jucer/build/vc6/jucer_icon.ico rename Builds/VisualStudio2008_DLL/Juce.sln => extras/windows dll/Builds/VisualStudio2008/juce_dll.sln (54%) create mode 100644 extras/windows dll/Builds/VisualStudio2008/juce_dll.vcproj create mode 100644 extras/windows dll/JuceLibraryCode/AppConfig.h create mode 100644 extras/windows dll/JuceLibraryCode/JuceHeader.h create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_core_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_core_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_events_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_events_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.mm create mode 100644 extras/windows dll/JuceLibraryCode/juce_video_wrapper.cpp create mode 100644 extras/windows dll/JuceLibraryCode/juce_video_wrapper.mm create mode 100644 extras/windows dll/jucedll.jucer delete mode 100644 juce_Config.h rename {src/audio/dsp => modules/juce_audio_basics/buffers}/juce_AudioDataConverters.cpp (96%) rename {src/audio/dsp => modules/juce_audio_basics/buffers}/juce_AudioDataConverters.h (97%) rename {src/audio/dsp => modules/juce_audio_basics/buffers}/juce_AudioSampleBuffer.cpp (83%) rename {src/audio/dsp => modules/juce_audio_basics/buffers}/juce_AudioSampleBuffer.h (91%) rename {src/audio/dsp => modules/juce_audio_basics/effects}/juce_Decibels.h (100%) rename {src/audio/dsp => modules/juce_audio_basics/effects}/juce_IIRFilter.cpp (95%) rename {src/audio/dsp => modules/juce_audio_basics/effects}/juce_IIRFilter.h (96%) rename {src/audio/dsp => modules/juce_audio_basics/effects}/juce_Reverb.h (95%) create mode 100644 modules/juce_audio_basics/juce_audio_basics.cpp create mode 100644 modules/juce_audio_basics/juce_audio_basics.h create mode 100644 modules/juce_audio_basics/juce_module_info rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiBuffer.cpp (95%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiBuffer.h (97%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiFile.cpp (95%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiFile.h (96%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiKeyboardState.cpp (95%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiKeyboardState.h (97%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiMessage.cpp (96%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiMessage.h (97%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiMessageSequence.cpp (95%) rename {src/audio => modules/juce_audio_basics}/midi/juce_MidiMessageSequence.h (97%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_AudioSource.h (97%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_BufferingAudioSource.cpp (71%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_BufferingAudioSource.h (87%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ChannelRemappingAudioSource.cpp (95%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ChannelRemappingAudioSource.h (95%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_IIRFilterAudioSource.cpp (94%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_IIRFilterAudioSource.h (93%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_MixerAudioSource.cpp (93%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_MixerAudioSource.h (94%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_PositionableAudioSource.h (100%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ResamplingAudioSource.cpp (95%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ResamplingAudioSource.h (95%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ReverbAudioSource.cpp (94%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ReverbAudioSource.h (93%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ToneGeneratorAudioSource.cpp (93%) rename {src/audio/audio_sources => modules/juce_audio_basics/sources}/juce_ToneGeneratorAudioSource.h (100%) rename {src/audio => modules/juce_audio_basics}/synthesisers/juce_Synthesiser.cpp (96%) rename {src/audio => modules/juce_audio_basics}/synthesisers/juce_Synthesiser.h (96%) rename {src/audio/audio_file_formats => modules/juce_audio_devices/audio_cd}/juce_AudioCDBurner.h (96%) rename {src/audio/audio_file_formats => modules/juce_audio_devices/audio_cd}/juce_AudioCDReader.cpp (93%) rename {src/audio/audio_file_formats => modules/juce_audio_devices/audio_cd}/juce_AudioCDReader.h (92%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioDeviceManager.cpp (96%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioDeviceManager.h (96%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioIODevice.cpp (92%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioIODevice.h (96%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioIODeviceType.cpp (94%) rename {src/audio/devices => modules/juce_audio_devices/audio_io}/juce_AudioIODeviceType.h (97%) create mode 100644 modules/juce_audio_devices/juce_audio_devices.cpp create mode 100644 modules/juce_audio_devices/juce_audio_devices.h create mode 100644 modules/juce_audio_devices/juce_module_info rename {src/audio/midi => modules/juce_audio_devices/midi_io}/juce_MidiInput.h (96%) rename {src/audio/midi => modules/juce_audio_devices/midi_io}/juce_MidiMessageCollector.cpp (95%) rename {src/audio/midi => modules/juce_audio_devices/midi_io}/juce_MidiMessageCollector.h (96%) rename {src/audio/midi => modules/juce_audio_devices/midi_io}/juce_MidiOutput.cpp (91%) rename {src/audio/midi => modules/juce_audio_devices/midi_io}/juce_MidiOutput.h (94%) rename {src/native/common => modules/juce_audio_devices/native}/juce_MidiDataConcatenator.h (94%) rename {src/native/android => modules/juce_audio_devices/native}/juce_android_Audio.cpp (95%) rename {src/native/android => modules/juce_audio_devices/native}/juce_android_Midi.cpp (86%) rename {src/native/mac => modules/juce_audio_devices/native}/juce_ios_Audio.cpp (89%) rename src/native/linux/juce_linux_Audio.cpp => modules/juce_audio_devices/native/juce_linux_ALSA.cpp (95%) rename {src/native/linux => modules/juce_audio_devices/native}/juce_linux_AudioCDReader.cpp (83%) rename {src/native/linux => modules/juce_audio_devices/native}/juce_linux_JackAudio.cpp (92%) rename {src/native/linux => modules/juce_audio_devices/native}/juce_linux_Midi.cpp (96%) rename {src/native/mac => modules/juce_audio_devices/native}/juce_mac_AudioCDBurner.mm (93%) rename {src/native/mac => modules/juce_audio_devices/native}/juce_mac_AudioCDReader.mm (92%) rename {src/native/mac => modules/juce_audio_devices/native}/juce_mac_CoreAudio.cpp (96%) rename {src/native/mac => modules/juce_audio_devices/native}/juce_mac_CoreMidi.cpp (94%) rename {src/native/windows => modules/juce_audio_devices/native}/juce_win32_ASIO.cpp (95%) create mode 100644 modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp rename {src/native/windows => modules/juce_audio_devices/native}/juce_win32_AudioCDReader.cpp (72%) rename {src/native/windows => modules/juce_audio_devices/native}/juce_win32_DirectSound.cpp (84%) rename {src/native/windows => modules/juce_audio_devices/native}/juce_win32_Midi.cpp (83%) rename {src/native/windows => modules/juce_audio_devices/native}/juce_win32_WASAPI.cpp (95%) rename {src/audio/audio_sources => modules/juce_audio_devices/sources}/juce_AudioSourcePlayer.cpp (95%) rename {src/audio/audio_sources => modules/juce_audio_devices/sources}/juce_AudioSourcePlayer.h (95%) rename {src/audio/audio_sources => modules/juce_audio_devices/sources}/juce_AudioTransportSource.cpp (92%) rename {src/audio/audio_sources => modules/juce_audio_devices/sources}/juce_AudioTransportSource.h (89%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/Flac Licence.txt (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/all.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/alloc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/assert.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/callback.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/export.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/format.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/bitmath.c (94%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/bitreader.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/bitwriter.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/cpu.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/crc.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/fixed.c (97%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/float.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/format.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/all.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/bitmath.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/bitreader.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/bitwriter.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/cpu.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/crc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/fixed.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/float.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/format.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/lpc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/md5.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/memory.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/metadata.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/stream_encoder_framing.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/private/window.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/protected/all.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/protected/stream_decoder.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/include/protected/stream_encoder.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/lpc_flac.c (97%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/md5.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/memory.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/stream_decoder.c (97%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/stream_encoder.c (97%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/stream_encoder_framing.c (97%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/libFLAC/window_flac.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/metadata.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/ordinals.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/stream_decoder.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/flac/stream_encoder.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_AiffAudioFormat.cpp (65%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_AiffAudioFormat.h (92%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_CoreAudioFormat.cpp (90%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_CoreAudioFormat.h (93%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_FlacAudioFormat.cpp (91%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_FlacAudioFormat.h (84%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_OggVorbisAudioFormat.cpp (87%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_OggVorbisAudioFormat.h (85%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_QuickTimeAudioFormat.cpp (93%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_QuickTimeAudioFormat.h (93%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_WavAudioFormat.cpp (57%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/juce_WavAudioFormat.h (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/Ogg Vorbis Licence.txt (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/bitwise.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/codec.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/config_types.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/framing.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/AUTHORS (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/CHANGES (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/COPYING (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/README (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/analysis.c (93%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/backends.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/bitrate.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/bitrate.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/block.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/codebook.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/codebook.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/envelope.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/envelope.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/floor0.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/floor1.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/highlevel.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/info.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lookup.c (94%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lookup.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lpc.c (94%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lpc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lsp.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/lsp.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/mapping0.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/masking.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/mdct.c (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/mdct.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/misc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/os.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/psy.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/psy.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/registry.c (92%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/registry.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/res0.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/scales.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/smallft.c (94%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/smallft.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/synthesis.c (94%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/window.c (98%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/libvorbis-1.3.2/lib/window.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/ogg.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/os_types.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/vorbisenc.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/codecs}/oggvorbis/vorbisfile.h (100%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormat.cpp (93%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormat.h (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatManager.cpp (90%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatManager.h (96%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatReader.cpp (79%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatReader.h (94%) rename {src/audio/audio_sources => modules/juce_audio_formats/format}/juce_AudioFormatReaderSource.cpp (78%) rename {src/audio/audio_sources => modules/juce_audio_formats/format}/juce_AudioFormatReaderSource.h (92%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatWriter.cpp (85%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioFormatWriter.h (88%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioSubsectionReader.cpp (95%) rename {src/audio/audio_file_formats => modules/juce_audio_formats/format}/juce_AudioSubsectionReader.h (100%) create mode 100644 modules/juce_audio_formats/juce_audio_formats.cpp create mode 100644 modules/juce_audio_formats/juce_audio_formats.h create mode 100644 modules/juce_audio_formats/juce_module_info rename {src/audio/synthesisers => modules/juce_audio_formats/sampler}/juce_Sampler.cpp (94%) rename {src/audio/synthesisers => modules/juce_audio_formats/sampler}/juce_Sampler.h (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/AU/juce_AU_Resources.r (89%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/AU/juce_AU_Wrapper.mm (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_DigiCode1.cpp (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_DigiCode2.cpp (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_DigiCode3.cpp (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_DigiCode_Header.h (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_MacResources.r (100%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_MacUtilities.mm (90%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_WinExports.def (100%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_WinResources.rsr (100%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_WinUtilities.cpp (94%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/RTAS/juce_RTAS_Wrapper.cpp (95%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/Standalone/juce_StandaloneFilterWindow.cpp (100%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/Standalone/juce_StandaloneFilterWindow.h (96%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/VST/juce_VST_Wrapper.cpp (91%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client}/VST/juce_VST_Wrapper.mm (93%) rename src/audio/audio_file_formats/oggvorbis/juce_OggVorbisHeader.h => modules/juce_audio_plugin_client/juce_audio_plugin_client.h (74%) create mode 100644 modules/juce_audio_plugin_client/juce_module_info rename src/audio/plugin_client/juce_PluginHeaders.h => modules/juce_audio_plugin_client/utility/juce_CarbonVisibility.h (64%) rename src/audio/plugin_client/juce_IncludeCharacteristics.h => modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h (59%) create mode 100644 modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h rename src/audio/plugin_host/formats/juce_VSTPluginFormat.mm => modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h (84%) rename src/audio/audio_file_formats/flac/libFLAC/juce_FlacHeader.h => modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h (62%) rename {src/audio/plugin_client => modules/juce_audio_plugin_client/utility}/juce_PluginHostType.h (100%) rename {src/audio/plugin_host => modules/juce_audio_processors/format}/juce_AudioPluginFormat.cpp (84%) rename {src/audio/plugin_host => modules/juce_audio_processors/format}/juce_AudioPluginFormat.h (95%) rename {src/audio/plugin_host => modules/juce_audio_processors/format}/juce_AudioPluginFormatManager.cpp (89%) rename {src/audio/plugin_host => modules/juce_audio_processors/format}/juce_AudioPluginFormatManager.h (94%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_AudioUnitPluginFormat.h (96%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_AudioUnitPluginFormat.mm (92%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_DirectXPluginFormat.h (95%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_LADSPAPluginFormat.h (95%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_VSTMidiEventList.h (100%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_VSTPluginFormat.cpp (94%) rename {src/audio/plugin_host/formats => modules/juce_audio_processors/format_types}/juce_VSTPluginFormat.h (95%) create mode 100644 modules/juce_audio_processors/juce_audio_processors.cpp create mode 100644 modules/juce_audio_processors/juce_audio_processors.h create mode 100644 modules/juce_audio_processors/juce_module_info rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioPlayHead.h (100%) rename {src/audio/plugin_host => modules/juce_audio_processors/processors}/juce_AudioPluginInstance.h (100%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessor.cpp (95%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessor.h (95%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessorEditor.cpp (90%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessorEditor.h (95%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessorGraph.cpp (95%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessorGraph.h (96%) rename {src/audio => modules/juce_audio_processors}/processors/juce_AudioProcessorListener.h (100%) rename {src/audio => modules/juce_audio_processors}/processors/juce_GenericAudioProcessorEditor.cpp (93%) rename {src/audio => modules/juce_audio_processors}/processors/juce_GenericAudioProcessorEditor.h (94%) rename {src/audio/plugin_host => modules/juce_audio_processors/processors}/juce_PluginDescription.cpp (94%) rename {src/audio/plugin_host => modules/juce_audio_processors/processors}/juce_PluginDescription.h (95%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_KnownPluginList.cpp (95%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_KnownPluginList.h (94%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_PluginDirectoryScanner.cpp (93%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_PluginDirectoryScanner.h (96%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_PluginListComponent.cpp (92%) rename {src/audio/plugin_host => modules/juce_audio_processors/scanning}/juce_PluginListComponent.h (92%) rename {src/gui/components/special => modules/juce_audio_utils/gui}/juce_AudioDeviceSelectorComponent.cpp (95%) rename {src/gui/components/special => modules/juce_audio_utils/gui}/juce_AudioDeviceSelectorComponent.h (93%) rename {src/audio/audio_file_formats => modules/juce_audio_utils/gui}/juce_AudioThumbnail.cpp (94%) rename {src/audio/audio_file_formats => modules/juce_audio_utils/gui}/juce_AudioThumbnail.h (93%) rename {src/audio/audio_file_formats => modules/juce_audio_utils/gui}/juce_AudioThumbnailCache.cpp (91%) rename {src/audio/audio_file_formats => modules/juce_audio_utils/gui}/juce_AudioThumbnailCache.h (100%) rename {src/gui/components/special => modules/juce_audio_utils/gui}/juce_MidiKeyboardComponent.cpp (96%) rename {src/gui/components/special => modules/juce_audio_utils/gui}/juce_MidiKeyboardComponent.h (96%) create mode 100644 modules/juce_audio_utils/juce_audio_utils.cpp create mode 100644 modules/juce_audio_utils/juce_audio_utils.h create mode 100644 modules/juce_audio_utils/juce_module_info rename {src/audio/processors => modules/juce_audio_utils/players}/juce_AudioProcessorPlayer.cpp (95%) rename {src/audio/processors => modules/juce_audio_utils/players}/juce_AudioProcessorPlayer.h (93%) rename {extras/browser plugins => modules/juce_browser_plugin}/How to build a browser plugin.txt (100%) create mode 100644 modules/juce_browser_plugin/juce_browser_plugin.cpp create mode 100644 modules/juce_browser_plugin/juce_browser_plugin.h create mode 100644 modules/juce_browser_plugin/juce_module_info rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/juce_ActiveX_GlueCode.cpp (93%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/juce_BrowserPluginComponent.h (80%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/juce_NPAPI_GlueCode.cpp (93%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/juce_NPAPI_MacResource.r (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/juce_NPAPI_WinResource.rc (97%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/ReadMe.txt (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/jni.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/jni_md.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/jri.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/jri_md.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/jritypes.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/npapi.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/npruntime.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/nptypes.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/npupp.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/obsolete/protypes.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/prcpucfg.h (100%) rename {extras/browser plugins => modules/juce_browser_plugin}/wrapper/npapi/prtypes.h (100%) rename {src => modules/juce_core}/containers/juce_AbstractFifo.cpp (94%) rename {src => modules/juce_core}/containers/juce_AbstractFifo.h (100%) rename {src => modules/juce_core}/containers/juce_Array.h (100%) rename {src => modules/juce_core}/containers/juce_ArrayAllocationBase.h (95%) rename {src => modules/juce_core}/containers/juce_DynamicObject.cpp (93%) rename {src => modules/juce_core}/containers/juce_DynamicObject.h (100%) rename {src => modules/juce_core}/containers/juce_ElementComparator.h (100%) rename {src => modules/juce_core}/containers/juce_HashMap.h (100%) rename {src => modules/juce_core}/containers/juce_LinkedListPointer.h (100%) rename {src => modules/juce_core}/containers/juce_NamedValueSet.cpp (94%) rename {src => modules/juce_core}/containers/juce_NamedValueSet.h (100%) rename {src => modules/juce_core}/containers/juce_OwnedArray.h (100%) rename {src => modules/juce_core}/containers/juce_PropertySet.cpp (95%) rename {src => modules/juce_core}/containers/juce_PropertySet.h (97%) rename {src => modules/juce_core}/containers/juce_ReferenceCountedArray.h (100%) rename {src => modules/juce_core}/containers/juce_ScopedValueSetter.h (100%) rename {src => modules/juce_core}/containers/juce_SortedSet.h (100%) rename {src => modules/juce_core}/containers/juce_SparseSet.h (100%) rename {src => modules/juce_core}/containers/juce_Variant.cpp (96%) rename {src => modules/juce_core}/containers/juce_Variant.h (97%) rename {src/io => modules/juce_core}/files/juce_DirectoryIterator.cpp (95%) rename {src/io => modules/juce_core}/files/juce_DirectoryIterator.h (96%) rename {src/io => modules/juce_core}/files/juce_File.cpp (95%) rename {src/io => modules/juce_core}/files/juce_File.h (97%) rename {src/io => modules/juce_core}/files/juce_FileInputStream.cpp (88%) rename {src/io => modules/juce_core}/files/juce_FileInputStream.h (100%) rename {src/io => modules/juce_core}/files/juce_FileOutputStream.cpp (88%) rename {src/io => modules/juce_core}/files/juce_FileOutputStream.h (100%) rename {src/io => modules/juce_core}/files/juce_FileSearchPath.cpp (94%) rename {src/io => modules/juce_core}/files/juce_FileSearchPath.h (96%) rename {src/io => modules/juce_core}/files/juce_MemoryMappedFile.h (100%) rename {src/io => modules/juce_core}/files/juce_TemporaryFile.cpp (93%) rename {src/io => modules/juce_core}/files/juce_TemporaryFile.h (100%) rename {src/text => modules/juce_core/json}/juce_JSON.cpp (95%) rename {src/text => modules/juce_core/json}/juce_JSON.h (97%) create mode 100644 modules/juce_core/juce_core.cpp rename src/juce_core_includes.h => modules/juce_core/juce_core.h (60%) create mode 100644 modules/juce_core/juce_module_info rename {src/core => modules/juce_core/logging}/juce_FileLogger.cpp (90%) rename {src/core => modules/juce_core/logging}/juce_FileLogger.h (97%) rename {src/core => modules/juce_core/logging}/juce_Logger.cpp (93%) rename {src/core => modules/juce_core/logging}/juce_Logger.h (100%) rename {src => modules/juce_core}/maths/juce_BigInteger.cpp (88%) rename {src => modules/juce_core}/maths/juce_BigInteger.h (95%) rename {src => modules/juce_core}/maths/juce_Expression.cpp (96%) rename {src => modules/juce_core}/maths/juce_Expression.h (100%) rename {src => modules/juce_core}/maths/juce_MathsFunctions.h (92%) rename {src => modules/juce_core}/maths/juce_Random.cpp (91%) rename {src => modules/juce_core}/maths/juce_Random.h (100%) rename {src => modules/juce_core}/maths/juce_Range.h (100%) rename {src => modules/juce_core}/memory/juce_Atomic.h (97%) rename {src => modules/juce_core}/memory/juce_ByteOrder.h (92%) rename {src => modules/juce_core}/memory/juce_HeapBlock.h (87%) rename {src => modules/juce_core}/memory/juce_LeakedObjectDetector.h (100%) rename {src => modules/juce_core}/memory/juce_Memory.h (85%) rename {src => modules/juce_core}/memory/juce_MemoryBlock.cpp (93%) rename {src => modules/juce_core}/memory/juce_MemoryBlock.h (100%) rename {src => modules/juce_core}/memory/juce_OptionalScopedPointer.h (100%) rename {src => modules/juce_core}/memory/juce_ReferenceCountedObject.h (100%) rename {src => modules/juce_core}/memory/juce_ScopedPointer.h (96%) rename {src/core => modules/juce_core/memory}/juce_Singleton.h (100%) rename {src => modules/juce_core}/memory/juce_WeakReference.h (82%) rename {src/core => modules/juce_core/misc}/juce_Result.cpp (94%) rename {src/core => modules/juce_core/misc}/juce_Result.h (100%) rename {src/core => modules/juce_core/misc}/juce_Uuid.cpp (91%) rename {src/core => modules/juce_core/misc}/juce_Uuid.h (100%) rename {src/utilities => modules/juce_core/misc}/juce_WindowsRegistry.h (100%) rename {src/native/android => modules/juce_core/native}/java/ComponentPeerView.java (100%) rename {src/native/android => modules/juce_core/native}/java/JuceAppActivity.java (100%) create mode 100644 modules/juce_core/native/juce_BasicNativeHeaders.h rename {src/native/android => modules/juce_core/native}/juce_android_Files.cpp (93%) rename {src/native/android => modules/juce_core/native}/juce_android_JNIHelpers.h (84%) rename extras/browser plugins/wrapper/juce_NPAPI_GlueCode.mm => modules/juce_core/native/juce_android_Misc.cpp (77%) rename {src/native/android => modules/juce_core/native}/juce_android_Network.cpp (95%) rename {src/native/android => modules/juce_core/native}/juce_android_SystemStats.cpp (69%) rename {src/native/android => modules/juce_core/native}/juce_android_Threads.cpp (91%) rename {src/native/linux => modules/juce_core/native}/juce_linux_Files.cpp (95%) rename {src/native/linux => modules/juce_core/native}/juce_linux_Network.cpp (95%) rename {src/native/linux => modules/juce_core/native}/juce_linux_SystemStats.cpp (91%) rename {src/native/linux => modules/juce_core/native}/juce_linux_Threads.cpp (92%) rename {src/native/mac => modules/juce_core/native}/juce_mac_Files.mm (96%) rename {src/native/mac => modules/juce_core/native}/juce_mac_Network.mm (95%) rename {src/native/mac => modules/juce_core/native}/juce_mac_ObjCSuffix.h (100%) rename {src/native/mac => modules/juce_core/native}/juce_mac_Strings.mm (91%) rename {src/native/mac => modules/juce_core/native}/juce_mac_SystemStats.mm (92%) rename {src/native/mac => modules/juce_core/native}/juce_mac_Threads.mm (88%) rename {src/native/mac => modules/juce_core/native}/juce_osx_ObjCHelpers.h (100%) create mode 100644 modules/juce_core/native/juce_posix_NamedPipe.cpp rename {src/native/common => modules/juce_core/native}/juce_posix_SharedCode.h (100%) rename {src/native/windows => modules/juce_core/native}/juce_win32_ComSmartPtr.h (94%) rename {src/native/windows => modules/juce_core/native}/juce_win32_Files.cpp (83%) rename {src/native/windows => modules/juce_core/native}/juce_win32_Network.cpp (93%) rename {src/native/windows => modules/juce_core/native}/juce_win32_Registry.cpp (91%) rename {src/native/windows => modules/juce_core/native}/juce_win32_SystemStats.cpp (93%) rename {src/native/windows => modules/juce_core/native}/juce_win32_Threads.cpp (94%) rename {src/io => modules/juce_core}/network/juce_MACAddress.cpp (93%) rename {src/io => modules/juce_core}/network/juce_MACAddress.h (96%) rename {src/io/files => modules/juce_core/network}/juce_NamedPipe.cpp (86%) rename {src/io/files => modules/juce_core/network}/juce_NamedPipe.h (94%) rename {src/io => modules/juce_core}/network/juce_Socket.cpp (95%) rename {src/io => modules/juce_core}/network/juce_Socket.h (97%) rename {src/io => modules/juce_core}/network/juce_URL.cpp (94%) rename {src/io => modules/juce_core}/network/juce_URL.h (97%) rename {src/io => modules/juce_core}/streams/juce_BufferedInputStream.cpp (92%) rename {src/io => modules/juce_core}/streams/juce_BufferedInputStream.h (95%) rename {src/io => modules/juce_core}/streams/juce_FileInputSource.cpp (90%) rename {src/io => modules/juce_core}/streams/juce_FileInputSource.h (100%) rename {src/io => modules/juce_core}/streams/juce_InputSource.h (100%) rename {src/io => modules/juce_core}/streams/juce_InputStream.cpp (92%) rename {src/io => modules/juce_core}/streams/juce_InputStream.h (97%) rename {src/io => modules/juce_core}/streams/juce_MemoryInputStream.cpp (90%) rename {src/io => modules/juce_core}/streams/juce_MemoryInputStream.h (96%) rename {src/io => modules/juce_core}/streams/juce_MemoryOutputStream.cpp (93%) rename {src/io => modules/juce_core}/streams/juce_MemoryOutputStream.h (95%) rename {src/io => modules/juce_core}/streams/juce_OutputStream.cpp (93%) rename {src/io => modules/juce_core}/streams/juce_OutputStream.h (96%) rename {src/io => modules/juce_core}/streams/juce_SubregionStream.cpp (94%) rename {src/io => modules/juce_core}/streams/juce_SubregionStream.h (96%) rename {src/core => modules/juce_core/system}/juce_PlatformDefs.h (90%) rename {src/core => modules/juce_core/system}/juce_StandardHeader.h (77%) rename {src/core => modules/juce_core/system}/juce_SystemStats.cpp (92%) rename {src/core => modules/juce_core/system}/juce_SystemStats.h (100%) rename {src/core => modules/juce_core/system}/juce_TargetPlatform.h (95%) rename {src => modules/juce_core}/text/juce_CharPointer_ASCII.h (95%) rename {src => modules/juce_core}/text/juce_CharPointer_UTF16.h (96%) rename {src => modules/juce_core}/text/juce_CharPointer_UTF32.h (100%) rename {src => modules/juce_core}/text/juce_CharPointer_UTF8.h (95%) rename {src => modules/juce_core}/text/juce_CharacterFunctions.cpp (92%) rename {src => modules/juce_core}/text/juce_CharacterFunctions.h (94%) rename {src => modules/juce_core}/text/juce_Identifier.cpp (92%) rename {src => modules/juce_core}/text/juce_Identifier.h (100%) rename {src => modules/juce_core}/text/juce_LocalisedStrings.cpp (94%) rename {src => modules/juce_core}/text/juce_LocalisedStrings.h (96%) rename {src => modules/juce_core}/text/juce_NewLine.h (100%) rename {src => modules/juce_core}/text/juce_String.cpp (93%) rename {src => modules/juce_core}/text/juce_String.h (97%) rename {src => modules/juce_core}/text/juce_StringArray.cpp (95%) rename {src => modules/juce_core}/text/juce_StringArray.h (100%) rename {src => modules/juce_core}/text/juce_StringPairArray.cpp (93%) rename {src => modules/juce_core}/text/juce_StringPairArray.h (100%) rename {src => modules/juce_core}/text/juce_StringPool.cpp (94%) rename {src => modules/juce_core}/text/juce_StringPool.h (100%) rename {src => modules/juce_core}/threads/juce_CriticalSection.h (100%) rename {src => modules/juce_core}/threads/juce_DynamicLibrary.h (100%) rename {src => modules/juce_core}/threads/juce_InterProcessLock.h (100%) rename {src => modules/juce_core}/threads/juce_Process.h (100%) rename {src => modules/juce_core}/threads/juce_ReadWriteLock.cpp (94%) rename {src => modules/juce_core}/threads/juce_ReadWriteLock.h (100%) rename {src => modules/juce_core}/threads/juce_ScopedLock.h (100%) rename {src => modules/juce_core}/threads/juce_ScopedReadLock.h (100%) rename {src => modules/juce_core}/threads/juce_ScopedWriteLock.h (100%) rename {src => modules/juce_core}/threads/juce_SpinLock.h (100%) rename {src => modules/juce_core}/threads/juce_Thread.cpp (94%) rename {src => modules/juce_core}/threads/juce_Thread.h (100%) rename {src => modules/juce_core}/threads/juce_ThreadPool.cpp (95%) rename {src => modules/juce_core}/threads/juce_ThreadPool.h (100%) rename {src => modules/juce_core}/threads/juce_TimeSliceThread.cpp (95%) rename {src => modules/juce_core}/threads/juce_TimeSliceThread.h (96%) rename {src => modules/juce_core}/threads/juce_WaitableEvent.h (100%) rename {src/core => modules/juce_core/time}/juce_PerformanceCounter.cpp (90%) rename {src/core => modules/juce_core/time}/juce_PerformanceCounter.h (96%) rename {src/core => modules/juce_core/time}/juce_RelativeTime.cpp (95%) rename {src/core => modules/juce_core/time}/juce_RelativeTime.h (100%) rename {src/core => modules/juce_core/time}/juce_Time.cpp (93%) rename {src/core => modules/juce_core/time}/juce_Time.h (100%) rename {src/utilities => modules/juce_core/unit_tests}/juce_UnitTest.cpp (94%) rename {src/utilities => modules/juce_core/unit_tests}/juce_UnitTest.h (100%) rename {src/text => modules/juce_core/xml}/juce_XmlDocument.cpp (94%) rename {src/text => modules/juce_core/xml}/juce_XmlDocument.h (96%) rename {src/text => modules/juce_core/xml}/juce_XmlElement.cpp (95%) rename {src/text => modules/juce_core/xml}/juce_XmlElement.h (97%) rename {src/io/streams => modules/juce_core/zip}/juce_GZIPCompressorOutputStream.cpp (90%) rename {src/io/streams => modules/juce_core/zip}/juce_GZIPCompressorOutputStream.h (94%) rename {src/io/streams => modules/juce_core/zip}/juce_GZIPDecompressorInputStream.cpp (89%) rename {src/io/streams => modules/juce_core/zip}/juce_GZIPDecompressorInputStream.h (94%) rename {src/io/files => modules/juce_core/zip}/juce_ZipFile.cpp (92%) rename {src/io/files => modules/juce_core/zip}/juce_ZipFile.h (95%) rename {src/io/streams => modules/juce_core/zip}/zlib/README (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/adler32.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/compress.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/crc32.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/crc32.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/deflate.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/deflate.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/infback.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inffast.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inffast.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inffixed.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inflate.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inflate.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inftrees.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/inftrees.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/trees.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/trees.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/uncompr.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/zconf.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/zconf.in.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/zlib.h (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/zutil.c (100%) rename {src/io/streams => modules/juce_core/zip}/zlib/zutil.h (100%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_BlowFish.cpp (97%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_BlowFish.h (95%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_Primes.cpp (94%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_Primes.h (95%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_RSAKey.cpp (94%) rename {src/cryptography => modules/juce_cryptography/encryption}/juce_RSAKey.h (96%) rename {src/cryptography => modules/juce_cryptography/hashing}/juce_MD5.cpp (96%) rename {src/cryptography => modules/juce_cryptography/hashing}/juce_MD5.h (94%) rename {src/cryptography => modules/juce_cryptography/hashing}/juce_SHA256.cpp (95%) rename {src/cryptography => modules/juce_cryptography/hashing}/juce_SHA256.h (94%) create mode 100644 modules/juce_cryptography/juce_cryptography.cpp create mode 100644 modules/juce_cryptography/juce_cryptography.h create mode 100644 modules/juce_cryptography/juce_module_info rename {src/application => modules/juce_data_structures/app_properties}/juce_ApplicationProperties.cpp (62%) rename {src/application => modules/juce_data_structures/app_properties}/juce_ApplicationProperties.h (85%) rename {src/utilities => modules/juce_data_structures/app_properties}/juce_PropertiesFile.cpp (92%) rename {src/utilities => modules/juce_data_structures/app_properties}/juce_PropertiesFile.h (95%) create mode 100644 modules/juce_data_structures/juce_data_structures.cpp rename extras/browser plugins/wrapper/juce_IncludeBrowserPluginInfo.h => modules/juce_data_structures/juce_data_structures.h (56%) create mode 100644 modules/juce_data_structures/juce_module_info rename {src/utilities => modules/juce_data_structures/undomanager}/juce_UndoManager.cpp (94%) rename {src/utilities => modules/juce_data_structures/undomanager}/juce_UndoManager.h (95%) rename {src/utilities => modules/juce_data_structures/undomanager}/juce_UndoableAction.h (100%) rename {src/containers => modules/juce_data_structures/values}/juce_Value.cpp (94%) rename {src/containers => modules/juce_data_structures/values}/juce_Value.h (95%) rename {src/containers => modules/juce_data_structures/values}/juce_ValueTree.cpp (96%) rename {src/containers => modules/juce_data_structures/values}/juce_ValueTree.h (97%) rename {src/events => modules/juce_events/broadcasters}/juce_ActionBroadcaster.cpp (93%) rename {src/events => modules/juce_events/broadcasters}/juce_ActionBroadcaster.h (94%) rename {src/events => modules/juce_events/broadcasters}/juce_ActionListener.h (95%) rename {src/events => modules/juce_events/broadcasters}/juce_AsyncUpdater.cpp (92%) rename {src/events => modules/juce_events/broadcasters}/juce_AsyncUpdater.h (95%) rename {src/events => modules/juce_events/broadcasters}/juce_ChangeBroadcaster.cpp (94%) rename {src/events => modules/juce_events/broadcasters}/juce_ChangeBroadcaster.h (100%) rename {src/events => modules/juce_events/broadcasters}/juce_ChangeListener.h (100%) rename {src/events => modules/juce_events/broadcasters}/juce_ListenerList.h (97%) rename {src/events => modules/juce_events/interprocess}/juce_InterprocessConnection.cpp (94%) rename {src/events => modules/juce_events/interprocess}/juce_InterprocessConnection.h (95%) rename {src/events => modules/juce_events/interprocess}/juce_InterprocessConnectionServer.cpp (91%) rename {src/events => modules/juce_events/interprocess}/juce_InterprocessConnectionServer.h (100%) create mode 100644 modules/juce_events/juce_events.cpp create mode 100644 modules/juce_events/juce_events.h create mode 100644 modules/juce_events/juce_module_info create mode 100644 modules/juce_events/messages/juce_ApplicationBase.cpp create mode 100644 modules/juce_events/messages/juce_ApplicationBase.h rename {src/events => modules/juce_events/messages}/juce_CallbackMessage.h (100%) rename {src/utilities => modules/juce_events/messages}/juce_DeletedAtShutdown.cpp (90%) rename {src/utilities => modules/juce_events/messages}/juce_DeletedAtShutdown.h (95%) rename {src/events => modules/juce_events/messages}/juce_Message.cpp (93%) rename {src/events => modules/juce_events/messages}/juce_Message.h (96%) rename {src/events => modules/juce_events/messages}/juce_MessageListener.cpp (92%) rename {src/events => modules/juce_events/messages}/juce_MessageListener.h (100%) rename {src/events => modules/juce_events/messages}/juce_MessageManager.cpp (93%) rename {src/events => modules/juce_events/messages}/juce_MessageManager.h (96%) rename {src/gui/components/special => modules/juce_events/native}/juce_ScopedXLock.h (100%) rename {src/native/android => modules/juce_events/native}/juce_android_Messaging.cpp (91%) rename {src/native/mac => modules/juce_events/native}/juce_ios_MessageManager.mm (81%) rename {src/native/linux => modules/juce_events/native}/juce_linux_Messaging.cpp (93%) rename {src/native/mac => modules/juce_events/native}/juce_mac_MessageManager.mm (90%) rename {src/native/mac => modules/juce_events/native}/juce_osx_MessageQueue.h (100%) rename {src/native/windows => modules/juce_events/native}/juce_win32_HiddenMessageWindow.h (100%) rename {src/native/windows => modules/juce_events/native}/juce_win32_Messaging.cpp (74%) rename {src/events => modules/juce_events/timers}/juce_MultiTimer.cpp (93%) rename {src/events => modules/juce_events/timers}/juce_MultiTimer.h (95%) rename {src/events => modules/juce_events/timers}/juce_Timer.cpp (92%) rename {src/events => modules/juce_events/timers}/juce_Timer.h (100%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_Colour.cpp (95%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_Colour.h (100%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_ColourGradient.cpp (94%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_ColourGradient.h (96%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_Colours.cpp (97%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_Colours.h (97%) rename {src/gui/graphics/contexts => modules/juce_graphics/colour}/juce_FillType.cpp (93%) rename {src/gui/graphics/contexts => modules/juce_graphics/colour}/juce_FillType.h (96%) rename {src/gui/graphics => modules/juce_graphics}/colour/juce_PixelFormats.h (95%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_GraphicsContext.cpp (96%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_GraphicsContext.h (97%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_LowLevelGraphicsContext.h (96%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp (95%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_LowLevelGraphicsPostScriptRenderer.h (100%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp (95%) rename {src/gui/graphics => modules/juce_graphics}/contexts/juce_LowLevelGraphicsSoftwareRenderer.h (100%) rename {src/gui/graphics => modules/juce_graphics}/effects/juce_DropShadowEffect.cpp (92%) rename {src/gui/graphics => modules/juce_graphics}/effects/juce_DropShadowEffect.h (100%) rename {src/gui/graphics => modules/juce_graphics}/effects/juce_GlowEffect.cpp (90%) rename {src/gui/graphics => modules/juce_graphics}/effects/juce_GlowEffect.h (100%) rename {src/gui/graphics => modules/juce_graphics}/effects/juce_ImageEffectFilter.h (95%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_CustomTypeface.cpp (94%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_CustomTypeface.h (96%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_Font.cpp (93%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_Font.h (92%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_GlyphArrangement.cpp (96%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_GlyphArrangement.h (100%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_TextLayout.cpp (94%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_TextLayout.h (95%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_Typeface.cpp (90%) rename {src/gui/graphics => modules/juce_graphics}/fonts/juce_Typeface.h (95%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_AffineTransform.cpp (96%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_AffineTransform.h (100%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_BorderSize.h (100%) rename {src/gui/graphics/contexts => modules/juce_graphics/geometry}/juce_EdgeTable.cpp (93%) rename {src/gui/graphics/contexts => modules/juce_graphics/geometry}/juce_EdgeTable.h (97%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_Line.h (100%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_Path.cpp (96%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_Path.h (97%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_PathIterator.cpp (94%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_PathIterator.h (100%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_PathStrokeType.cpp (96%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_PathStrokeType.h (100%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_Point.h (100%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_Rectangle.h (97%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_RectangleList.cpp (95%) rename {src/gui/graphics => modules/juce_graphics}/geometry/juce_RectangleList.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/README (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/cderror.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/changes to libjpeg for JUCE.txt (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcapimin.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcapistd.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jccoefct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jccolor.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcdctmgr.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jchuff.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jchuff.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcinit.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcmainct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcmarker.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcmaster.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcomapi.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jconfig.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcparam.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcphuff.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcprepct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jcsample.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jctrans.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdapimin.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdapistd.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdatasrc.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdcoefct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdcolor.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdct.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jddctmgr.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdhuff.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdhuff.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdinput.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdmainct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdmarker.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdmaster.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdmerge.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdphuff.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdpostct.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdsample.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jdtrans.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jerror.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jerror.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jfdctflt.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jfdctfst.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jfdctint.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jidctflt.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jidctfst.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jidctint.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jidctred.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jinclude.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jmemmgr.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jmemnobs.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jmemsys.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jmorecfg.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jpegint.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jpeglib.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jquant1.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jquant2.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jutils.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/jversion.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/transupp.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/jpglib/transupp.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/juce_GIFLoader.cpp (92%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/juce_JPEGLoader.cpp (89%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/juce_PNGLoader.cpp (90%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/LICENSE (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/libpng_readme.txt (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/png.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/png.h (97%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngconf.h (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngerror.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngget.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngmem.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngpread.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngread.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngrio.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngrtran.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngrutil.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngset.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngtrans.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngwio.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngwrite.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngwtran.c (100%) rename {src/gui/graphics/imaging/image_file_formats => modules/juce_graphics/image_formats}/pnglib/pngwutil.c (100%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_Image.cpp (94%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_Image.h (97%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageCache.cpp (89%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageCache.h (96%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageConvolutionKernel.cpp (95%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageConvolutionKernel.h (100%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageFileFormat.cpp (86%) rename {src/gui/graphics/imaging => modules/juce_graphics/images}/juce_ImageFileFormat.h (94%) create mode 100644 modules/juce_graphics/juce_graphics.cpp create mode 100644 modules/juce_graphics/juce_graphics.h create mode 100644 modules/juce_graphics/juce_module_info rename {src/native/android => modules/juce_graphics/native}/juce_android_Fonts.cpp (84%) rename {src/native/android => modules/juce_graphics/native}/juce_android_GraphicsContext.cpp (93%) rename {src/native/linux => modules/juce_graphics/native}/juce_linux_Fonts.cpp (92%) create mode 100644 modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h create mode 100644 modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm create mode 100644 modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h rename {src/native/mac => modules/juce_graphics/native}/juce_mac_Fonts.mm (93%) rename {src/native/windows => modules/juce_graphics/native}/juce_win32_Direct2DGraphicsContext.cpp (96%) rename {src/native/windows => modules/juce_graphics/native}/juce_win32_Fonts.cpp (80%) rename {src/gui/graphics/contexts => modules/juce_graphics/placement}/juce_Justification.cpp (92%) rename {src/gui/graphics/contexts => modules/juce_graphics/placement}/juce_Justification.h (100%) rename {src/gui/graphics/contexts => modules/juce_graphics/placement}/juce_RectanglePlacement.cpp (95%) rename {src/gui/graphics/contexts => modules/juce_graphics/placement}/juce_RectanglePlacement.h (100%) rename {src => modules/juce_gui_basics}/application/juce_Application.cpp (83%) rename {src => modules/juce_gui_basics}/application/juce_Application.h (81%) rename {src/core => modules/juce_gui_basics/application}/juce_Initialisation.h (89%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ArrowButton.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ArrowButton.h (94%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_Button.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_Button.h (96%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_DrawableButton.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_DrawableButton.h (97%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_HyperlinkButton.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_HyperlinkButton.h (96%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ImageButton.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ImageButton.h (100%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ShapeButton.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ShapeButton.h (95%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_TextButton.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_TextButton.h (100%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ToggleButton.cpp (90%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ToggleButton.h (100%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ToolbarButton.cpp (90%) rename {src/gui/components => modules/juce_gui_basics}/buttons/juce_ToolbarButton.h (96%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandID.h (100%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandInfo.cpp (93%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandInfo.h (95%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandManager.cpp (93%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandManager.h (97%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandTarget.cpp (95%) rename {src/application => modules/juce_gui_basics/commands}/juce_ApplicationCommandTarget.h (96%) rename {src/gui/components/keyboard => modules/juce_gui_basics/commands}/juce_KeyPressMappingSet.cpp (88%) rename {src/gui/components/keyboard => modules/juce_gui_basics/commands}/juce_KeyPressMappingSet.h (94%) rename {src/gui => modules/juce_gui_basics}/components/juce_Component.cpp (95%) rename {src/gui => modules/juce_gui_basics}/components/juce_Component.h (97%) rename {src/gui => modules/juce_gui_basics}/components/juce_ComponentListener.cpp (89%) rename {src/gui => modules/juce_gui_basics}/components/juce_ComponentListener.h (100%) rename {src/gui => modules/juce_gui_basics}/components/juce_Desktop.cpp (94%) rename {src/gui => modules/juce_gui_basics}/components/juce_Desktop.h (96%) rename {src/gui => modules/juce_gui_basics}/components/juce_ModalComponentManager.cpp (92%) rename {src/gui => modules/juce_gui_basics}/components/juce_ModalComponentManager.h (96%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_Drawable.cpp (90%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_Drawable.h (94%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableComposite.cpp (96%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableComposite.h (94%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableImage.cpp (94%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableImage.h (95%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawablePath.cpp (96%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawablePath.h (96%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableRectangle.cpp (94%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableRectangle.h (95%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableShape.cpp (96%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableShape.h (95%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableText.cpp (95%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_DrawableText.h (95%) rename {src/gui/graphics => modules/juce_gui_basics}/drawables/juce_SVGParser.cpp (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_DirectoryContentsDisplayComponent.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_DirectoryContentsDisplayComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_DirectoryContentsList.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_DirectoryContentsList.h (94%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileBrowserComponent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileBrowserComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileBrowserListener.h (100%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileChooser.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileChooser.h (100%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileChooserDialogBox.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileChooserDialogBox.h (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileFilter.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileFilter.h (95%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileListComponent.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileListComponent.h (95%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FilePreviewComponent.h (94%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileSearchPathListComponent.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileSearchPathListComponent.h (95%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileTreeComponent.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FileTreeComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FilenameComponent.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_FilenameComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_ImagePreviewComponent.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_ImagePreviewComponent.h (95%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_WildcardFileFilter.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/filebrowser/juce_WildcardFileFilter.h (100%) create mode 100644 modules/juce_gui_basics/juce_gui_basics.cpp create mode 100644 modules/juce_gui_basics/juce_gui_basics.h create mode 100644 modules/juce_gui_basics/juce_module_info rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_CaretComponent.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_CaretComponent.h (95%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyListener.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyListener.h (100%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyPress.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyPress.h (97%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyboardFocusTraverser.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_KeyboardFocusTraverser.h (100%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_ModifierKeys.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_ModifierKeys.h (100%) rename {src/utilities => modules/juce_gui_basics/keyboard}/juce_SystemClipboard.h (95%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_TextEditorKeyMapper.h (100%) rename {src/gui/components => modules/juce_gui_basics}/keyboard/juce_TextInputTarget.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentAnimator.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentAnimator.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentBoundsConstrainer.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentBoundsConstrainer.h (97%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentBuilder.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentBuilder.h (97%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentMovementWatcher.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ComponentMovementWatcher.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_GroupComponent.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_GroupComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_MultiDocumentPanel.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_MultiDocumentPanel.h (100%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableBorderComponent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableBorderComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableCornerComponent.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableCornerComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableEdgeComponent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ResizableEdgeComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ScrollBar.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_ScrollBar.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableLayoutManager.cpp (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableLayoutManager.h (97%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableLayoutResizerBar.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableLayoutResizerBar.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableObjectResizer.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_StretchableObjectResizer.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_TabbedButtonBar.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_TabbedButtonBar.h (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_TabbedComponent.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_TabbedComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_Viewport.cpp (96%) rename {src/gui/components => modules/juce_gui_basics}/layout/juce_Viewport.h (100%) rename {src/gui/components => modules/juce_gui_basics}/lookandfeel/juce_LookAndFeel.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/lookandfeel/juce_LookAndFeel.h (97%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_MenuBarComponent.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_MenuBarComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_MenuBarModel.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_MenuBarModel.h (100%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_PopupMenu.cpp (96%) rename {src/gui/components => modules/juce_gui_basics}/menus/juce_PopupMenu.h (97%) rename {src/gui/components/special => modules/juce_gui_basics/misc}/juce_BubbleComponent.cpp (94%) rename {src/gui/components/special => modules/juce_gui_basics/misc}/juce_BubbleComponent.h (96%) rename {src/gui/components/special => modules/juce_gui_basics/misc}/juce_DropShadower.cpp (94%) rename {src/gui/components/special => modules/juce_gui_basics/misc}/juce_DropShadower.h (96%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_ComponentDragger.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_ComponentDragger.h (100%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_DragAndDropContainer.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_DragAndDropContainer.h (100%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_DragAndDropTarget.h (97%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_FileDragAndDropTarget.h (96%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_LassoComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseCursor.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseCursor.h (97%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseEvent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseEvent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseInputSource.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseInputSource.h (95%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseListener.cpp (70%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_MouseListener.h (100%) rename {src/utilities => modules/juce_gui_basics/mouse}/juce_SelectedItemSet.h (96%) rename {src/gui/components => modules/juce_gui_basics}/mouse/juce_TooltipClient.h (100%) rename {src/native/android => modules/juce_gui_basics/native}/juce_android_FileChooser.cpp (87%) rename {src/native/android => modules/juce_gui_basics/native}/juce_android_Windowing.cpp (92%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_ios_UIViewComponentPeer.mm (96%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_ios_Windowing.mm (87%) rename {src/native/linux => modules/juce_gui_basics/native}/juce_linux_Clipboard.cpp (95%) rename {src/native/linux => modules/juce_gui_basics/native}/juce_linux_FileChooser.cpp (90%) rename {src/native/linux => modules/juce_gui_basics/native}/juce_linux_Windowing.cpp (94%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_mac_FileChooser.mm (95%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_mac_MainMenu.mm (96%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_mac_MouseCursor.mm (84%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_mac_NSViewComponentPeer.mm (96%) rename {src/native/mac => modules/juce_gui_basics/native}/juce_mac_Windowing.mm (93%) create mode 100644 modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp rename {src/native/windows => modules/juce_gui_basics/native}/juce_win32_FileChooser.cpp (92%) rename {src/native/windows => modules/juce_gui_basics/native}/juce_win32_Windowing.cpp (78%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_MarkerList.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_MarkerList.h (96%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeCoordinate.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeCoordinate.h (95%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeCoordinatePositioner.cpp (96%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeCoordinatePositioner.h (96%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeParallelogram.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeParallelogram.h (100%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativePoint.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativePoint.h (100%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativePointPath.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativePointPath.h (95%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeRectangle.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/positioning/juce_RelativeRectangle.h (100%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_BooleanPropertyComponent.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_BooleanPropertyComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_ButtonPropertyComponent.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_ButtonPropertyComponent.h (100%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_ChoicePropertyComponent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_ChoicePropertyComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_PropertyComponent.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_PropertyComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_PropertyPanel.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_PropertyPanel.h (96%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_SliderPropertyComponent.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_SliderPropertyComponent.h (96%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_TextPropertyComponent.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/properties/juce_TextPropertyComponent.h (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ComboBox.cpp (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ComboBox.h (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ImageComponent.cpp (93%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ImageComponent.h (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Label.cpp (94%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Label.h (100%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ListBox.cpp (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ListBox.h (97%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ProgressBar.cpp (93%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ProgressBar.h (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Slider.cpp (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Slider.h (97%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TableHeaderComponent.cpp (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TableHeaderComponent.h (97%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TableListBox.cpp (94%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TableListBox.h (100%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TextEditor.cpp (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TextEditor.h (96%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Toolbar.cpp (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_Toolbar.h (100%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ToolbarItemComponent.cpp (93%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ToolbarItemComponent.h (97%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ToolbarItemFactory.h (100%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ToolbarItemPalette.cpp (93%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_ToolbarItemPalette.h (100%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TreeView.cpp (95%) rename {src/gui/components/controls => modules/juce_gui_basics/widgets}/juce_TreeView.h (97%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_AlertWindow.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_AlertWindow.h (97%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_CallOutBox.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_CallOutBox.h (96%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ComponentPeer.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ComponentPeer.h (96%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_DialogWindow.cpp (94%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_DialogWindow.h (100%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_DocumentWindow.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_DocumentWindow.h (100%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_NativeMessageBox.h (100%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ResizableWindow.cpp (95%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ResizableWindow.h (100%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ThreadWithProgressWindow.cpp (92%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_ThreadWithProgressWindow.h (95%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_TooltipWindow.cpp (91%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_TooltipWindow.h (96%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_TopLevelWindow.cpp (93%) rename {src/gui/components => modules/juce_gui_basics}/windows/juce_TopLevelWindow.h (96%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CPlusPlusCodeTokeniser.cpp (94%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CPlusPlusCodeTokeniser.h (100%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CodeDocument.cpp (95%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CodeDocument.h (95%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CodeEditorComponent.cpp (95%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CodeEditorComponent.h (96%) rename {src/gui/components => modules/juce_gui_extra}/code_editor/juce_CodeTokeniser.h (100%) rename {src/utilities => modules/juce_gui_extra/documents}/juce_FileBasedDocument.cpp (94%) rename {src/utilities => modules/juce_gui_extra/documents}/juce_FileBasedDocument.h (97%) rename {src/gui/components/special => modules/juce_gui_extra/embedding}/juce_ActiveXControlComponent.h (96%) rename {src/gui/components/special => modules/juce_gui_extra/embedding}/juce_NSViewComponent.h (86%) create mode 100644 modules/juce_gui_extra/embedding/juce_UIViewComponent.h create mode 100644 modules/juce_gui_extra/juce_gui_extra.cpp create mode 100644 modules/juce_gui_extra/juce_gui_extra.h create mode 100644 modules/juce_gui_extra/juce_module_info rename {src/gui/components => modules/juce_gui_extra}/lookandfeel/juce_OldSchoolLookAndFeel.cpp (94%) rename {src/gui/components => modules/juce_gui_extra}/lookandfeel/juce_OldSchoolLookAndFeel.h (97%) rename {src/events => modules/juce_gui_extra/misc}/juce_AppleRemote.h (100%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_BubbleMessageComponent.cpp (93%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_BubbleMessageComponent.h (95%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_ColourSelector.cpp (95%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_ColourSelector.h (96%) rename {src/gui/components/keyboard => modules/juce_gui_extra/misc}/juce_KeyMappingEditorComponent.cpp (94%) rename {src/gui/components/keyboard => modules/juce_gui_extra/misc}/juce_KeyMappingEditorComponent.h (95%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_PreferencesPanel.cpp (92%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_PreferencesPanel.h (95%) rename {src/utilities => modules/juce_gui_extra/misc}/juce_RecentlyOpenedFilesList.cpp (94%) rename {src/utilities => modules/juce_gui_extra/misc}/juce_RecentlyOpenedFilesList.h (95%) rename {src/gui/components/windows => modules/juce_gui_extra/misc}/juce_SplashScreen.cpp (90%) rename {src/gui/components/windows => modules/juce_gui_extra/misc}/juce_SplashScreen.h (95%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_SystemTrayIconComponent.cpp (90%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_SystemTrayIconComponent.h (92%) rename {src/gui/components/special => modules/juce_gui_extra/misc}/juce_WebBrowserComponent.h (96%) rename {src/native/android => modules/juce_gui_extra/native}/juce_android_WebBrowserComponent.cpp (88%) create mode 100644 modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm create mode 100644 modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm create mode 100644 modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp rename {src/native/linux => modules/juce_gui_extra/native}/juce_linux_WebBrowserComponent.cpp (91%) rename {src/native/mac => modules/juce_gui_extra/native}/juce_mac_AppleRemote.mm (94%) rename {src/native/mac => modules/juce_gui_extra/native}/juce_mac_CarbonViewWrapperComponent.h (100%) rename {src/native/mac => modules/juce_gui_extra/native}/juce_mac_NSViewComponent.mm (71%) rename {src/native/mac => modules/juce_gui_extra/native}/juce_mac_WebBrowserComponent.mm (82%) rename {src/native/windows => modules/juce_gui_extra/native}/juce_win32_ActiveXComponent.cpp (91%) create mode 100644 modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp rename {src/native/windows => modules/juce_gui_extra/native}/juce_win32_WebBrowserComponent.cpp (95%) create mode 100644 modules/juce_opengl/juce_module_info create mode 100644 modules/juce_opengl/juce_opengl.cpp rename src/native/android/juce_android_NativeIncludes.h => modules/juce_opengl/juce_opengl.h (64%) rename {src/native/android => modules/juce_opengl/native}/juce_android_OpenGLComponent.cpp (84%) create mode 100644 modules/juce_opengl/native/juce_ios_OpenGLComponent.mm rename {src/native/linux => modules/juce_opengl/native}/juce_linux_OpenGLComponent.cpp (93%) rename {src/native/mac => modules/juce_opengl/native}/juce_mac_OpenGLComponent.mm (57%) rename {src/native/windows => modules/juce_opengl/native}/juce_win32_OpenGLComponent.cpp (94%) rename {src/gui/components/special => modules/juce_opengl/opengl}/juce_OpenGLComponent.cpp (93%) rename {src/gui/components/special => modules/juce_opengl/opengl}/juce_OpenGLComponent.h (61%) create mode 100644 modules/juce_opengl/opengl/juce_OpenGLContext.h create mode 100644 modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h rename {src/gui/graphics/imaging => modules/juce_video/capture}/juce_CameraDevice.h (100%) create mode 100644 modules/juce_video/juce_module_info create mode 100644 modules/juce_video/juce_video.cpp create mode 100644 modules/juce_video/juce_video.h rename {src/native/android => modules/juce_video/native}/juce_android_CameraDevice.cpp (87%) rename {src/native/mac => modules/juce_video/native}/juce_mac_CameraDevice.mm (95%) rename {src/native/mac => modules/juce_video/native}/juce_mac_QuickTimeMovieComponent.mm (95%) rename {src/native/windows => modules/juce_video/native}/juce_win32_CameraDevice.cpp (96%) rename {src/native/windows => modules/juce_video/native}/juce_win32_DirectShowComponent.cpp (96%) rename {src/native/windows => modules/juce_video/native}/juce_win32_QuickTimeMovieComponent.cpp (94%) rename {src/gui/components/special => modules/juce_video/playback}/juce_DirectShowComponent.h (96%) rename {src/gui/components/special => modules/juce_video/playback}/juce_QuickTimeMovieComponent.h (94%) delete mode 100644 src/juce_DefineMacros.h delete mode 100644 src/juce_WithoutMacros.h delete mode 100644 src/juce_app_includes.h delete mode 100644 src/native/android/juce_android_Misc.cpp delete mode 100644 src/native/android/juce_android_NativeCode.cpp delete mode 100644 src/native/common/juce_posix_NamedPipe.cpp delete mode 100644 src/native/linux/juce_linux_NativeCode.cpp delete mode 100644 src/native/linux/juce_linux_NativeIncludes.h delete mode 100644 src/native/mac/juce_mac_CoreGraphicsContext.mm delete mode 100644 src/native/mac/juce_mac_NativeCode.mm delete mode 100644 src/native/mac/juce_mac_NativeIncludes.h delete mode 100644 src/native/windows/juce_win32_AutoLinkLibraries.h delete mode 100644 src/native/windows/juce_win32_NativeCode.cpp delete mode 100644 src/native/windows/juce_win32_NativeIncludes.h diff --git a/.gitignore b/.gitignore index aa848ec71d..d2df5aeade 100644 --- a/.gitignore +++ b/.gitignore @@ -18,41 +18,51 @@ .DS_Store .svn profile -extras/juce demo/Builds/MacOSX/build -extras/juce demo/Builds/Linux/build -extras/juce demo/Builds/VisualStudio2005/Debug -extras/juce demo/Builds/VisualStudio2005/Release -extras/juce demo/Builds/VisualStudio2008/Debug -extras/juce demo/Builds/VisualStudio2008/Release -extras/juce demo/Builds/iPhone/build -extras/audio plugins/demo/Builds/MacOSX/build -extras/audio plugins/demo/Builds/Linux/build -extras/audio plugins/demo/Builds/VisualStudio2005/Debug -extras/audio plugins/demo/Builds/VisualStudio2005/Release -extras/audio plugins/demo/Builds/VisualStudio2008/Debug -extras/audio plugins/demo/Builds/VisualStudio2008/Release +extras/JuceDemo/Builds/MacOSX/build +extras/JuceDemo/Builds/Linux/build +extras/JuceDemo/Builds/VisualStudio2005/Debug +extras/JuceDemo/Builds/VisualStudio2005/Release +extras/JuceDemo/Builds/VisualStudio2008/Debug +extras/JuceDemo/Builds/VisualStudio2008/Release +extras/JuceDemo/Builds/VisualStudio2010/Debug +extras/JuceDemo/Builds/VisualStudio2010/Release +extras/JuceDemo/Builds/Android/bin +extras/JuceDemo/Builds/Android/src/com +extras/JuceDemo/Builds/iPhone/build +extras/audio plugin demo/Builds/MacOSX/build +extras/audio plugin demo/Builds/Linux/build +extras/audio plugin demo/Builds/VisualStudio2005/Debug +extras/audio plugin demo/Builds/VisualStudio2005/Release +extras/audio plugin demo/Builds/VisualStudio2008/Debug +extras/audio plugin demo/Builds/VisualStudio2008/Release extras/audio plugin host/Builds/MacOSX/build extras/audio plugin host/Builds/Linux/build extras/audio plugin host/Builds/VisualStudio2005/Debug extras/audio plugin host/Builds/VisualStudio2005/Release extras/audio plugin host/Builds/VisualStudio2008/Debug extras/audio plugin host/Builds/VisualStudio2008/Release -extras/Jucer (experimental)/Builds/MacOSX/build -extras/Jucer (experimental)/Builds/Linux/build -extras/Jucer (experimental)/Builds/VisualStudio2005/Debug -extras/Jucer (experimental)/Builds/VisualStudio2005/Release -extras/Jucer (experimental)/Builds/VisualStudio2008/Debug -extras/Jucer (experimental)/Builds/VisualStudio2008/Release -extras/Jucer (experimental)/Builds/iPhone/build +extras/Introjucer/Builds/MacOSX/build +extras/Introjucer/Builds/Linux/build +extras/Introjucer/Builds/VisualStudio2005/Debug +extras/Introjucer/Builds/VisualStudio2005/Release +extras/Introjucer/Builds/VisualStudio2008/Debug +extras/Introjucer/Builds/VisualStudio2008/Release +extras/Introjucer/Builds/VisualStudio2010/Debug +extras/Introjucer/Builds/VisualStudio2010/Release extras/the jucer/build/mac/build extras/audio plugin host/build/mac/build -extras/binarybuilder/mac/build -extras/prebuilt/Jucer.app -extras/prebuilt/jucedemo.app -extras/prebuilt/PluginHost.app -bin/intermediate* -bin/lib* -bin/jucelib* -bin/JUCE* -Builds/VisualStudio2008_DLL/Debug -Builds/VisualStudio2008_DLL/Release +extras/binarybuilder/Builds/MacOSX/build +extras/binarybuilder/Builds/Linux/build +extras/binarybuilder/Builds/VisualStudio2005/Debug +extras/binarybuilder/Builds/VisualStudio2005/Release +extras/binarybuilder/Builds/VisualStudio2008/Debug +extras/binarybuilder/Builds/VisualStudio2008/Release +extras/binarybuilder/Builds/VisualStudio2010/Debug +extras/binarybuilder/Builds/VisualStudio2010/Release +extras/static library/Builds/MacOSX/build +extras/static library/Builds/VisualStudio2008/Debug +extras/static library/Builds/VisualStudio2008/Release +extras/static library/Builds/VisualStudio2010/Debug +extras/static library/Builds/VisualStudio2010/Release +extras/windows dll/Builds/VisualStudio2008/Debug +extras/windows dll/Builds/VisualStudio2008/Release diff --git a/Builds/Linux/Makefile b/Builds/Linux/Makefile deleted file mode 100644 index 44d6a96386..0000000000 --- a/Builds/Linux/Makefile +++ /dev/null @@ -1,2056 +0,0 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! - -ifndef CONFIG - CONFIG=Debug -endif - -# (this disables dependency generation if multiple architectures are set) -DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) - -ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := ../../bin - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../.././bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - TARGET := libjucedebug.a - BLDCMD = ar -rcs $(OUTDIR)/$(TARGET) $(OBJECTS) $(TARGET_ARCH) -endif - -ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := ../../bin - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../.././bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - TARGET := libjuce.a - BLDCMD = ar -rcs $(OUTDIR)/$(TARGET) $(OBJECTS) $(TARGET_ARCH) -endif - -OBJECTS := \ - $(OBJDIR)/juce_Application_2817465d.o \ - $(OBJDIR)/juce_ApplicationCommandInfo_80671406.o \ - $(OBJDIR)/juce_ApplicationCommandManager_5aac95f.o \ - $(OBJDIR)/juce_ApplicationCommandTarget_90a89aa9.o \ - $(OBJDIR)/juce_ApplicationProperties_a76b5c30.o \ - $(OBJDIR)/juce_AiffAudioFormat_ffbda971.o \ - $(OBJDIR)/juce_AudioCDReader_c730f7a6.o \ - $(OBJDIR)/juce_AudioFormat_6605d0f9.o \ - $(OBJDIR)/juce_AudioFormatManager_949148fe.o \ - $(OBJDIR)/juce_AudioFormatReader_36f0295c.o \ - $(OBJDIR)/juce_AudioFormatWriter_11461d0c.o \ - $(OBJDIR)/juce_AudioSubsectionReader_65f61a0a.o \ - $(OBJDIR)/juce_AudioThumbnail_cb99b4b4.o \ - $(OBJDIR)/juce_AudioThumbnailCache_89a7c678.o \ - $(OBJDIR)/juce_CoreAudioFormat_1ce243da.o \ - $(OBJDIR)/juce_FlacAudioFormat_19c048f1.o \ - $(OBJDIR)/juce_OggVorbisAudioFormat_3f214fc9.o \ - $(OBJDIR)/juce_QuickTimeAudioFormat_8ad67271.o \ - $(OBJDIR)/juce_WavAudioFormat_4ff23a5f.o \ - $(OBJDIR)/juce_AudioFormatReaderSource_13d4af92.o \ - $(OBJDIR)/juce_AudioSourcePlayer_42464899.o \ - $(OBJDIR)/juce_AudioTransportSource_f3e60751.o \ - $(OBJDIR)/juce_BufferingAudioSource_58721b72.o \ - $(OBJDIR)/juce_ChannelRemappingAudioSource_e17f93c0.o \ - $(OBJDIR)/juce_IIRFilterAudioSource_807ee8aa.o \ - $(OBJDIR)/juce_MixerAudioSource_bc6f772b.o \ - $(OBJDIR)/juce_ResamplingAudioSource_8511875e.o \ - $(OBJDIR)/juce_ReverbAudioSource_3ae42aa6.o \ - $(OBJDIR)/juce_ToneGeneratorAudioSource_77f504b3.o \ - $(OBJDIR)/juce_AudioDeviceManager_c24db832.o \ - $(OBJDIR)/juce_AudioIODevice_f7da876b.o \ - $(OBJDIR)/juce_AudioIODeviceType_e5d402c5.o \ - $(OBJDIR)/juce_AudioDataConverters_dc0ece28.o \ - $(OBJDIR)/juce_AudioSampleBuffer_af6ff195.o \ - $(OBJDIR)/juce_IIRFilter_9a31e47f.o \ - $(OBJDIR)/juce_MidiBuffer_fa4db7fe.o \ - $(OBJDIR)/juce_MidiFile_3bdbc97a.o \ - $(OBJDIR)/juce_MidiKeyboardState_28313976.o \ - $(OBJDIR)/juce_MidiMessage_5b1f5753.o \ - $(OBJDIR)/juce_MidiMessageCollector_108abdc4.o \ - $(OBJDIR)/juce_MidiMessageSequence_a577dcb4.o \ - $(OBJDIR)/juce_MidiOutput_3cc0f43f.o \ - $(OBJDIR)/juce_VSTPluginFormat_af341d6.o \ - $(OBJDIR)/juce_AudioPluginFormat_5dc1eec2.o \ - $(OBJDIR)/juce_AudioPluginFormatManager_c336c715.o \ - $(OBJDIR)/juce_KnownPluginList_cadece16.o \ - $(OBJDIR)/juce_PluginDescription_d9c0f10b.o \ - $(OBJDIR)/juce_PluginDirectoryScanner_c7652cec.o \ - $(OBJDIR)/juce_PluginListComponent_f08a630e.o \ - $(OBJDIR)/juce_AudioProcessor_babd0919.o \ - $(OBJDIR)/juce_AudioProcessorEditor_82a32d26.o \ - $(OBJDIR)/juce_AudioProcessorGraph_76dcb4ff.o \ - $(OBJDIR)/juce_AudioProcessorPlayer_5c53cc9a.o \ - $(OBJDIR)/juce_GenericAudioProcessorEditor_2e8ec30d.o \ - $(OBJDIR)/juce_Sampler_98f716a4.o \ - $(OBJDIR)/juce_Synthesiser_2bffa1dd.o \ - $(OBJDIR)/juce_AbstractFifo_dfc0bd23.o \ - $(OBJDIR)/juce_DynamicObject_69d02ab3.o \ - $(OBJDIR)/juce_NamedValueSet_6b0793df.o \ - $(OBJDIR)/juce_PropertySet_914b5922.o \ - $(OBJDIR)/juce_Value_16231646.o \ - $(OBJDIR)/juce_ValueTree_f822be84.o \ - $(OBJDIR)/juce_Variant_4f31c35a.o \ - $(OBJDIR)/juce_FileLogger_7858478e.o \ - $(OBJDIR)/juce_Logger_4f4f7f72.o \ - $(OBJDIR)/juce_PerformanceCounter_6422080e.o \ - $(OBJDIR)/juce_RelativeTime_bc5ef35b.o \ - $(OBJDIR)/juce_Result_d8f437f.o \ - $(OBJDIR)/juce_SystemStats_c00d8758.o \ - $(OBJDIR)/juce_Time_16acdd6f.o \ - $(OBJDIR)/juce_Uuid_f277575d.o \ - $(OBJDIR)/juce_BlowFish_5d22a7d9.o \ - $(OBJDIR)/juce_MD5_56896819.o \ - $(OBJDIR)/juce_Primes_32e6603.o \ - $(OBJDIR)/juce_RSAKey_b60982ae.o \ - $(OBJDIR)/juce_SHA256_cb4da0d6.o \ - $(OBJDIR)/juce_ActionBroadcaster_7f997786.o \ - $(OBJDIR)/juce_AsyncUpdater_a7e1cb89.o \ - $(OBJDIR)/juce_ChangeBroadcaster_3eb8fecc.o \ - $(OBJDIR)/juce_InterprocessConnection_13086b6d.o \ - $(OBJDIR)/juce_InterprocessConnectionServer_a4d7b350.o \ - $(OBJDIR)/juce_Message_ac79f635.o \ - $(OBJDIR)/juce_MessageListener_93e51509.o \ - $(OBJDIR)/juce_MessageManager_c7e00842.o \ - $(OBJDIR)/juce_MultiTimer_d4d9eca8.o \ - $(OBJDIR)/juce_Timer_77c098b3.o \ - $(OBJDIR)/juce_Component_49f01dfa.o \ - $(OBJDIR)/juce_ComponentListener_e0eda7ce.o \ - $(OBJDIR)/juce_Desktop_e3b47b99.o \ - $(OBJDIR)/juce_ModalComponentManager_b87bddba.o \ - $(OBJDIR)/juce_ArrowButton_ebac7066.o \ - $(OBJDIR)/juce_Button_886d3491.o \ - $(OBJDIR)/juce_DrawableButton_e03899cf.o \ - $(OBJDIR)/juce_HyperlinkButton_af0a8983.o \ - $(OBJDIR)/juce_ImageButton_c4dda738.o \ - $(OBJDIR)/juce_ShapeButton_2359adfe.o \ - $(OBJDIR)/juce_TextButton_8cf49c9e.o \ - $(OBJDIR)/juce_ToggleButton_f69cb85.o \ - $(OBJDIR)/juce_ToolbarButton_884113d8.o \ - $(OBJDIR)/juce_CodeDocument_fdd87805.o \ - $(OBJDIR)/juce_CodeEditorComponent_6fe4a170.o \ - $(OBJDIR)/juce_CPlusPlusCodeTokeniser_6b8548a9.o \ - $(OBJDIR)/juce_ComboBox_bcb5e365.o \ - $(OBJDIR)/juce_ImageComponent_1f90572a.o \ - $(OBJDIR)/juce_Label_7af0aab6.o \ - $(OBJDIR)/juce_ListBox_d4a8704f.o \ - $(OBJDIR)/juce_ProgressBar_38bc3ba8.o \ - $(OBJDIR)/juce_Slider_8a0d91a9.o \ - $(OBJDIR)/juce_TableHeaderComponent_2228124a.o \ - $(OBJDIR)/juce_TableListBox_588d027.o \ - $(OBJDIR)/juce_TextEditor_abe7dfc2.o \ - $(OBJDIR)/juce_Toolbar_29fa8c7d.o \ - $(OBJDIR)/juce_ToolbarItemComponent_7fab8ff7.o \ - $(OBJDIR)/juce_ToolbarItemPalette_250807b5.o \ - $(OBJDIR)/juce_TreeView_f1a8d26b.o \ - $(OBJDIR)/juce_DirectoryContentsDisplayComponent_97e43c62.o \ - $(OBJDIR)/juce_DirectoryContentsList_31e06025.o \ - $(OBJDIR)/juce_FileBrowserComponent_1332771b.o \ - $(OBJDIR)/juce_FileChooser_c439271f.o \ - $(OBJDIR)/juce_FileChooserDialogBox_50a36f4e.o \ - $(OBJDIR)/juce_FileFilter_de71639e.o \ - $(OBJDIR)/juce_FileListComponent_3f41b6a3.o \ - $(OBJDIR)/juce_FilenameComponent_921ef5f6.o \ - $(OBJDIR)/juce_FileSearchPathListComponent_85ed8576.o \ - $(OBJDIR)/juce_FileTreeComponent_8cb2d3a3.o \ - $(OBJDIR)/juce_ImagePreviewComponent_a108ea50.o \ - $(OBJDIR)/juce_WildcardFileFilter_9337b18.o \ - $(OBJDIR)/juce_CaretComponent_26bf4433.o \ - $(OBJDIR)/juce_KeyboardFocusTraverser_6325fc08.o \ - $(OBJDIR)/juce_KeyListener_631ada24.o \ - $(OBJDIR)/juce_KeyMappingEditorComponent_a0183a92.o \ - $(OBJDIR)/juce_KeyPress_47fcc29d.o \ - $(OBJDIR)/juce_KeyPressMappingSet_26212371.o \ - $(OBJDIR)/juce_ModifierKeys_eea16d64.o \ - $(OBJDIR)/juce_ComponentAnimator_ad5663d2.o \ - $(OBJDIR)/juce_ComponentBoundsConstrainer_a33c10ae.o \ - $(OBJDIR)/juce_ComponentBuilder_2aa6c5a.o \ - $(OBJDIR)/juce_ComponentMovementWatcher_cbb3e7cc.o \ - $(OBJDIR)/juce_GroupComponent_456e237a.o \ - $(OBJDIR)/juce_MultiDocumentPanel_50e05aac.o \ - $(OBJDIR)/juce_ResizableBorderComponent_7f4f2182.o \ - $(OBJDIR)/juce_ResizableCornerComponent_1cac2df9.o \ - $(OBJDIR)/juce_ResizableEdgeComponent_b9c9291.o \ - $(OBJDIR)/juce_ScrollBar_89666ad4.o \ - $(OBJDIR)/juce_StretchableLayoutManager_6bf5d800.o \ - $(OBJDIR)/juce_StretchableLayoutResizerBar_a720084c.o \ - $(OBJDIR)/juce_StretchableObjectResizer_2edcfadc.o \ - $(OBJDIR)/juce_TabbedButtonBar_a760aaa3.o \ - $(OBJDIR)/juce_TabbedComponent_d618721f.o \ - $(OBJDIR)/juce_Viewport_6c983422.o \ - $(OBJDIR)/juce_LookAndFeel_d4e838ec.o \ - $(OBJDIR)/juce_OldSchoolLookAndFeel_5ece559f.o \ - $(OBJDIR)/juce_MenuBarComponent_c68c8dbb.o \ - $(OBJDIR)/juce_MenuBarModel_ede42267.o \ - $(OBJDIR)/juce_PopupMenu_ec4cf9a3.o \ - $(OBJDIR)/juce_ComponentDragger_fb3bdbe6.o \ - $(OBJDIR)/juce_DragAndDropContainer_553e412.o \ - $(OBJDIR)/juce_MouseCursor_afb68802.o \ - $(OBJDIR)/juce_MouseEvent_f6ca6078.o \ - $(OBJDIR)/juce_MouseInputSource_8904aa23.o \ - $(OBJDIR)/juce_MouseListener_eb73f8a0.o \ - $(OBJDIR)/juce_MarkerList_2fbb4ef.o \ - $(OBJDIR)/juce_RelativeCoordinate_ab2eee5b.o \ - $(OBJDIR)/juce_RelativeCoordinatePositioner_c1352791.o \ - $(OBJDIR)/juce_RelativeParallelogram_5d17dbe6.o \ - $(OBJDIR)/juce_RelativePoint_9d2cc957.o \ - $(OBJDIR)/juce_RelativePointPath_a4fed61c.o \ - $(OBJDIR)/juce_RelativeRectangle_cc5440b6.o \ - $(OBJDIR)/juce_BooleanPropertyComponent_92b54aa5.o \ - $(OBJDIR)/juce_ButtonPropertyComponent_3675d6bb.o \ - $(OBJDIR)/juce_ChoicePropertyComponent_b9b44bac.o \ - $(OBJDIR)/juce_PropertyComponent_df1eaecd.o \ - $(OBJDIR)/juce_PropertyPanel_c640c5d4.o \ - $(OBJDIR)/juce_SliderPropertyComponent_ba2eb86c.o \ - $(OBJDIR)/juce_TextPropertyComponent_977e6fa0.o \ - $(OBJDIR)/juce_AudioDeviceSelectorComponent_64b1a089.o \ - $(OBJDIR)/juce_BubbleComponent_5f51c164.o \ - $(OBJDIR)/juce_BubbleMessageComponent_22f737f9.o \ - $(OBJDIR)/juce_ColourSelector_ac8bb1e2.o \ - $(OBJDIR)/juce_DropShadower_5903f9f3.o \ - $(OBJDIR)/juce_MidiKeyboardComponent_896e2ac8.o \ - $(OBJDIR)/juce_OpenGLComponent_73944221.o \ - $(OBJDIR)/juce_PreferencesPanel_dbc7d503.o \ - $(OBJDIR)/juce_SystemTrayIconComponent_fa664512.o \ - $(OBJDIR)/juce_AlertWindow_94d8d1f5.o \ - $(OBJDIR)/juce_CallOutBox_61f42d7c.o \ - $(OBJDIR)/juce_ComponentPeer_1e4b4b08.o \ - $(OBJDIR)/juce_DialogWindow_535b27b9.o \ - $(OBJDIR)/juce_DocumentWindow_3cb9d4cc.o \ - $(OBJDIR)/juce_ResizableWindow_d2110a84.o \ - $(OBJDIR)/juce_SplashScreen_a0940094.o \ - $(OBJDIR)/juce_ThreadWithProgressWindow_d711ee6e.o \ - $(OBJDIR)/juce_TooltipWindow_45074edc.o \ - $(OBJDIR)/juce_TopLevelWindow_717cf1e0.o \ - $(OBJDIR)/juce_Colour_453f3d5.o \ - $(OBJDIR)/juce_ColourGradient_c63d0725.o \ - $(OBJDIR)/juce_Colours_89de9488.o \ - $(OBJDIR)/juce_EdgeTable_6a5fefda.o \ - $(OBJDIR)/juce_FillType_5805677e.o \ - $(OBJDIR)/juce_GraphicsContext_119e43ed.o \ - $(OBJDIR)/juce_Justification_dc284c3b.o \ - $(OBJDIR)/juce_LowLevelGraphicsPostScriptRenderer_2e8a92a.o \ - $(OBJDIR)/juce_LowLevelGraphicsSoftwareRenderer_97263906.o \ - $(OBJDIR)/juce_RectanglePlacement_5fc90ed7.o \ - $(OBJDIR)/juce_Drawable_8c1eccc6.o \ - $(OBJDIR)/juce_DrawableComposite_4cd2d2ab.o \ - $(OBJDIR)/juce_DrawableImage_53f04eff.o \ - $(OBJDIR)/juce_DrawablePath_fb538a0b.o \ - $(OBJDIR)/juce_DrawableRectangle_5f2f5993.o \ - $(OBJDIR)/juce_DrawableShape_26926245.o \ - $(OBJDIR)/juce_DrawableText_75eda713.o \ - $(OBJDIR)/juce_SVGParser_b79416c5.o \ - $(OBJDIR)/juce_DropShadowEffect_da52d75.o \ - $(OBJDIR)/juce_GlowEffect_c0959893.o \ - $(OBJDIR)/juce_CustomTypeface_b93a3eff.o \ - $(OBJDIR)/juce_Font_fa88db26.o \ - $(OBJDIR)/juce_GlyphArrangement_f0797295.o \ - $(OBJDIR)/juce_TextLayout_d18f700e.o \ - $(OBJDIR)/juce_Typeface_34b3026e.o \ - $(OBJDIR)/juce_AffineTransform_4a320188.o \ - $(OBJDIR)/juce_Path_dcdd4594.o \ - $(OBJDIR)/juce_PathIterator_4e116c22.o \ - $(OBJDIR)/juce_PathStrokeType_506dcb86.o \ - $(OBJDIR)/juce_RectangleList_b6ae7ee8.o \ - $(OBJDIR)/juce_GIFLoader_61887b90.o \ - $(OBJDIR)/juce_JPEGLoader_412d2ccc.o \ - $(OBJDIR)/juce_PNGLoader_7f80a3b5.o \ - $(OBJDIR)/juce_Image_790c9a1a.o \ - $(OBJDIR)/juce_ImageCache_e74a50d2.o \ - $(OBJDIR)/juce_ImageConvolutionKernel_4e9e7945.o \ - $(OBJDIR)/juce_ImageFileFormat_161e770d.o \ - $(OBJDIR)/juce_DirectoryIterator_24c60d54.o \ - $(OBJDIR)/juce_File_8244d8d.o \ - $(OBJDIR)/juce_FileInputStream_e14097a7.o \ - $(OBJDIR)/juce_FileOutputStream_d151050e.o \ - $(OBJDIR)/juce_FileSearchPath_30e3d71a.o \ - $(OBJDIR)/juce_NamedPipe_b3a205e0.o \ - $(OBJDIR)/juce_TemporaryFile_935f3fc6.o \ - $(OBJDIR)/juce_ZipFile_16fbb396.o \ - $(OBJDIR)/juce_MACAddress_b81987ed.o \ - $(OBJDIR)/juce_Socket_cf39c63b.o \ - $(OBJDIR)/juce_URL_d6b7cff1.o \ - $(OBJDIR)/juce_BufferedInputStream_c71b2b68.o \ - $(OBJDIR)/juce_FileInputSource_2a374046.o \ - $(OBJDIR)/juce_GZIPCompressorOutputStream_4409282d.o \ - $(OBJDIR)/juce_GZIPDecompressorInputStream_b026ffc7.o \ - $(OBJDIR)/juce_InputStream_5314e647.o \ - $(OBJDIR)/juce_MemoryInputStream_c5db0106.o \ - $(OBJDIR)/juce_MemoryOutputStream_8003c78f.o \ - $(OBJDIR)/juce_OutputStream_9a068a6e.o \ - $(OBJDIR)/juce_SubregionStream_9156f331.o \ - $(OBJDIR)/juce_BigInteger_b44f43d6.o \ - $(OBJDIR)/juce_Expression_6f910d50.o \ - $(OBJDIR)/juce_Random_a529cb7b.o \ - $(OBJDIR)/juce_MemoryBlock_52f17c52.o \ - $(OBJDIR)/juce_posix_NamedPipe_aa308c65.o \ - $(OBJDIR)/juce_linux_Audio_18d7e8b6.o \ - $(OBJDIR)/juce_linux_AudioCDReader_1263363a.o \ - $(OBJDIR)/juce_linux_Clipboard_44a6bcf6.o \ - $(OBJDIR)/juce_linux_FileChooser_3b3f403f.o \ - $(OBJDIR)/juce_linux_Files_c036ced7.o \ - $(OBJDIR)/juce_linux_Fonts_b2e303e4.o \ - $(OBJDIR)/juce_linux_JackAudio_15353e17.o \ - $(OBJDIR)/juce_linux_Messaging_daefaf64.o \ - $(OBJDIR)/juce_linux_Midi_4bad86cb.o \ - $(OBJDIR)/juce_linux_NativeCode_8a61cd0e.o \ - $(OBJDIR)/juce_linux_Network_f47a1c4e.o \ - $(OBJDIR)/juce_linux_OpenGLComponent_ba2f042e.o \ - $(OBJDIR)/juce_linux_SystemStats_9f6d6b50.o \ - $(OBJDIR)/juce_linux_Threads_dc4a4049.o \ - $(OBJDIR)/juce_linux_WebBrowserComponent_358c0a49.o \ - $(OBJDIR)/juce_linux_Windowing_abe04752.o \ - $(OBJDIR)/juce_ios_Audio_40e86914.o \ - $(OBJDIR)/juce_mac_CoreAudio_faf8c177.o \ - $(OBJDIR)/juce_mac_CoreMidi_e79e11ea.o \ - $(OBJDIR)/juce_win32_ActiveXComponent_7590131d.o \ - $(OBJDIR)/juce_win32_ASIO_60eb61ca.o \ - $(OBJDIR)/juce_win32_AudioCDReader_66c7252.o \ - $(OBJDIR)/juce_win32_CameraDevice_ea35306d.o \ - $(OBJDIR)/juce_win32_Direct2DGraphicsContext_9f1b6be1.o \ - $(OBJDIR)/juce_win32_DirectShowComponent_e4030c4f.o \ - $(OBJDIR)/juce_win32_DirectSound_3462415e.o \ - $(OBJDIR)/juce_win32_FileChooser_18a257.o \ - $(OBJDIR)/juce_win32_Files_f3e9a2ef.o \ - $(OBJDIR)/juce_win32_Fonts_e695d7fc.o \ - $(OBJDIR)/juce_win32_Messaging_926ab77c.o \ - $(OBJDIR)/juce_win32_Midi_fac3cfb3.o \ - $(OBJDIR)/juce_win32_NativeCode_c247c7f6.o \ - $(OBJDIR)/juce_win32_Network_6c84a66.o \ - $(OBJDIR)/juce_win32_OpenGLComponent_d0d99a46.o \ - $(OBJDIR)/juce_win32_QuickTimeMovieComponent_be08e5f.o \ - $(OBJDIR)/juce_win32_Registry_86da784f.o \ - $(OBJDIR)/juce_win32_SystemStats_6446cd68.o \ - $(OBJDIR)/juce_win32_Threads_ee986e61.o \ - $(OBJDIR)/juce_win32_WASAPI_c7c6c3c3.o \ - $(OBJDIR)/juce_win32_WebBrowserComponent_2a4dd461.o \ - $(OBJDIR)/juce_win32_Windowing_635b4f6a.o \ - $(OBJDIR)/juce_android_Audio_93f83bd6.o \ - $(OBJDIR)/juce_android_CameraDevice_d2743865.o \ - $(OBJDIR)/juce_android_FileChooser_205cbb5f.o \ - $(OBJDIR)/juce_android_Files_3b5721f7.o \ - $(OBJDIR)/juce_android_Fonts_2e035704.o \ - $(OBJDIR)/juce_android_GraphicsContext_d0fb27e4.o \ - $(OBJDIR)/juce_android_Messaging_59717284.o \ - $(OBJDIR)/juce_android_Midi_4fa64fab.o \ - $(OBJDIR)/juce_android_Misc_68ea73f6.o \ - $(OBJDIR)/juce_android_NativeCode_dc186dee.o \ - $(OBJDIR)/juce_android_Network_28d2276e.o \ - $(OBJDIR)/juce_android_OpenGLComponent_8fd9ef4e.o \ - $(OBJDIR)/juce_android_SystemStats_848ae670.o \ - $(OBJDIR)/juce_android_Threads_10a24b69.o \ - $(OBJDIR)/juce_android_WebBrowserComponent_178c6569.o \ - $(OBJDIR)/juce_android_Windowing_2a620a72.o \ - $(OBJDIR)/juce_CharacterFunctions_b1a5ac62.o \ - $(OBJDIR)/juce_Identifier_e99ee619.o \ - $(OBJDIR)/juce_JSON_bbf64af8.o \ - $(OBJDIR)/juce_LocalisedStrings_3ddfa55e.o \ - $(OBJDIR)/juce_String_80587b01.o \ - $(OBJDIR)/juce_StringArray_4aaa67a2.o \ - $(OBJDIR)/juce_StringPairArray_37130fe8.o \ - $(OBJDIR)/juce_StringPool_9e8d033d.o \ - $(OBJDIR)/juce_XmlDocument_6b9b0c2c.o \ - $(OBJDIR)/juce_XmlElement_51daa55.o \ - $(OBJDIR)/juce_ReadWriteLock_7acf3cc8.o \ - $(OBJDIR)/juce_Thread_69734d40.o \ - $(OBJDIR)/juce_ThreadPool_fd669dfc.o \ - $(OBJDIR)/juce_TimeSliceThread_e9db3803.o \ - $(OBJDIR)/juce_DeletedAtShutdown_b9105375.o \ - $(OBJDIR)/juce_FileBasedDocument_d507d0a5.o \ - $(OBJDIR)/juce_PropertiesFile_8faca026.o \ - $(OBJDIR)/juce_RecentlyOpenedFilesList_f791257.o \ - $(OBJDIR)/juce_UndoManager_33b197fc.o \ - $(OBJDIR)/juce_UnitTest_4a02c10d.o \ - -.PHONY: clean - -$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) - @echo Linking Juce - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) - @$(BLDCMD) - -clean: - @echo Cleaning Juce - -@rm -f $(OUTDIR)/$(TARGET) - -@rm -rf $(OBJDIR)/* - -@rm -rf $(OBJDIR) - -$(OBJDIR)/juce_Application_2817465d.o: ../../src/application/juce_Application.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Application.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ApplicationCommandInfo_80671406.o: ../../src/application/juce_ApplicationCommandInfo.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ApplicationCommandInfo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ApplicationCommandManager_5aac95f.o: ../../src/application/juce_ApplicationCommandManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ApplicationCommandManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ApplicationCommandTarget_90a89aa9.o: ../../src/application/juce_ApplicationCommandTarget.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ApplicationCommandTarget.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ApplicationProperties_a76b5c30.o: ../../src/application/juce_ApplicationProperties.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ApplicationProperties.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AiffAudioFormat_ffbda971.o: ../../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AiffAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioCDReader_c730f7a6.o: ../../src/audio/audio_file_formats/juce_AudioCDReader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioCDReader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioFormat_6605d0f9.o: ../../src/audio/audio_file_formats/juce_AudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioFormatManager_949148fe.o: ../../src/audio/audio_file_formats/juce_AudioFormatManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioFormatManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioFormatReader_36f0295c.o: ../../src/audio/audio_file_formats/juce_AudioFormatReader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioFormatReader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioFormatWriter_11461d0c.o: ../../src/audio/audio_file_formats/juce_AudioFormatWriter.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioFormatWriter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioSubsectionReader_65f61a0a.o: ../../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioSubsectionReader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioThumbnail_cb99b4b4.o: ../../src/audio/audio_file_formats/juce_AudioThumbnail.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioThumbnail.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioThumbnailCache_89a7c678.o: ../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioThumbnailCache.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CoreAudioFormat_1ce243da.o: ../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CoreAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FlacAudioFormat_19c048f1.o: ../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FlacAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_OggVorbisAudioFormat_3f214fc9.o: ../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_OggVorbisAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_QuickTimeAudioFormat_8ad67271.o: ../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_QuickTimeAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_WavAudioFormat_4ff23a5f.o: ../../src/audio/audio_file_formats/juce_WavAudioFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_WavAudioFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioFormatReaderSource_13d4af92.o: ../../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioFormatReaderSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioSourcePlayer_42464899.o: ../../src/audio/audio_sources/juce_AudioSourcePlayer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioSourcePlayer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioTransportSource_f3e60751.o: ../../src/audio/audio_sources/juce_AudioTransportSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioTransportSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BufferingAudioSource_58721b72.o: ../../src/audio/audio_sources/juce_BufferingAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BufferingAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ChannelRemappingAudioSource_e17f93c0.o: ../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ChannelRemappingAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_IIRFilterAudioSource_807ee8aa.o: ../../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_IIRFilterAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MixerAudioSource_bc6f772b.o: ../../src/audio/audio_sources/juce_MixerAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MixerAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ResamplingAudioSource_8511875e.o: ../../src/audio/audio_sources/juce_ResamplingAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ResamplingAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ReverbAudioSource_3ae42aa6.o: ../../src/audio/audio_sources/juce_ReverbAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ReverbAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ToneGeneratorAudioSource_77f504b3.o: ../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ToneGeneratorAudioSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioDeviceManager_c24db832.o: ../../src/audio/devices/juce_AudioDeviceManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioDeviceManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioIODevice_f7da876b.o: ../../src/audio/devices/juce_AudioIODevice.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioIODevice.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioIODeviceType_e5d402c5.o: ../../src/audio/devices/juce_AudioIODeviceType.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioIODeviceType.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioDataConverters_dc0ece28.o: ../../src/audio/dsp/juce_AudioDataConverters.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioDataConverters.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioSampleBuffer_af6ff195.o: ../../src/audio/dsp/juce_AudioSampleBuffer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioSampleBuffer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_IIRFilter_9a31e47f.o: ../../src/audio/dsp/juce_IIRFilter.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_IIRFilter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiBuffer_fa4db7fe.o: ../../src/audio/midi/juce_MidiBuffer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiBuffer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiFile_3bdbc97a.o: ../../src/audio/midi/juce_MidiFile.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiFile.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiKeyboardState_28313976.o: ../../src/audio/midi/juce_MidiKeyboardState.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiKeyboardState.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiMessage_5b1f5753.o: ../../src/audio/midi/juce_MidiMessage.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiMessage.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiMessageCollector_108abdc4.o: ../../src/audio/midi/juce_MidiMessageCollector.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiMessageCollector.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiMessageSequence_a577dcb4.o: ../../src/audio/midi/juce_MidiMessageSequence.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiMessageSequence.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiOutput_3cc0f43f.o: ../../src/audio/midi/juce_MidiOutput.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiOutput.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_VSTPluginFormat_af341d6.o: ../../src/audio/plugin_host/formats/juce_VSTPluginFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_VSTPluginFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioPluginFormat_5dc1eec2.o: ../../src/audio/plugin_host/juce_AudioPluginFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioPluginFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioPluginFormatManager_c336c715.o: ../../src/audio/plugin_host/juce_AudioPluginFormatManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioPluginFormatManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KnownPluginList_cadece16.o: ../../src/audio/plugin_host/juce_KnownPluginList.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KnownPluginList.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PluginDescription_d9c0f10b.o: ../../src/audio/plugin_host/juce_PluginDescription.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PluginDescription.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PluginDirectoryScanner_c7652cec.o: ../../src/audio/plugin_host/juce_PluginDirectoryScanner.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PluginDirectoryScanner.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PluginListComponent_f08a630e.o: ../../src/audio/plugin_host/juce_PluginListComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PluginListComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioProcessor_babd0919.o: ../../src/audio/processors/juce_AudioProcessor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioProcessor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioProcessorEditor_82a32d26.o: ../../src/audio/processors/juce_AudioProcessorEditor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioProcessorEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioProcessorGraph_76dcb4ff.o: ../../src/audio/processors/juce_AudioProcessorGraph.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioProcessorGraph.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioProcessorPlayer_5c53cc9a.o: ../../src/audio/processors/juce_AudioProcessorPlayer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioProcessorPlayer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GenericAudioProcessorEditor_2e8ec30d.o: ../../src/audio/processors/juce_GenericAudioProcessorEditor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GenericAudioProcessorEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Sampler_98f716a4.o: ../../src/audio/synthesisers/juce_Sampler.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Sampler.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Synthesiser_2bffa1dd.o: ../../src/audio/synthesisers/juce_Synthesiser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Synthesiser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AbstractFifo_dfc0bd23.o: ../../src/containers/juce_AbstractFifo.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AbstractFifo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DynamicObject_69d02ab3.o: ../../src/containers/juce_DynamicObject.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DynamicObject.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_NamedValueSet_6b0793df.o: ../../src/containers/juce_NamedValueSet.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_NamedValueSet.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PropertySet_914b5922.o: ../../src/containers/juce_PropertySet.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PropertySet.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Value_16231646.o: ../../src/containers/juce_Value.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Value.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ValueTree_f822be84.o: ../../src/containers/juce_ValueTree.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ValueTree.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Variant_4f31c35a.o: ../../src/containers/juce_Variant.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Variant.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileLogger_7858478e.o: ../../src/core/juce_FileLogger.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileLogger.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Logger_4f4f7f72.o: ../../src/core/juce_Logger.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Logger.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PerformanceCounter_6422080e.o: ../../src/core/juce_PerformanceCounter.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PerformanceCounter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativeTime_bc5ef35b.o: ../../src/core/juce_RelativeTime.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativeTime.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Result_d8f437f.o: ../../src/core/juce_Result.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Result.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SystemStats_c00d8758.o: ../../src/core/juce_SystemStats.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SystemStats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Time_16acdd6f.o: ../../src/core/juce_Time.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Time.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Uuid_f277575d.o: ../../src/core/juce_Uuid.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Uuid.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BlowFish_5d22a7d9.o: ../../src/cryptography/juce_BlowFish.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BlowFish.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MD5_56896819.o: ../../src/cryptography/juce_MD5.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MD5.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Primes_32e6603.o: ../../src/cryptography/juce_Primes.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Primes.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RSAKey_b60982ae.o: ../../src/cryptography/juce_RSAKey.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RSAKey.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SHA256_cb4da0d6.o: ../../src/cryptography/juce_SHA256.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SHA256.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ActionBroadcaster_7f997786.o: ../../src/events/juce_ActionBroadcaster.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ActionBroadcaster.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AsyncUpdater_a7e1cb89.o: ../../src/events/juce_AsyncUpdater.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AsyncUpdater.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ChangeBroadcaster_3eb8fecc.o: ../../src/events/juce_ChangeBroadcaster.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ChangeBroadcaster.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_InterprocessConnection_13086b6d.o: ../../src/events/juce_InterprocessConnection.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_InterprocessConnection.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_InterprocessConnectionServer_a4d7b350.o: ../../src/events/juce_InterprocessConnectionServer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_InterprocessConnectionServer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Message_ac79f635.o: ../../src/events/juce_Message.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Message.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MessageListener_93e51509.o: ../../src/events/juce_MessageListener.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MessageListener.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MessageManager_c7e00842.o: ../../src/events/juce_MessageManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MessageManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MultiTimer_d4d9eca8.o: ../../src/events/juce_MultiTimer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MultiTimer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Timer_77c098b3.o: ../../src/events/juce_Timer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Timer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Component_49f01dfa.o: ../../src/gui/components/juce_Component.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Component.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentListener_e0eda7ce.o: ../../src/gui/components/juce_ComponentListener.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentListener.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Desktop_e3b47b99.o: ../../src/gui/components/juce_Desktop.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Desktop.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ModalComponentManager_b87bddba.o: ../../src/gui/components/juce_ModalComponentManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ModalComponentManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ArrowButton_ebac7066.o: ../../src/gui/components/buttons/juce_ArrowButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ArrowButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Button_886d3491.o: ../../src/gui/components/buttons/juce_Button.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Button.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableButton_e03899cf.o: ../../src/gui/components/buttons/juce_DrawableButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_HyperlinkButton_af0a8983.o: ../../src/gui/components/buttons/juce_HyperlinkButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_HyperlinkButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImageButton_c4dda738.o: ../../src/gui/components/buttons/juce_ImageButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImageButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ShapeButton_2359adfe.o: ../../src/gui/components/buttons/juce_ShapeButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ShapeButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TextButton_8cf49c9e.o: ../../src/gui/components/buttons/juce_TextButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TextButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ToggleButton_f69cb85.o: ../../src/gui/components/buttons/juce_ToggleButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ToggleButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ToolbarButton_884113d8.o: ../../src/gui/components/buttons/juce_ToolbarButton.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ToolbarButton.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CodeDocument_fdd87805.o: ../../src/gui/components/code_editor/juce_CodeDocument.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CodeDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CodeEditorComponent_6fe4a170.o: ../../src/gui/components/code_editor/juce_CodeEditorComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CodeEditorComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CPlusPlusCodeTokeniser_6b8548a9.o: ../../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CPlusPlusCodeTokeniser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComboBox_bcb5e365.o: ../../src/gui/components/controls/juce_ComboBox.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComboBox.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImageComponent_1f90572a.o: ../../src/gui/components/controls/juce_ImageComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImageComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Label_7af0aab6.o: ../../src/gui/components/controls/juce_Label.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Label.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ListBox_d4a8704f.o: ../../src/gui/components/controls/juce_ListBox.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ListBox.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ProgressBar_38bc3ba8.o: ../../src/gui/components/controls/juce_ProgressBar.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ProgressBar.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Slider_8a0d91a9.o: ../../src/gui/components/controls/juce_Slider.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Slider.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TableHeaderComponent_2228124a.o: ../../src/gui/components/controls/juce_TableHeaderComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TableHeaderComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TableListBox_588d027.o: ../../src/gui/components/controls/juce_TableListBox.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TableListBox.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TextEditor_abe7dfc2.o: ../../src/gui/components/controls/juce_TextEditor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TextEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Toolbar_29fa8c7d.o: ../../src/gui/components/controls/juce_Toolbar.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Toolbar.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ToolbarItemComponent_7fab8ff7.o: ../../src/gui/components/controls/juce_ToolbarItemComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ToolbarItemComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ToolbarItemPalette_250807b5.o: ../../src/gui/components/controls/juce_ToolbarItemPalette.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ToolbarItemPalette.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TreeView_f1a8d26b.o: ../../src/gui/components/controls/juce_TreeView.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TreeView.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DirectoryContentsDisplayComponent_97e43c62.o: ../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DirectoryContentsDisplayComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DirectoryContentsList_31e06025.o: ../../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DirectoryContentsList.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileBrowserComponent_1332771b.o: ../../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileBrowserComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileChooser_c439271f.o: ../../src/gui/components/filebrowser/juce_FileChooser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileChooser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileChooserDialogBox_50a36f4e.o: ../../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileChooserDialogBox.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileFilter_de71639e.o: ../../src/gui/components/filebrowser/juce_FileFilter.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileFilter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileListComponent_3f41b6a3.o: ../../src/gui/components/filebrowser/juce_FileListComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileListComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FilenameComponent_921ef5f6.o: ../../src/gui/components/filebrowser/juce_FilenameComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FilenameComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileSearchPathListComponent_85ed8576.o: ../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileSearchPathListComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileTreeComponent_8cb2d3a3.o: ../../src/gui/components/filebrowser/juce_FileTreeComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileTreeComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImagePreviewComponent_a108ea50.o: ../../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImagePreviewComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_WildcardFileFilter_9337b18.o: ../../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_WildcardFileFilter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CaretComponent_26bf4433.o: ../../src/gui/components/keyboard/juce_CaretComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CaretComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KeyboardFocusTraverser_6325fc08.o: ../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KeyboardFocusTraverser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KeyListener_631ada24.o: ../../src/gui/components/keyboard/juce_KeyListener.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KeyListener.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KeyMappingEditorComponent_a0183a92.o: ../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KeyMappingEditorComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KeyPress_47fcc29d.o: ../../src/gui/components/keyboard/juce_KeyPress.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KeyPress.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_KeyPressMappingSet_26212371.o: ../../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_KeyPressMappingSet.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ModifierKeys_eea16d64.o: ../../src/gui/components/keyboard/juce_ModifierKeys.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ModifierKeys.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentAnimator_ad5663d2.o: ../../src/gui/components/layout/juce_ComponentAnimator.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentAnimator.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentBoundsConstrainer_a33c10ae.o: ../../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentBoundsConstrainer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentBuilder_2aa6c5a.o: ../../src/gui/components/layout/juce_ComponentBuilder.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentBuilder.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentMovementWatcher_cbb3e7cc.o: ../../src/gui/components/layout/juce_ComponentMovementWatcher.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentMovementWatcher.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GroupComponent_456e237a.o: ../../src/gui/components/layout/juce_GroupComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GroupComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MultiDocumentPanel_50e05aac.o: ../../src/gui/components/layout/juce_MultiDocumentPanel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MultiDocumentPanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ResizableBorderComponent_7f4f2182.o: ../../src/gui/components/layout/juce_ResizableBorderComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ResizableBorderComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ResizableCornerComponent_1cac2df9.o: ../../src/gui/components/layout/juce_ResizableCornerComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ResizableCornerComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ResizableEdgeComponent_b9c9291.o: ../../src/gui/components/layout/juce_ResizableEdgeComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ResizableEdgeComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ScrollBar_89666ad4.o: ../../src/gui/components/layout/juce_ScrollBar.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ScrollBar.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StretchableLayoutManager_6bf5d800.o: ../../src/gui/components/layout/juce_StretchableLayoutManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StretchableLayoutManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StretchableLayoutResizerBar_a720084c.o: ../../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StretchableLayoutResizerBar.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StretchableObjectResizer_2edcfadc.o: ../../src/gui/components/layout/juce_StretchableObjectResizer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StretchableObjectResizer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TabbedButtonBar_a760aaa3.o: ../../src/gui/components/layout/juce_TabbedButtonBar.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TabbedButtonBar.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TabbedComponent_d618721f.o: ../../src/gui/components/layout/juce_TabbedComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TabbedComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Viewport_6c983422.o: ../../src/gui/components/layout/juce_Viewport.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Viewport.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_LookAndFeel_d4e838ec.o: ../../src/gui/components/lookandfeel/juce_LookAndFeel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_LookAndFeel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_OldSchoolLookAndFeel_5ece559f.o: ../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_OldSchoolLookAndFeel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MenuBarComponent_c68c8dbb.o: ../../src/gui/components/menus/juce_MenuBarComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MenuBarComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MenuBarModel_ede42267.o: ../../src/gui/components/menus/juce_MenuBarModel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MenuBarModel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PopupMenu_ec4cf9a3.o: ../../src/gui/components/menus/juce_PopupMenu.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PopupMenu.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentDragger_fb3bdbe6.o: ../../src/gui/components/mouse/juce_ComponentDragger.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentDragger.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DragAndDropContainer_553e412.o: ../../src/gui/components/mouse/juce_DragAndDropContainer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DragAndDropContainer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MouseCursor_afb68802.o: ../../src/gui/components/mouse/juce_MouseCursor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MouseCursor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MouseEvent_f6ca6078.o: ../../src/gui/components/mouse/juce_MouseEvent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MouseEvent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MouseInputSource_8904aa23.o: ../../src/gui/components/mouse/juce_MouseInputSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MouseInputSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MouseListener_eb73f8a0.o: ../../src/gui/components/mouse/juce_MouseListener.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MouseListener.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MarkerList_2fbb4ef.o: ../../src/gui/components/positioning/juce_MarkerList.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MarkerList.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativeCoordinate_ab2eee5b.o: ../../src/gui/components/positioning/juce_RelativeCoordinate.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativeCoordinate.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativeCoordinatePositioner_c1352791.o: ../../src/gui/components/positioning/juce_RelativeCoordinatePositioner.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativeCoordinatePositioner.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativeParallelogram_5d17dbe6.o: ../../src/gui/components/positioning/juce_RelativeParallelogram.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativeParallelogram.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativePoint_9d2cc957.o: ../../src/gui/components/positioning/juce_RelativePoint.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativePoint.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativePointPath_a4fed61c.o: ../../src/gui/components/positioning/juce_RelativePointPath.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativePointPath.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RelativeRectangle_cc5440b6.o: ../../src/gui/components/positioning/juce_RelativeRectangle.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RelativeRectangle.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BooleanPropertyComponent_92b54aa5.o: ../../src/gui/components/properties/juce_BooleanPropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BooleanPropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ButtonPropertyComponent_3675d6bb.o: ../../src/gui/components/properties/juce_ButtonPropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ButtonPropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ChoicePropertyComponent_b9b44bac.o: ../../src/gui/components/properties/juce_ChoicePropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ChoicePropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PropertyComponent_df1eaecd.o: ../../src/gui/components/properties/juce_PropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PropertyPanel_c640c5d4.o: ../../src/gui/components/properties/juce_PropertyPanel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PropertyPanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SliderPropertyComponent_ba2eb86c.o: ../../src/gui/components/properties/juce_SliderPropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SliderPropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TextPropertyComponent_977e6fa0.o: ../../src/gui/components/properties/juce_TextPropertyComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TextPropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AudioDeviceSelectorComponent_64b1a089.o: ../../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AudioDeviceSelectorComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BubbleComponent_5f51c164.o: ../../src/gui/components/special/juce_BubbleComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BubbleComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BubbleMessageComponent_22f737f9.o: ../../src/gui/components/special/juce_BubbleMessageComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BubbleMessageComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ColourSelector_ac8bb1e2.o: ../../src/gui/components/special/juce_ColourSelector.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ColourSelector.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DropShadower_5903f9f3.o: ../../src/gui/components/special/juce_DropShadower.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DropShadower.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MidiKeyboardComponent_896e2ac8.o: ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MidiKeyboardComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_OpenGLComponent_73944221.o: ../../src/gui/components/special/juce_OpenGLComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_OpenGLComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PreferencesPanel_dbc7d503.o: ../../src/gui/components/special/juce_PreferencesPanel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PreferencesPanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SystemTrayIconComponent_fa664512.o: ../../src/gui/components/special/juce_SystemTrayIconComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SystemTrayIconComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AlertWindow_94d8d1f5.o: ../../src/gui/components/windows/juce_AlertWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AlertWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CallOutBox_61f42d7c.o: ../../src/gui/components/windows/juce_CallOutBox.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CallOutBox.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ComponentPeer_1e4b4b08.o: ../../src/gui/components/windows/juce_ComponentPeer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ComponentPeer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DialogWindow_535b27b9.o: ../../src/gui/components/windows/juce_DialogWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DialogWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DocumentWindow_3cb9d4cc.o: ../../src/gui/components/windows/juce_DocumentWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DocumentWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ResizableWindow_d2110a84.o: ../../src/gui/components/windows/juce_ResizableWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ResizableWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SplashScreen_a0940094.o: ../../src/gui/components/windows/juce_SplashScreen.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SplashScreen.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ThreadWithProgressWindow_d711ee6e.o: ../../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ThreadWithProgressWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TooltipWindow_45074edc.o: ../../src/gui/components/windows/juce_TooltipWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TooltipWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TopLevelWindow_717cf1e0.o: ../../src/gui/components/windows/juce_TopLevelWindow.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TopLevelWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Colour_453f3d5.o: ../../src/gui/graphics/colour/juce_Colour.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Colour.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ColourGradient_c63d0725.o: ../../src/gui/graphics/colour/juce_ColourGradient.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ColourGradient.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Colours_89de9488.o: ../../src/gui/graphics/colour/juce_Colours.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Colours.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_EdgeTable_6a5fefda.o: ../../src/gui/graphics/contexts/juce_EdgeTable.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_EdgeTable.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FillType_5805677e.o: ../../src/gui/graphics/contexts/juce_FillType.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FillType.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GraphicsContext_119e43ed.o: ../../src/gui/graphics/contexts/juce_GraphicsContext.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GraphicsContext.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Justification_dc284c3b.o: ../../src/gui/graphics/contexts/juce_Justification.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Justification.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_LowLevelGraphicsPostScriptRenderer_2e8a92a.o: ../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_LowLevelGraphicsPostScriptRenderer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_LowLevelGraphicsSoftwareRenderer_97263906.o: ../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_LowLevelGraphicsSoftwareRenderer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RectanglePlacement_5fc90ed7.o: ../../src/gui/graphics/contexts/juce_RectanglePlacement.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RectanglePlacement.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Drawable_8c1eccc6.o: ../../src/gui/graphics/drawables/juce_Drawable.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Drawable.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableComposite_4cd2d2ab.o: ../../src/gui/graphics/drawables/juce_DrawableComposite.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableComposite.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableImage_53f04eff.o: ../../src/gui/graphics/drawables/juce_DrawableImage.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableImage.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawablePath_fb538a0b.o: ../../src/gui/graphics/drawables/juce_DrawablePath.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawablePath.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableRectangle_5f2f5993.o: ../../src/gui/graphics/drawables/juce_DrawableRectangle.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableRectangle.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableShape_26926245.o: ../../src/gui/graphics/drawables/juce_DrawableShape.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableShape.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DrawableText_75eda713.o: ../../src/gui/graphics/drawables/juce_DrawableText.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DrawableText.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SVGParser_b79416c5.o: ../../src/gui/graphics/drawables/juce_SVGParser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SVGParser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DropShadowEffect_da52d75.o: ../../src/gui/graphics/effects/juce_DropShadowEffect.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DropShadowEffect.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GlowEffect_c0959893.o: ../../src/gui/graphics/effects/juce_GlowEffect.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GlowEffect.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CustomTypeface_b93a3eff.o: ../../src/gui/graphics/fonts/juce_CustomTypeface.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CustomTypeface.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Font_fa88db26.o: ../../src/gui/graphics/fonts/juce_Font.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Font.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GlyphArrangement_f0797295.o: ../../src/gui/graphics/fonts/juce_GlyphArrangement.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GlyphArrangement.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TextLayout_d18f700e.o: ../../src/gui/graphics/fonts/juce_TextLayout.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TextLayout.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Typeface_34b3026e.o: ../../src/gui/graphics/fonts/juce_Typeface.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Typeface.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_AffineTransform_4a320188.o: ../../src/gui/graphics/geometry/juce_AffineTransform.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_AffineTransform.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Path_dcdd4594.o: ../../src/gui/graphics/geometry/juce_Path.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Path.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PathIterator_4e116c22.o: ../../src/gui/graphics/geometry/juce_PathIterator.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PathIterator.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PathStrokeType_506dcb86.o: ../../src/gui/graphics/geometry/juce_PathStrokeType.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PathStrokeType.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RectangleList_b6ae7ee8.o: ../../src/gui/graphics/geometry/juce_RectangleList.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RectangleList.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GIFLoader_61887b90.o: ../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GIFLoader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_JPEGLoader_412d2ccc.o: ../../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_JPEGLoader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PNGLoader_7f80a3b5.o: ../../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PNGLoader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Image_790c9a1a.o: ../../src/gui/graphics/imaging/juce_Image.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Image.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImageCache_e74a50d2.o: ../../src/gui/graphics/imaging/juce_ImageCache.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImageCache.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImageConvolutionKernel_4e9e7945.o: ../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImageConvolutionKernel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ImageFileFormat_161e770d.o: ../../src/gui/graphics/imaging/juce_ImageFileFormat.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ImageFileFormat.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DirectoryIterator_24c60d54.o: ../../src/io/files/juce_DirectoryIterator.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DirectoryIterator.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_File_8244d8d.o: ../../src/io/files/juce_File.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_File.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileInputStream_e14097a7.o: ../../src/io/files/juce_FileInputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileInputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileOutputStream_d151050e.o: ../../src/io/files/juce_FileOutputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileOutputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileSearchPath_30e3d71a.o: ../../src/io/files/juce_FileSearchPath.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileSearchPath.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_NamedPipe_b3a205e0.o: ../../src/io/files/juce_NamedPipe.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_NamedPipe.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TemporaryFile_935f3fc6.o: ../../src/io/files/juce_TemporaryFile.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TemporaryFile.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ZipFile_16fbb396.o: ../../src/io/files/juce_ZipFile.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ZipFile.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MACAddress_b81987ed.o: ../../src/io/network/juce_MACAddress.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MACAddress.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Socket_cf39c63b.o: ../../src/io/network/juce_Socket.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Socket.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_URL_d6b7cff1.o: ../../src/io/network/juce_URL.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_URL.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BufferedInputStream_c71b2b68.o: ../../src/io/streams/juce_BufferedInputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BufferedInputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileInputSource_2a374046.o: ../../src/io/streams/juce_FileInputSource.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileInputSource.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GZIPCompressorOutputStream_4409282d.o: ../../src/io/streams/juce_GZIPCompressorOutputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GZIPCompressorOutputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_GZIPDecompressorInputStream_b026ffc7.o: ../../src/io/streams/juce_GZIPDecompressorInputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_GZIPDecompressorInputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_InputStream_5314e647.o: ../../src/io/streams/juce_InputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_InputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MemoryInputStream_c5db0106.o: ../../src/io/streams/juce_MemoryInputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MemoryInputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MemoryOutputStream_8003c78f.o: ../../src/io/streams/juce_MemoryOutputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MemoryOutputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_OutputStream_9a068a6e.o: ../../src/io/streams/juce_OutputStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_OutputStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_SubregionStream_9156f331.o: ../../src/io/streams/juce_SubregionStream.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_SubregionStream.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_BigInteger_b44f43d6.o: ../../src/maths/juce_BigInteger.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_BigInteger.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Expression_6f910d50.o: ../../src/maths/juce_Expression.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Expression.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Random_a529cb7b.o: ../../src/maths/juce_Random.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Random.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_MemoryBlock_52f17c52.o: ../../src/memory/juce_MemoryBlock.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_MemoryBlock.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_posix_NamedPipe_aa308c65.o: ../../src/native/common/juce_posix_NamedPipe.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_posix_NamedPipe.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Audio_18d7e8b6.o: ../../src/native/linux/juce_linux_Audio.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Audio.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_AudioCDReader_1263363a.o: ../../src/native/linux/juce_linux_AudioCDReader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_AudioCDReader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Clipboard_44a6bcf6.o: ../../src/native/linux/juce_linux_Clipboard.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Clipboard.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_FileChooser_3b3f403f.o: ../../src/native/linux/juce_linux_FileChooser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_FileChooser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Files_c036ced7.o: ../../src/native/linux/juce_linux_Files.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Files.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Fonts_b2e303e4.o: ../../src/native/linux/juce_linux_Fonts.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Fonts.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_JackAudio_15353e17.o: ../../src/native/linux/juce_linux_JackAudio.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_JackAudio.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Messaging_daefaf64.o: ../../src/native/linux/juce_linux_Messaging.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Messaging.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Midi_4bad86cb.o: ../../src/native/linux/juce_linux_Midi.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Midi.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_NativeCode_8a61cd0e.o: ../../src/native/linux/juce_linux_NativeCode.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_NativeCode.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Network_f47a1c4e.o: ../../src/native/linux/juce_linux_Network.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Network.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_OpenGLComponent_ba2f042e.o: ../../src/native/linux/juce_linux_OpenGLComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_OpenGLComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_SystemStats_9f6d6b50.o: ../../src/native/linux/juce_linux_SystemStats.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_SystemStats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Threads_dc4a4049.o: ../../src/native/linux/juce_linux_Threads.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Threads.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_WebBrowserComponent_358c0a49.o: ../../src/native/linux/juce_linux_WebBrowserComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_WebBrowserComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Windowing_abe04752.o: ../../src/native/linux/juce_linux_Windowing.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_linux_Windowing.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ios_Audio_40e86914.o: ../../src/native/mac/juce_ios_Audio.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ios_Audio.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_mac_CoreAudio_faf8c177.o: ../../src/native/mac/juce_mac_CoreAudio.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_mac_CoreAudio.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_mac_CoreMidi_e79e11ea.o: ../../src/native/mac/juce_mac_CoreMidi.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_mac_CoreMidi.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_ActiveXComponent_7590131d.o: ../../src/native/windows/juce_win32_ActiveXComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_ActiveXComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_ASIO_60eb61ca.o: ../../src/native/windows/juce_win32_ASIO.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_ASIO.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_AudioCDReader_66c7252.o: ../../src/native/windows/juce_win32_AudioCDReader.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_AudioCDReader.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_CameraDevice_ea35306d.o: ../../src/native/windows/juce_win32_CameraDevice.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_CameraDevice.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Direct2DGraphicsContext_9f1b6be1.o: ../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Direct2DGraphicsContext.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_DirectShowComponent_e4030c4f.o: ../../src/native/windows/juce_win32_DirectShowComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_DirectShowComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_DirectSound_3462415e.o: ../../src/native/windows/juce_win32_DirectSound.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_DirectSound.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_FileChooser_18a257.o: ../../src/native/windows/juce_win32_FileChooser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_FileChooser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Files_f3e9a2ef.o: ../../src/native/windows/juce_win32_Files.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Files.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Fonts_e695d7fc.o: ../../src/native/windows/juce_win32_Fonts.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Fonts.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Messaging_926ab77c.o: ../../src/native/windows/juce_win32_Messaging.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Messaging.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Midi_fac3cfb3.o: ../../src/native/windows/juce_win32_Midi.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Midi.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_NativeCode_c247c7f6.o: ../../src/native/windows/juce_win32_NativeCode.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_NativeCode.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Network_6c84a66.o: ../../src/native/windows/juce_win32_Network.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Network.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_OpenGLComponent_d0d99a46.o: ../../src/native/windows/juce_win32_OpenGLComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_OpenGLComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_QuickTimeMovieComponent_be08e5f.o: ../../src/native/windows/juce_win32_QuickTimeMovieComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_QuickTimeMovieComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Registry_86da784f.o: ../../src/native/windows/juce_win32_Registry.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Registry.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_SystemStats_6446cd68.o: ../../src/native/windows/juce_win32_SystemStats.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_SystemStats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Threads_ee986e61.o: ../../src/native/windows/juce_win32_Threads.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Threads.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_WASAPI_c7c6c3c3.o: ../../src/native/windows/juce_win32_WASAPI.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_WASAPI.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_WebBrowserComponent_2a4dd461.o: ../../src/native/windows/juce_win32_WebBrowserComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_WebBrowserComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_win32_Windowing_635b4f6a.o: ../../src/native/windows/juce_win32_Windowing.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_win32_Windowing.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Audio_93f83bd6.o: ../../src/native/android/juce_android_Audio.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Audio.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_CameraDevice_d2743865.o: ../../src/native/android/juce_android_CameraDevice.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_CameraDevice.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_FileChooser_205cbb5f.o: ../../src/native/android/juce_android_FileChooser.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_FileChooser.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Files_3b5721f7.o: ../../src/native/android/juce_android_Files.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Files.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Fonts_2e035704.o: ../../src/native/android/juce_android_Fonts.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Fonts.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_GraphicsContext_d0fb27e4.o: ../../src/native/android/juce_android_GraphicsContext.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_GraphicsContext.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Messaging_59717284.o: ../../src/native/android/juce_android_Messaging.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Messaging.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Midi_4fa64fab.o: ../../src/native/android/juce_android_Midi.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Midi.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Misc_68ea73f6.o: ../../src/native/android/juce_android_Misc.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Misc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_NativeCode_dc186dee.o: ../../src/native/android/juce_android_NativeCode.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_NativeCode.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Network_28d2276e.o: ../../src/native/android/juce_android_Network.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Network.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_OpenGLComponent_8fd9ef4e.o: ../../src/native/android/juce_android_OpenGLComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_OpenGLComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_SystemStats_848ae670.o: ../../src/native/android/juce_android_SystemStats.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_SystemStats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Threads_10a24b69.o: ../../src/native/android/juce_android_Threads.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Threads.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_WebBrowserComponent_178c6569.o: ../../src/native/android/juce_android_WebBrowserComponent.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_WebBrowserComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_android_Windowing_2a620a72.o: ../../src/native/android/juce_android_Windowing.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_android_Windowing.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_CharacterFunctions_b1a5ac62.o: ../../src/text/juce_CharacterFunctions.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_CharacterFunctions.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Identifier_e99ee619.o: ../../src/text/juce_Identifier.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Identifier.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_JSON_bbf64af8.o: ../../src/text/juce_JSON.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_JSON.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_LocalisedStrings_3ddfa55e.o: ../../src/text/juce_LocalisedStrings.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_LocalisedStrings.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_String_80587b01.o: ../../src/text/juce_String.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_String.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StringArray_4aaa67a2.o: ../../src/text/juce_StringArray.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StringArray.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StringPairArray_37130fe8.o: ../../src/text/juce_StringPairArray.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StringPairArray.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_StringPool_9e8d033d.o: ../../src/text/juce_StringPool.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_StringPool.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_XmlDocument_6b9b0c2c.o: ../../src/text/juce_XmlDocument.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_XmlDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_XmlElement_51daa55.o: ../../src/text/juce_XmlElement.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_XmlElement.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ReadWriteLock_7acf3cc8.o: ../../src/threads/juce_ReadWriteLock.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ReadWriteLock.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_Thread_69734d40.o: ../../src/threads/juce_Thread.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_Thread.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_ThreadPool_fd669dfc.o: ../../src/threads/juce_ThreadPool.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_ThreadPool.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_TimeSliceThread_e9db3803.o: ../../src/threads/juce_TimeSliceThread.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_TimeSliceThread.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_DeletedAtShutdown_b9105375.o: ../../src/utilities/juce_DeletedAtShutdown.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_DeletedAtShutdown.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_FileBasedDocument_d507d0a5.o: ../../src/utilities/juce_FileBasedDocument.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_FileBasedDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_PropertiesFile_8faca026.o: ../../src/utilities/juce_PropertiesFile.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_PropertiesFile.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_RecentlyOpenedFilesList_f791257.o: ../../src/utilities/juce_RecentlyOpenedFilesList.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_RecentlyOpenedFilesList.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_UndoManager_33b197fc.o: ../../src/utilities/juce_UndoManager.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_UndoManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_UnitTest_4a02c10d.o: ../../src/utilities/juce_UnitTest.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_UnitTest.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - --include $(OBJECTS:%.o=%.d) diff --git a/Builds/MacOSX/Juce.xcodeproj/project.pbxproj b/Builds/MacOSX/Juce.xcodeproj/project.pbxproj deleted file mode 100644 index 1a13dbaecb..0000000000 --- a/Builds/MacOSX/Juce.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2442 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - - 0F4BA87762766B98D5B58AD0 = { isa = PBXBuildFile; fileRef = 144F56FCF3DF9EC922765901; }; - 50933337E6C3CC5B82540F8B = { isa = PBXBuildFile; fileRef = 36A407F2BE4A625184B5CCFD; }; - 04CB2DA89A71A183CEFEB7C0 = { isa = PBXBuildFile; fileRef = 21E1DBFAB3FB75875EA35280; }; - CD59C8E60146B04575CD61E6 = { isa = PBXBuildFile; fileRef = 415BD77DF4B2F4760D138735; }; - 76890501626BFFF310A94F15 = { isa = PBXBuildFile; fileRef = BA97FEDA576503A21D971F1E; }; - 46151070FA7D3426EC35280F = { isa = PBXBuildFile; fileRef = 1AA8BE2D76E153874FB08197; }; - 983FCD60625A60993546F850 = { isa = PBXBuildFile; fileRef = 0877D5750D6F21C5231687CA; }; - 416D6F00E88DC74879B4DF2B = { isa = PBXBuildFile; fileRef = 7D85530D76756C33795ECCE9; }; - 9C709BC2F4F0EE60BF52FACA = { isa = PBXBuildFile; fileRef = 93006D32B18174D9FE0A5E9E; }; - 992F46189ABF711A047186A4 = { isa = PBXBuildFile; fileRef = 9349E14552FEA0371553E808; }; - 5C312E6678456C8293633E0F = { isa = PBXBuildFile; fileRef = 2AD64F53E12B20011B7A0DB7; }; - FB21B7E6A7CE55D3C0E3C37E = { isa = PBXBuildFile; fileRef = 59597FA0A88A08937801D198; }; - C1147D03F1F4D697CC30DD22 = { isa = PBXBuildFile; fileRef = 27C3C51DF2519B519B76E2EE; }; - C5CFF5508299C26380465290 = { isa = PBXBuildFile; fileRef = CB32D4EE59D5CA9DB12F944D; }; - 0ACCAC5ABDE686B0CA42BFED = { isa = PBXBuildFile; fileRef = 203AC66FFB20EAD2E7A594BD; }; - 2171BD82DA3A6744260CDE58 = { isa = PBXBuildFile; fileRef = E00781B15E47C9CB9E94869D; }; - 3C22C15ACEEF0454171D231B = { isa = PBXBuildFile; fileRef = DA868174D4D2059AC1BE7E71; }; - 6D421F7B7EE3A149389653C2 = { isa = PBXBuildFile; fileRef = 7CF036906034FABB44D2108F; }; - 4ED0A649C320BA53718501CE = { isa = PBXBuildFile; fileRef = D5D2FD212300E7D49ED74823; }; - 5D3EC9BA6BA37694CB371ABB = { isa = PBXBuildFile; fileRef = 7AE5295A472723B26537FAEC; }; - 4CF5FB501CB800D4485B08DB = { isa = PBXBuildFile; fileRef = FBB2EEF0E5EC5EB6F89E9066; }; - 3747D91BE3C6A2E641BB133D = { isa = PBXBuildFile; fileRef = 74AD63909D3EE09D63256A76; }; - 4CFEE72495007A62F78C1B8E = { isa = PBXBuildFile; fileRef = 5D6E837F124C347B3C1CAE23; }; - BF7E18A49525915A0E1928C5 = { isa = PBXBuildFile; fileRef = 1511366CAD437989DAA30CF2; }; - 6DC6DEEE8A1A6092830A79C8 = { isa = PBXBuildFile; fileRef = D86718CE7E5DEF2071AC3D17; }; - 2862E190ECA33D2CE1458B51 = { isa = PBXBuildFile; fileRef = 9A8053936C35A19B9E98623A; }; - 0791EB173E6A9F959E692AA2 = { isa = PBXBuildFile; fileRef = E2A56C23BF2BB466BB273E3E; }; - 3B64EF7F57EAC5C51460059D = { isa = PBXBuildFile; fileRef = 5403C2A4DEE7B9B3B34235F8; }; - 16D537EB6D3BFAB3AAB54B11 = { isa = PBXBuildFile; fileRef = 3988438157D4B75177703F8A; }; - 0C22446F12486AD139A640CB = { isa = PBXBuildFile; fileRef = 6841D6AC927D02113F3AEBD4; }; - 95CF50482DC7139FCB40EB1C = { isa = PBXBuildFile; fileRef = C7DB1BB9AF7FE0A2AA38D767; }; - D66B0BC466522CD4C5F1335B = { isa = PBXBuildFile; fileRef = EAFD034BB1721BFBF9A3795E; }; - F20E960CAA933102A0F0225C = { isa = PBXBuildFile; fileRef = 5DB9D903D24646B0C2356A5D; }; - 9CDC242CC037F1D00BFD6157 = { isa = PBXBuildFile; fileRef = A1D687AE613A8B61EB63923D; }; - FB0C4D926F00644C6435F0B4 = { isa = PBXBuildFile; fileRef = E68EB4BC75216B5B56E3F937; }; - 3AA8CE85F8CEA9D4B8063E52 = { isa = PBXBuildFile; fileRef = B457515938E7141D5E79B671; }; - DDD4E27CA174F32412F71093 = { isa = PBXBuildFile; fileRef = 891E0B1AD09C0EA44297E0F2; }; - DC89A29962945F69CE38658B = { isa = PBXBuildFile; fileRef = 0731C60911E6985F51325484; }; - 78E7EF1759BA0AACCCE37533 = { isa = PBXBuildFile; fileRef = DF3833AF6E38E55218FDF23F; }; - 573BF08B2CACCC317F3D7603 = { isa = PBXBuildFile; fileRef = 0D3A77572C7256CE4C115FD7; }; - 8376B6E3DB141DDF5EFF6327 = { isa = PBXBuildFile; fileRef = 78D29BB5C76CCF7C21EC0DAF; }; - B579C891B16F4B219CD751B5 = { isa = PBXBuildFile; fileRef = 01712FF0A160032FA1DAA8C2; }; - 43FA6F0FD4DDEBA6427E730D = { isa = PBXBuildFile; fileRef = 50FAF92038EBD0127900AAA1; }; - BAB3164372A6C31A1A7DA58F = { isa = PBXBuildFile; fileRef = FCBB1DC14311D099809B21F7; }; - D71FEEEA440682B04E024BB7 = { isa = PBXBuildFile; fileRef = 2EBF36FAAF019B6F811D1C84; }; - B331EE2C23176373F2D52C1E = { isa = PBXBuildFile; fileRef = 1C8211DFB558D740EF4B173A; }; - 79D8E372BA77018BDA956D92 = { isa = PBXBuildFile; fileRef = DA4820727D6DDC75561A262C; }; - 3688819F98EFF0AABDD79029 = { isa = PBXBuildFile; fileRef = 3110B983ACE956D6A24F8C8C; }; - 84F9FCAE9DF003DC6FC3C941 = { isa = PBXBuildFile; fileRef = B6E20AE45813C0CA9B1014DD; }; - E1046147432EB115A68D6C43 = { isa = PBXBuildFile; fileRef = AF47BC3796A74CC15A192E8B; }; - 5CEE2D7E55DA99C1D310CDC2 = { isa = PBXBuildFile; fileRef = 9C5C0BCB2A298160025B15FC; }; - B154245927BCB4F87ABEAF17 = { isa = PBXBuildFile; fileRef = AB554593165FE8C8B40F4447; }; - 52ADF1419B058963EE32B7C3 = { isa = PBXBuildFile; fileRef = BC2A50B0B01128E394E9DE9C; }; - 31D36C32211754E793B9FF81 = { isa = PBXBuildFile; fileRef = D141C024A3F5A6748B0E9ED7; }; - 2D46CF2B0350A442E08EC355 = { isa = PBXBuildFile; fileRef = 08EBC2152F45FB2B839FCCC1; }; - D1407BB28C169F5E1CAC3CC7 = { isa = PBXBuildFile; fileRef = 096CF2243648F17E1BF5421B; }; - 07E6E11A658930554FF0C56A = { isa = PBXBuildFile; fileRef = ED5966B95F865C586A3CE08F; }; - E8DFABC1603D55B97429A8E4 = { isa = PBXBuildFile; fileRef = 35668D8EEA19957C6C9AC83A; }; - 1F905F44E5FA23A2D5CCDA0A = { isa = PBXBuildFile; fileRef = 4F22276689685D839BD252EA; }; - 4AB5E55BDF79028F82F83D8E = { isa = PBXBuildFile; fileRef = F77C9170829579FABA5679AD; }; - 9D2D1BA65C27BDA1F7C44769 = { isa = PBXBuildFile; fileRef = 70E5409425A76782B6188B31; }; - 43B3119E2F1B559263AE956C = { isa = PBXBuildFile; fileRef = 9BD379D2F7995BFE0B3E5369; }; - 4A7952C0A4EEE13296EEED5E = { isa = PBXBuildFile; fileRef = 1809284DD05B56309D7EA24F; }; - A230949FF8848D5E923F9083 = { isa = PBXBuildFile; fileRef = 5D27EE211D9BFF6A58C4DC42; }; - 11162E9812CFB0E738A7E2E6 = { isa = PBXBuildFile; fileRef = 4DF9D333038A442870668D31; }; - C682BEA7DB70FDC7C6BA2D6E = { isa = PBXBuildFile; fileRef = D66C00E06B06EAD3B5257DD6; }; - 6A53DA58B55E2DE7241BF2C8 = { isa = PBXBuildFile; fileRef = 4555F03DBD059EEDECEF9F85; }; - 0FF71870483AC46D5B7AC5B0 = { isa = PBXBuildFile; fileRef = DF6CAC67C0F2D379BDA03062; }; - FA01B3EABA192AE041D4FE4D = { isa = PBXBuildFile; fileRef = CFAECB6551F48A1695DEC243; }; - 43047D78351C2D7047F4F81E = { isa = PBXBuildFile; fileRef = 0AD73B8EA0D60D9927B36624; }; - 5BF44F954E56B7C2DD15EAEA = { isa = PBXBuildFile; fileRef = 18B170E96511BBA1019C66F8; }; - B14EB5F3829CA26DA906D5C0 = { isa = PBXBuildFile; fileRef = 8D2DE1F3CB15D003C90042E7; }; - D75943C2812EA68CA74D9FDA = { isa = PBXBuildFile; fileRef = CEF91E0C9CBB3EBFF9500FDA; }; - 6DEA630BFFF638BBBC8FDC00 = { isa = PBXBuildFile; fileRef = E3C548295935D26121D5D823; }; - 708060ED04ADF4E4FB8E2171 = { isa = PBXBuildFile; fileRef = EAFD8FAF365DFB32DC42D0E7; }; - 12E3CC31875A202D6B30F778 = { isa = PBXBuildFile; fileRef = E9E692847C14AD33CD5FB40B; }; - CF51988743ED2CD823DFE0B5 = { isa = PBXBuildFile; fileRef = 7AE9331938549244E27A5D0E; }; - 4AAFC135B170CF02A40F0D51 = { isa = PBXBuildFile; fileRef = 4CBD301A08E9C3762F861FC3; }; - 659D9CD58B6914EB420E6AEC = { isa = PBXBuildFile; fileRef = 31D985CB8646B78460E9D5A7; }; - 55737E2F1817DE642AA7DA05 = { isa = PBXBuildFile; fileRef = 1617348BBF5D103619D76911; }; - 6D2C50B0A69855A7F8C062E7 = { isa = PBXBuildFile; fileRef = B80F8CD026033ACCCE11A1A4; }; - 70EE7A1273945B62B013DB43 = { isa = PBXBuildFile; fileRef = AE68ECB6E063BD8D4984C0B3; }; - 9DF800566462E24A14246EAE = { isa = PBXBuildFile; fileRef = 843A7B398E9411F0AF28D65D; }; - 89F0DA39878F8A41E60B8C67 = { isa = PBXBuildFile; fileRef = 9CF077D3ED7B7B56F351AAF6; }; - 12E1174518BE1063E506CE5C = { isa = PBXBuildFile; fileRef = E594F70DC2F292FF1EF65CB6; }; - EC0B67A801316FBA35A04356 = { isa = PBXBuildFile; fileRef = E2D07ED5E1A4A460E0DEF59C; }; - 86EDB250B9F5C8FF3045ADEB = { isa = PBXBuildFile; fileRef = 1F2CFBF13ADCA05C0DC2D7D4; }; - 8F7CC7DDA1E07A392CAD82A3 = { isa = PBXBuildFile; fileRef = C818B558D6D5B62A80621281; }; - 621B7B0B518E63E69122C13E = { isa = PBXBuildFile; fileRef = D0D9267E200BD462361810F7; }; - 97982824572C18827047D92A = { isa = PBXBuildFile; fileRef = E13F33E386E1A0D5FC546521; }; - 927E7250FCE62E838599DF83 = { isa = PBXBuildFile; fileRef = 621B3A4B154182F69DDE2989; }; - 9AE6891C35CE161CB1707B4B = { isa = PBXBuildFile; fileRef = 2FFF9AFE4BD9437CE096E52B; }; - 06994A713C38F415C4E8A009 = { isa = PBXBuildFile; fileRef = 18EE6576A9ED098632CE5155; }; - 98F737B7459895BFCDC7965E = { isa = PBXBuildFile; fileRef = 8B1C747E63EEF036AD9AF3D8; }; - 7033A0968B1C81A821CCC296 = { isa = PBXBuildFile; fileRef = 1C3D15546065C1A9AA5AA0C6; }; - 14E5A383C70731C60911E698 = { isa = PBXBuildFile; fileRef = BA415BD77DF4B2F4760D1387; }; - 3A10CF09C41F8F55B7529E68 = { isa = PBXBuildFile; fileRef = 6930E651AEE97FD47E185EC9; }; - 5482BFF6CAD3B6CDFB09FBA1 = { isa = PBXBuildFile; fileRef = E927E4A58A84B21AA6B38A44; }; - FC3299637EACD8B5CBEC391F = { isa = PBXBuildFile; fileRef = 09AE2C7E2573204A7A35452B; }; - 5C245C1A77B96A1425323A1C = { isa = PBXBuildFile; fileRef = 9846D4523B3425BBB04107EE; }; - 05DFD3AF416CA6FDDDDC4C74 = { isa = PBXBuildFile; fileRef = F750738F398054AB38250780; }; - 78DEB64D3F38269C62EB1C7F = { isa = PBXBuildFile; fileRef = A3CB18F915377AC3FFA2E5F4; }; - DA5DA96B9D1A26342D9278B6 = { isa = PBXBuildFile; fileRef = 04F48B09426293224576DA9A; }; - CA49EF43B1478B146ADBBF62 = { isa = PBXBuildFile; fileRef = 346CC505FAFEE9451040108D; }; - FE6F6A4946B7E4F6C9F44C4A = { isa = PBXBuildFile; fileRef = ADC16C18C8237A7F8E35E37A; }; - 28254F1E6E686CF6F29AE56A = { isa = PBXBuildFile; fileRef = 0D3FA24FF38399E0EDA80860; }; - 9EA7FEF4CAD2BF46DD3596DA = { isa = PBXBuildFile; fileRef = 7330A9643F50DE8BEACDBB61; }; - D1400B3D9D07FA9E8BAA21CB = { isa = PBXBuildFile; fileRef = 1BC6C010045A06BDB4C684F6; }; - 716823F3B5437A20FCADA50E = { isa = PBXBuildFile; fileRef = 71B6CE03D6DB07BB293C8206; }; - 7CAB8DEBF6B93C845AEF11E5 = { isa = PBXBuildFile; fileRef = 3CE16163A43A6E67428385EE; }; - BBE24BE654237ACD381A97E4 = { isa = PBXBuildFile; fileRef = 6BB68B37C7B0BB4DA8326647; }; - 6F38AFBC749040844076FD4F = { isa = PBXBuildFile; fileRef = 76E073B2A3F59A3ACD20CC87; }; - B35BFCD19569A9F91A3CCCF5 = { isa = PBXBuildFile; fileRef = A4E66D702028A22D8157241C; }; - 7C7B33BC2E2F245C8AFC9879 = { isa = PBXBuildFile; fileRef = 53EB02EEDF5E7971EAB9E795; }; - 110285CA29B28DDC018D2BF0 = { isa = PBXBuildFile; fileRef = 37E48B8F8AD2BC448E5935C7; }; - ECF05C68A4DF71A10F8E8BA4 = { isa = PBXBuildFile; fileRef = D317D4B5BA40A5754EE56F47; }; - 50CE14D31986BA1BC81B0869 = { isa = PBXBuildFile; fileRef = BC209F6862D5923B8F9E3080; }; - E421EC41CB492F58BF1D9C4E = { isa = PBXBuildFile; fileRef = B60FE8BFA252E3EF2D60B77A; }; - E3CDB77EF18430879925E6A3 = { isa = PBXBuildFile; fileRef = D3B56583D4F60069296DB959; }; - 55E5B76FB1649B60DBE16B89 = { isa = PBXBuildFile; fileRef = B1DEB4E0BBFE7E2D052165BD; }; - 6D1A45ED50BAFAE4F4E403AC = { isa = PBXBuildFile; fileRef = 102BAE57AAA43A7685FCBD9A; }; - 70D519927F38B21BE572201A = { isa = PBXBuildFile; fileRef = 730CAA344708954DE271072C; }; - E4EFC5F8828526CE4518F1E6 = { isa = PBXBuildFile; fileRef = D54308F25AEE3110A166F2BE; }; - 835F7FDCAD027B4E96AB407C = { isa = PBXBuildFile; fileRef = 9A9D8C524A070162517620E5; }; - D027C0131892DA25CE716DDE = { isa = PBXBuildFile; fileRef = CA1B41922D8094982F967DBD; }; - A65EBA33900ED91BE522DBF7 = { isa = PBXBuildFile; fileRef = 29DFAA512171B967D687A945; }; - 0D91D36C2195315FE534F304 = { isa = PBXBuildFile; fileRef = A418FC3BDDBF1CE9F2903490; }; - A1E82F70796B8611D7323247 = { isa = PBXBuildFile; fileRef = 949854EDE6B5B16CEFB6108F; }; - BC1856E0B20406DDCE5EBF94 = { isa = PBXBuildFile; fileRef = 8A67B45A2BA1D19D1AC43315; }; - FF3A28F88174E10CB478931E = { isa = PBXBuildFile; fileRef = 912C419859C9C56BC96AA6FB; }; - C39AE37828718E9A45589A24 = { isa = PBXBuildFile; fileRef = 5ABC6616473BA4791AA8101E; }; - 4400B0595B35F919291C1A01 = { isa = PBXBuildFile; fileRef = 29A79478AE8567250972ED43; }; - BB1DAC0CA8D7B3DEEDEE76C6 = { isa = PBXBuildFile; fileRef = 7F5A271EAB78C7CF8B2341DE; }; - 56F347211337C9229BA06AA7 = { isa = PBXBuildFile; fileRef = A00C6593BFBFA76043BC0C06; }; - 75EAEC54BA3A8BD7F317C7E4 = { isa = PBXBuildFile; fileRef = F1A33029252D29A6ADF171B0; }; - 5FFFA4B8857D64FE36B4B125 = { isa = PBXBuildFile; fileRef = B1E8FF009812F29C2620E6BB; }; - 1D406F33F6B9FE7F92A71438 = { isa = PBXBuildFile; fileRef = 921B616E2229AEB6390D2B57; }; - 806FF2617B7CC21609927A11 = { isa = PBXBuildFile; fileRef = 07191E1A9805FA6E6F253FF6; }; - 9AA76460DA7D34CE6A69E2B1 = { isa = PBXBuildFile; fileRef = 45E5EE9E0173683D721FABDA; }; - 4E81BC4A50CF1883F529E152 = { isa = PBXBuildFile; fileRef = F8FCCCE06D31FEF697FCD80D; }; - 8FBB6BF0C5406E1BA481CFEF = { isa = PBXBuildFile; fileRef = A6AD7357F905309D1B461EB7; }; - F5F3F25D9F377128DC74D95B = { isa = PBXBuildFile; fileRef = FF046140CCF1EDB0DFF80178; }; - C64A2BF05224582134872415 = { isa = PBXBuildFile; fileRef = A95F42C5CB0C2E5052B31568; }; - 0A9C9486A6B31F21B1472D2B = { isa = PBXBuildFile; fileRef = A31221E2A50CCE9DF06B5F4B; }; - ED9F9A6CB4F8BB7FEA5384B7 = { isa = PBXBuildFile; fileRef = 3D8B0E86C98E2EE49AE868C8; }; - DE0BAD16BD5A6568EB4D228B = { isa = PBXBuildFile; fileRef = B116FEC4D544DB8E38CB571E; }; - AF6FEC311B9FDA112CEEBE03 = { isa = PBXBuildFile; fileRef = F1F65C9E7394E04E073A57A4; }; - 3795ECCE9D98F872F5BCAE64 = { isa = PBXBuildFile; fileRef = 993C90B10202DA78FA31CC58; }; - 723CFE5184B20B12ECABEB41 = { isa = PBXBuildFile; fileRef = 079CFB5DEF6F2B71E2910A22; }; - DB6098F004F6D7F19605002E = { isa = PBXBuildFile; fileRef = 143F36BCDE7A65EBA33900ED; }; - 757AC60B8BA481E592FFE6FF = { isa = PBXBuildFile; fileRef = F2C653BA4552E6838DFA4F87; }; - FC659F15D298558D9553B643 = { isa = PBXBuildFile; fileRef = D41423657626ACA672A9DED9; }; - C090ACD462D9431C8B64CAD1 = { isa = PBXBuildFile; fileRef = FD004BDDCEDB7E324983F70C; }; - D894FBF1CF62C5F126213616 = { isa = PBXBuildFile; fileRef = B92ACF027E63D1C788DEC893; }; - 3D80F7AE3D65EE0BB607F252 = { isa = PBXBuildFile; fileRef = 218D7D73C086866E587FFD01; }; - 2F33C392A0DD205A865955DE = { isa = PBXBuildFile; fileRef = 1DDE0A8E4C5857715D9B5FAE; }; - 36615B7CB2BE96B624C4ADC0 = { isa = PBXBuildFile; fileRef = 6AACD2FD239E39F87B666C6F; }; - 4F2AAD8318402F8C23A9EA54 = { isa = PBXBuildFile; fileRef = 9E4B3BAB9BDB06B60D28DF48; }; - E6971F06B78AE76C35E1A19C = { isa = PBXBuildFile; fileRef = 3D74B30C63465C32E26D8E33; }; - 6629D535AE1ABE35A0D53C69 = { isa = PBXBuildFile; fileRef = 944BC51C440C167C5B2A23E3; }; - DD4599D0A8117B025B477DE1 = { isa = PBXBuildFile; fileRef = 067D84F9291770240D1AB5B4; }; - E064E329741F36C329989203 = { isa = PBXBuildFile; fileRef = 441257DD380138C03568FCBD; }; - 61E659ADBF9D832ED8F24540 = { isa = PBXBuildFile; fileRef = 2886656DF7ACC9DDC888827F; }; - 9379C833B875207E5DFC5A3F = { isa = PBXBuildFile; fileRef = 82DFF1BD3665DC32672FCCE8; }; - F1A6C2E3226F87860BFC4EBC = { isa = PBXBuildFile; fileRef = D39C0B853C3EBBBD11E7C71E; }; - 144872E56AED1981C0973B24 = { isa = PBXBuildFile; fileRef = D31704DAB806B6AF3ED52DC7; }; - 95648DF5676EBEF57009D09A = { isa = PBXBuildFile; fileRef = 243EF1A31A779413BC2D5B98; }; - 2FE59D80851A0A392EF2F923 = { isa = PBXBuildFile; fileRef = 36BB6DDF702EC9B3DAC851FF; }; - 621D2E6CDA267030405166C2 = { isa = PBXBuildFile; fileRef = 9DA988F1D7CE29E0DFED7EF0; }; - 90347B7C32ACE8A11FC1B708 = { isa = PBXBuildFile; fileRef = 072D77C3834B1B3FB77F277B; }; - FAC87D81FE5168E37645A113 = { isa = PBXBuildFile; fileRef = 1C3FFBA02AE51EDD72A6250B; }; - E5BB4B5EBFE206E09D0E6E10 = { isa = PBXBuildFile; fileRef = C45E7E6B6E45DEFBF80940DD; }; - 1906C642BF6CA67821512855 = { isa = PBXBuildFile; fileRef = ECCBF2452804ECB2D5B4BC50; }; - 6F41A81F269BCBB912C6AFBC = { isa = PBXBuildFile; fileRef = E2C948680009D1744CEDBC25; }; - 7BB45CEB3B0913F98FC817F5 = { isa = PBXBuildFile; fileRef = 0984A4BA00D6AAFB463657F4; }; - F41D6061AD873C619D7436FB = { isa = PBXBuildFile; fileRef = 3451124EC2809C9BB591DF93; }; - 1FC0972EFBE39C7CDEB73A3D = { isa = PBXBuildFile; fileRef = 84311C1F5A8ACC8DF4D6FF34; }; - E63E64BFF5FDCEF5B53AE304 = { isa = PBXBuildFile; fileRef = DED871B1C7458B15DE7C9234; }; - E162F83B5F038092E2C70FC0 = { isa = PBXBuildFile; fileRef = 11F1658A055C45FE824FD2DB; }; - 710BF477DE534CF18BD68959 = { isa = PBXBuildFile; fileRef = 4C3C3AFC3D97C1378B7D7435; }; - E5DA150E966B948C4CB4EFDB = { isa = PBXBuildFile; fileRef = 0A20E7E561633610A76A34AB; }; - E96B477EB51FC152AC2EA6BD = { isa = PBXBuildFile; fileRef = 9C1D5CDA61FB51F657DA8B22; }; - CF36EF39EEAB7A4744C5D310 = { isa = PBXBuildFile; fileRef = 3C8C1AAF32DFECB89EB83271; }; - 372B6FF28C49018F5191C517 = { isa = PBXBuildFile; fileRef = 1317F0BE5EC80371F744967B; }; - D9AAB4AE220010CD526C87D2 = { isa = PBXBuildFile; fileRef = A34C0E63D41CFF5E55FD1D9E; }; - C732ADB05901619B14F1D6BB = { isa = PBXBuildFile; fileRef = CC04F253CB70B20B774801A9; }; - 075D5995E41FDD670ED35E17 = { isa = PBXBuildFile; fileRef = A5AAF4475138358F33D4904A; }; - BBE02E8719411C8A7D43A401 = { isa = PBXBuildFile; fileRef = 8AEF18EE9B12D4677F96B709; }; - 35E3B9684ED968BAC0BC8021 = { isa = PBXBuildFile; fileRef = 2FFDC7636EFC2D7F74590A31; }; - 736AC4A9DA6515B92644FA02 = { isa = PBXBuildFile; fileRef = 929FEA5458430B7AE23BBB46; }; - DFFBADCBC9C7E31B391BA560 = { isa = PBXBuildFile; fileRef = 090907E4FE95EE2B11C1A0E1; }; - A24A946371D566E02BCC95A5 = { isa = PBXBuildFile; fileRef = 2E4A5F7128313C23AD0356F7; }; - D390CCB01BD9BD132F04E0A6 = { isa = PBXBuildFile; fileRef = 87E57C8F3448D615271CD9F6; }; - 26E2FB6533B5700FA9780E00 = { isa = PBXBuildFile; fileRef = D7772BC5E4E455AE2916A87D; }; - AF5593DEC14D551C38CCB50D = { isa = PBXBuildFile; fileRef = 6C33842C52B61407CACCA858; }; - 0B830401EA0E883CCAAAC696 = { isa = PBXBuildFile; fileRef = A24990B395323FBAC0BEFB5A; }; - 3897B36CC1D89C5755CE1B90 = { isa = PBXBuildFile; fileRef = EF18D0073BE50E572ADD9A1C; }; - C55B00378E784DE4B428E934 = { isa = PBXBuildFile; fileRef = D36EFC4421056277BA87387E; }; - 82A9E0388C9BF3A698DCEF69 = { isa = PBXBuildFile; fileRef = 41AF663E626B8F6D319B9966; }; - 7F6749BFCF2F134468825D45 = { isa = PBXBuildFile; fileRef = 3EC800323255128D69539BAE; }; - 277CF246D5EE48868E38E625 = { isa = PBXBuildFile; fileRef = B7251E779500BA77F5522CC7; }; - 4D285D9D3F5955F2FD574D04 = { isa = PBXBuildFile; fileRef = EF50EEDCAB08F842AB8DE6DA; }; - 30F9B53BD00228406F6477DF = { isa = PBXBuildFile; fileRef = 2E03ADF975A126C1F2F7B667; }; - 759633D5CDB35874FD37DD7F = { isa = PBXBuildFile; fileRef = ED3ED8389001D55FBDCF1087; }; - E0F309D93E9A7F0CC71C4503 = { isa = PBXBuildFile; fileRef = 835CC2A1E67E7B19E41F8FBD; }; - F246AADF8E531BC2244A1D38 = { isa = PBXBuildFile; fileRef = FF052647D2EFA985D05C8E83; }; - F78940DAEB8BE98A9AA4B0BE = { isa = PBXBuildFile; fileRef = 504730C9B9F60192C2577979; }; - 00FE118356919D0BA97AE853 = { isa = PBXBuildFile; fileRef = 85B7BCACB40E02815844F71D; }; - 18D8A96CCD34E41A5E162AD5 = { isa = PBXBuildFile; fileRef = A54BC72C899A2AF82E1E37F8; }; - CEB8A9B9A37EBBA79A6478D4 = { isa = PBXBuildFile; fileRef = 582DCC2F948F1DEA0D450B0D; }; - D6D48B2CC53FAE2BD126B0DE = { isa = PBXBuildFile; fileRef = E0694CD7C814AA99E5A84799; }; - C384A89F786FDE8426F657D5 = { isa = PBXBuildFile; fileRef = 62967D33232C5A86D88084B4; }; - 3D324F656EEF8F1FB2B437AC = { isa = PBXBuildFile; fileRef = C17613C202D8E1C366F21D3C; }; - 645AF66C048A4815F5A8ECDD = { isa = PBXBuildFile; fileRef = 2BFC199D03DEEC329D6A7CB1; }; - 38EFE824E76B3BB99824C265 = { isa = PBXBuildFile; fileRef = 32EA297812F1C88B42099501; }; - E23C5C51305DC7CE30E4DAB7 = { isa = PBXBuildFile; fileRef = CB649686575473223C859482; }; - 60E1742796432D042C59B9B3 = { isa = PBXBuildFile; fileRef = BA17B023595ECD8166A231D1; }; - B92F53BABB6A9AC8348B001E = { isa = PBXBuildFile; fileRef = 78068AA59A5DCFCCAAEA79D0; }; - EBC3AA015D24C62FA0307F51 = { isa = PBXBuildFile; fileRef = 61D06B694603F608CDA0703B; }; - 803FFCA3DAC0C004A80143B4 = { isa = PBXBuildFile; fileRef = 91CB423DBC5F3CBEDD9CF2EF; }; - F0556B3AD9D388177E26B90D = { isa = PBXBuildFile; fileRef = AF66A9951377E2D04C54CADD; }; - 0558FFF11AED944C6B3E5FB5 = { isa = PBXBuildFile; fileRef = 2ED8CC539A9D9BE611F67A9A; }; - CF73FAC91E319C464F07C966 = { isa = PBXBuildFile; fileRef = 29BC53FEE9BC27F44534C909; }; - B6D3EDA0F2E3516F3922F23F = { isa = PBXBuildFile; fileRef = 312F208B501E0D7764C6B613; }; - E7C9FAA5F8A4AEDAD8A8CC1D = { isa = PBXBuildFile; fileRef = 9D3F1BAB1D48DDECB9F35916; }; - 084C9F2D4F78134CB1EFE676 = { isa = PBXBuildFile; fileRef = 1B170F70AF8AA0A39074F671; }; - 4DAD08CD3A688747C9CA237B = { isa = PBXBuildFile; fileRef = 0F1C5770B363EF7DF64A876A; }; - 60FE8BFA252E3EF2D60B77AD = { isa = PBXBuildFile; fileRef = 6619D27E74F623B1E8CE8F71; }; - C592CC923C5495467EF05D48 = { isa = PBXBuildFile; fileRef = EAF0F2EAB230F7539B91A7FB; }; - E12096E92D3D43DD7926E063 = { isa = PBXBuildFile; fileRef = 7904C2A3C52959748C46D54F; }; - F4567E6C9ABFB13FF24797DE = { isa = PBXBuildFile; fileRef = 94D3EBE6E0D9AFE555226A88; }; - 0B0996F97D926609C23E5F90 = { isa = PBXBuildFile; fileRef = 67F4F9E1F6B9B4D1C1A668E5; }; - FB5900FB9E071EDC2542B846 = { isa = PBXBuildFile; fileRef = 6E4DF7338364956EF42C4493; }; - EDE605169F0AF038FE5097B3 = { isa = PBXBuildFile; fileRef = 3FD3FA96955DD648494E76A4; }; - D78C3DA6505CE8CC3F17C070 = { isa = PBXBuildFile; fileRef = 692A95B19D9C32094A1E07B9; }; - B23EE989379EB2F075D6F587 = { isa = PBXBuildFile; fileRef = 058702E8697667AEA38254C1; }; - ED7C62DE10250FCC07CF17B2 = { isa = PBXBuildFile; fileRef = 6FFB38088C11BAE68368A3E7; }; - 1535D49C24E8A9FA5F6DCF6E = { isa = PBXBuildFile; fileRef = 59B2FFF817679AEA84375E1B; }; - BBCA4C01CEF1EDA75625D6DC = { isa = PBXBuildFile; fileRef = D9B3C04F8EB4228DD59002E7; }; - 136FB9588C834E6F4A1EEBFB = { isa = PBXBuildFile; fileRef = 17C3AF03FF7AE88AE0C73311; }; - 274415D1C0AE9BF56FAAE791 = { isa = PBXBuildFile; fileRef = 4035C867821E9B5887AA25FB; }; - CBAD975785BD26A0DA9417B6 = { isa = PBXBuildFile; fileRef = EFA58F646B69B227AEF14140; }; - 2A8F78D412AC7EC0C2998A1A = { isa = PBXBuildFile; fileRef = 06B06C420341B005DFF951D2; }; - 2DD969525DEF4AD408E9BB59 = { isa = PBXBuildFile; fileRef = AD7A1C2C82EE714EBDD52EFC; }; - 059B694C912BE81023D5240D = { isa = PBXBuildFile; fileRef = D4211E697F43821CDBCE4F24; }; - 4387EB80C5795FACBE753A7F = { isa = PBXBuildFile; fileRef = BE5DCD603F7E21A1F66CDF33; }; - B2C41D39730EB3AC75D55949 = { isa = PBXBuildFile; fileRef = AE363A1FE2F403F7CE2FDF7F; }; - F045E8F977C00016F6EBB1B7 = { isa = PBXBuildFile; fileRef = A10A63E2098A85B5CA9265B1; }; - B89FE5AB44DDEBCC050F8D7A = { isa = PBXBuildFile; fileRef = 3F60563DEC7941B88163A50E; }; - 2EA320797BD7D2137F133681 = { isa = PBXBuildFile; fileRef = 39C0783ED515AAA82F9CA37F; }; - 1008A8A446B9BCADBB853056 = { isa = PBXBuildFile; fileRef = B3F5E7A708350F72E7C77153; }; - 0FB1AED6E5AB5CEA95E70950 = { isa = PBXBuildFile; fileRef = BBE79494A818EF83F52A4C7B; }; - 103A3B11DFE35E9088ECE933 = { isa = PBXBuildFile; fileRef = AE5A7EC70F288E7EA682081D; }; - DAC7AB8D9EA70D99A1C1287E = { isa = PBXBuildFile; fileRef = 7A039686F4F852E26936CA53; }; - B3D08D9E24CC369E4838E6FF = { isa = PBXBuildFile; fileRef = 868E43A4BB7015579789E4F8; }; - 15932C8039A59B0431FBB93E = { isa = PBXBuildFile; fileRef = D99C977ACCD09262F06F6624; }; - 3BBC410C79D2F53D32ED7466 = { isa = PBXBuildFile; fileRef = AD655AA04981173716022D8D; }; - 88A4D0443DFD6BA1A1B32AB9 = { isa = PBXBuildFile; fileRef = 21B2342B75097AB93CFF7E97; }; - 06F1BEB9AB97F33305B8F816 = { isa = PBXBuildFile; fileRef = 7A51D8B81F390A4CABF25C73; }; - 6CB4FA2797FBEA5C4C342EED = { isa = PBXBuildFile; fileRef = 76DB94CC776536F5D05B9445; }; - 150C16E65ADC7E3359C88510 = { isa = PBXBuildFile; fileRef = AA698DD5A82F91CF84A29666; }; - 9C547F4DC4FC50F9C3382ACE = { isa = PBXBuildFile; fileRef = FABA493FEE07E6373DD8EB41; }; - 5D1B2A14239B0351261D832E = { isa = PBXBuildFile; fileRef = 595EBA8A689DA899986314D8; }; - 0AFD6B2B694302A62C7C9DD1 = { isa = PBXBuildFile; fileRef = EACFC12E665283EB7926E9EC; }; - 3CE21931FC5A59ED7C23144B = { isa = PBXBuildFile; fileRef = BAE5CE629DF9D286293E616F; }; - DB7E8E984F9BEF4C84B887B1 = { isa = PBXBuildFile; fileRef = D4C499CB25F043FE667BC5E1; }; - 07645D91AFD4F8512ECD48ED = { isa = PBXBuildFile; fileRef = 4366712140FBEBEDBCBDCE9B; }; - D132232A4A404A7C08D10928 = { isa = PBXBuildFile; fileRef = E0A2C24581917DD090186333; }; - 83B488D64AB9828CFFBC55A9 = { isa = PBXBuildFile; fileRef = 3F3D429025A92B6F0FB6F8EF; }; - 8305C5E01476E99FBB1A0315 = { isa = PBXBuildFile; fileRef = 275F2210628D9E9968B1B258; }; - FF613B604C2333F4A4ACEDDA = { isa = PBXBuildFile; fileRef = 5DEA687D261C59CBABB782E9; }; - CECE3D66B19693E41850C30D = { isa = PBXBuildFile; fileRef = 5593DEC14D551C38CCB50D70; }; - DF419EBD05F13A0D2073D47A = { isa = PBXBuildFile; fileRef = B8E47498C7C6D5ECF41F0EAB; }; - C9FB7884928BF0D6140AF881 = { isa = PBXBuildFile; fileRef = 9DC2C10B16A645EEB82220D8; }; - 5C9628DB3E0C0BA8809AE45D = { isa = PBXBuildFile; fileRef = EE5F18DF1DED7617C4A41FF3; }; - 724DA2BCA5ABC5772604C3B4 = { isa = PBXBuildFile; fileRef = B2BCE9DDC8F0F54CA3D913E7; }; - 035B1F7B1505ABF24455690E = { isa = PBXBuildFile; fileRef = 5249EFBE3B22E6FC1A7B6D42; }; - 3C71EA297D7418FEBB52F9DD = { isa = PBXBuildFile; fileRef = A257B76FCE9D594EAD41414C; }; - 7A86E411B55E15DA7AF1FE67 = { isa = PBXBuildFile; fileRef = 8280AA34B23B4D366711A9E7; }; - BD86381924AE45021246ABA3 = { isa = PBXBuildFile; fileRef = C9561A66310DAD5EEB4A9462; }; - 306AB64E97A05B800349E7E2 = { isa = PBXBuildFile; fileRef = B62991F8AEE7327BA8A5070F; }; - E7A5418175B23C794421441C = { isa = PBXBuildFile; fileRef = 013F753639A6350C8DC602AD; }; - 51F5844EAE455D51BDB17228 = { isa = PBXBuildFile; fileRef = 72524FE185FF48DC1F954341; }; - C99F35ABEC13F58C27C1D303 = { isa = PBXBuildFile; fileRef = BF5307F364AC9250D8625168; }; - 3D9B5EDBECAA680B0A067F5C = { isa = PBXBuildFile; fileRef = AA4823F2F2A78C43D7A039D0; }; - 724B03672FC7862B671969BC = { isa = PBXBuildFile; fileRef = 87A5A064CC3CD55BA5D7617D; }; - 8B31099030792C554BD51211 = { isa = PBXBuildFile; fileRef = 641638A0466CEC1BDEAFB476; }; - D04EEEC7EAE7C806E95ED41C = { isa = PBXBuildFile; fileRef = 7DB37383434F45D8A7B674C3; }; - 7EA440527972D6B7322EC307 = { isa = PBXBuildFile; fileRef = CB16B2438EDCC10C499645E6; }; - CB9FE1DA1AFE5FBA9FF06061 = { isa = PBXBuildFile; fileRef = BEB35C6173793C1CB7AB6311; }; - 26454A5DB5BAFD7901F17DA7 = { isa = PBXBuildFile; fileRef = BA58B49B820A47F6F55CDACB; }; - F41B46F970BA78762DCE67D1 = { isa = PBXBuildFile; fileRef = 930E58E13FC92BF70AC20EEF; }; - B7A8CF6F889840BED05C8C27 = { isa = PBXBuildFile; fileRef = 9113CDD122D2790E147A8CF5; }; - 3EBF23F390FC0227260CF7CB = { isa = PBXBuildFile; fileRef = EE56999A85AF18015C540183; }; - 1906FDEEDAE61C88A59BC271 = { isa = PBXBuildFile; fileRef = 189F69E0B926C73B654D6951; }; - F51142C2CF336FC4A4FAACC6 = { isa = PBXBuildFile; fileRef = AE9A7A0775FA806126A74E16; }; - 1021132FAC7870AC18C040DE = { isa = PBXBuildFile; fileRef = 4F5D1AA83981FBCD33CE234F; }; - 05C8FA821C64B69BFF8FAF2C = { isa = PBXBuildFile; fileRef = E6A7BFB0FCD17A9B133CDFA4; }; - 5E330E219B2D2944BCE95174 = { isa = PBXBuildFile; fileRef = FE6E3F911679B0D7547577A3; }; - 275FBC09BE58E708A73B88C1 = { isa = PBXBuildFile; fileRef = 8BCE60CBC91DBAAB089958A1; }; - 6DA99BA218FB45568258841C = { isa = PBXBuildFile; fileRef = 3F11593DC3A168A52FCC2DD9; }; - 32F1C95EDEE7722797B8CEE8 = { isa = PBXBuildFile; fileRef = FC2C82760E717788B5A6E691; }; - 029A0E8B44DC17211722677D = { isa = PBXBuildFile; fileRef = 42059626955C547DA6AD3196; }; - 4B4E17467BC41E2166549998 = { isa = PBXBuildFile; fileRef = 8F383A785B4876198C5B0194; }; - 9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; - 79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; - 88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; - 6BDBEFD97E643E5BB27637FF = { isa = PBXBuildFile; fileRef = 249959E338D7750E56A9F2F8; }; - BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; - 0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; - B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; - D4A05D7CA67B6F0527C9BD81 = { isa = PBXBuildFile; fileRef = 1DBF9DAAD0690CB2CA4E9960; }; - 0D7547577A31512EDCEDC42C = { isa = PBXBuildFile; fileRef = BA561E64C6400CFB1DE013F6; }; - E2FDC7D3E3DC4C1423FA0C5B = { isa = PBXBuildFile; fileRef = 061B492EABD6B1C995D581A8; }; - A46B0025A68136ED993E0D85 = { isa = PBXBuildFile; fileRef = 50159A5B7A552A6C1EB557F3; }; - B99678E919BF547A3A3F5D6E = { isa = PBXBuildFile; fileRef = CDA5FCC51F6C1E84D7DC3274; }; - 5B714CDD0082419BFED7D2D4 = { isa = PBXBuildFile; fileRef = B14735381ADB00741166E330; }; - 2DD498313DA488A5063C4C1B = { isa = PBXBuildFile; fileRef = 09AE0882D58BE1715219556A; }; - 5B33FFE120A47EF42CBC05E4 = { isa = PBXBuildFile; fileRef = 0EB41C0AB478EE02D8C851F9; }; - 552D45FB250C62F86CD02A57 = { isa = PBXBuildFile; fileRef = FBE07C5CC622A5D36BDAB9E1; }; - 0E8E9829E95E32163F45482D = { isa = PBXBuildFile; fileRef = B07C853EB60D8D8691BC1B4B; }; - 6801797B247CB3A6890C0AB0 = { isa = PBXBuildFile; fileRef = 5D32C8856093B33438AEB758; }; - B0B82AB2D9B0950F67B11BEA = { isa = PBXBuildFile; fileRef = 8758E6857070D7E5406FDE3F; }; - 379B4A89E5403B57A2009E76 = { isa = PBXBuildFile; fileRef = 8E8BE2F1C182E418BBA6903C; }; - 6ED121D4FEE575408B9612AB = { isa = PBXBuildFile; fileRef = 03B9D3D9042E85BDD691325E; }; - 9ADE436BC62FB84E297C1CA0 = { isa = PBXBuildFile; fileRef = 13C661B79E1E9508512A6B21; }; - 03D534E5B18011C3E03CDD40 = { isa = PBXBuildFile; fileRef = F2F68E50F42BD0F124E89E2C; }; - 06E2ED69E9FAC199D559F276 = { isa = PBXBuildFile; fileRef = 59C46E289F86C80D4341EAA3; }; - 9801CCC32F01818B39CFD88E = { isa = PBXBuildFile; fileRef = FA82460758BDCB2DCCE1EAAA; }; - FE553DDF4F83DABF13DF4A2B = { isa = PBXBuildFile; fileRef = CE06EEED7426AA45C27B629C; }; - 68DB48B0EC9E5E37C6B5281C = { isa = PBXBuildFile; fileRef = 1D74C9567283836ECC70E48B; }; - 96E9017FBE104E9EADC586B1 = { isa = PBXBuildFile; fileRef = 40216CE846A54CE706131A23; }; - BA6C6EF4C88D49C640DA7BF6 = { isa = PBXBuildFile; fileRef = E646726910F110DC34DD1662; }; - 0B124D9CE361014F815A5958 = { isa = PBXBuildFile; fileRef = 9AF9F1C0D766D4F894E4A7B0; }; - C701E3FCB168A3B4A31C4242 = { isa = PBXBuildFile; fileRef = A404CD721E2A0F0CAE9326C5; }; - 04F6D85CCF26A7F6DE589876 = { isa = PBXBuildFile; fileRef = 32B7C3609BDA01AA09740139; }; - 62912A2DA2F01212517938E7 = { isa = PBXBuildFile; fileRef = CEF7210E311274F1DFAB6882; }; - 36D770FCDAC86084A495B96E = { isa = PBXBuildFile; fileRef = 755C440534C0EB494572B3F3; }; - DA2A4714F1A6957A4F2B8D48 = { isa = PBXBuildFile; fileRef = EE855319AF344A05C92580C7; }; - CE9A64287FCEF00DD2BA6AEE = { isa = PBXBuildFile; fileRef = FCD02A40985242A8A6648311; }; - 2AC6F3BFAAA21E21076A9F8D = { isa = PBXBuildFile; fileRef = 76E2084D2148068F9138A816; }; - B8DD4DB0BD1A6B38BBF92413 = { isa = PBXBuildFile; fileRef = 8273A206FB309671284959DD; }; - 1C0B1362E81C8B073BF0DCEC = { isa = PBXBuildFile; fileRef = 644FD6155385BC3AA270FB5D; }; - 63BEC07A51CB8E516B38ECD4 = { isa = PBXBuildFile; fileRef = 4A97C8D2FF6454DDD3AF4BE5; }; - C8F81E843F446868FAD88197 = { isa = PBXBuildFile; fileRef = B507B4A8712A54D7A8C03223; }; - 50D91A2EC0ABF894E612D936 = { isa = PBXBuildFile; fileRef = 23252E4C97AEFAE0C5EEAA77; }; - 82568CF438EF4C950E4A42DF = { isa = PBXBuildFile; fileRef = 81B36E7C56DF1A777AA04F71; }; - B2E9D0C534DDE9F96921A054 = { isa = PBXBuildFile; fileRef = 0EC7DE81A516F4130AC59557; }; - C8D06AE9C68A675A87DC9C99 = { isa = PBXBuildFile; fileRef = 5715BC14D93D61D71206FCB2; }; - FE2999972FE3D6E251DA6653 = { isa = PBXBuildFile; fileRef = 95F21C2733BD5932372E4157; }; - 8B2193898D3465B5995EE98A = { isa = PBXBuildFile; fileRef = 8E78623B2D21CFE68DEC0483; }; - 4FB3EE200AEA14C7218D7034 = { isa = PBXBuildFile; fileRef = 4D60F7F748CF6702D1E45960; }; - 81E79D9217773BF0E39F7812 = { isa = PBXBuildFile; fileRef = EF06213027EA3F7C54EE0F18; }; - 2A360CDF2B5A46B282CEA2C4 = { isa = PBXBuildFile; fileRef = 60F21CB42270ACE2241544A8; }; - 01FD07AB480226E84D52F591 = { isa = PBXBuildFile; fileRef = B4435D42216365FA97651272; }; - D8B9941A1375579D6CE7C1C4 = { isa = PBXBuildFile; fileRef = 599F5C47BB9B5898E0E88CF3; }; - 0DE731ED3EC994B9227C2741 = { isa = PBXBuildFile; fileRef = 4BE2727CCD2CD7603402C8FE; }; - A124FE5709D9324B5BAFFE53 = { isa = PBXBuildFile; fileRef = A618FC3255ECE14EC9259E6B; }; - A84A5CA4654AE87192A6A096 = { isa = PBXBuildFile; fileRef = A59A5DCFCCAAEA79D03C2B27; }; - 55EDB4D9B702B469DB4655C3 = { isa = PBXBuildFile; fileRef = ADE5F12AA5AD969E2C7002B3; }; - 389351359BA78C682E1931A6 = { isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 144F56FCF3DF9EC922765901 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../src/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; - F6A490BA93AC3558E9A6FBB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../src/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; - CB9766F7A9C612B326D808CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../src/application/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; - 36A407F2BE4A625184B5CCFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../src/application/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4E74130693EE120D905818AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../src/application/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; - 21E1DBFAB3FB75875EA35280 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../src/application/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - EDF52AB382E80530E8FED9A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../src/application/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; - 415BD77DF4B2F4760D138735 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../src/application/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8422E662212FA2082644A942 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../src/application/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; - BA97FEDA576503A21D971F1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../src/application/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; - E03C84620DCB004172C09B28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../src/application/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; - 1AA8BE2D76E153874FB08197 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 05C5C546E12C6422D865D864 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 1F5A667524FB005D872340E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../src/audio/audio_file_formats/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; - 0877D5750D6F21C5231687CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1BBE03BB0D71FEEEA440682B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; - 7D85530D76756C33795ECCE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 013E8938EE1C6B4F63016B55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 93006D32B18174D9FE0A5E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 41070806F82EC9C6D1C67689 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; - 9349E14552FEA0371553E808 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 27356F5E93CEA4D472D83D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; - 2AD64F53E12B20011B7A0DB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8BD38C2507C0F8E28930A4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; - 59597FA0A88A08937801D198 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - AE7F7F0D959C2E3CF5989C88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; - 27C3C51DF2519B519B76E2EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnail.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7B34E897026857C84399A09C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; - CB32D4EE59D5CA9DB12F944D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3442FA257104DC3F43E7F870 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; - 203AC66FFB20EAD2E7A594BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - C9F1015CA457A61082398E34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - E00781B15E47C9CB9E94869D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7C06BD13BF7E0097EB0A8D08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - DA868174D4D2059AC1BE7E71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 25B1AC1A6767AAD9E9515A18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 7CF036906034FABB44D2108F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - DB5CAB7BC2973ABFF0867BCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - D5D2FD212300E7D49ED74823 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 87A18C425F53C2098B1D42FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 7AE5295A472723B26537FAEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 51287E236C749092458BA2DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../src/audio/audio_sources/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; - 4C3258A1978AF3D357D196C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../src/audio/audio_sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - FBB2EEF0E5EC5EB6F89E9066 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../src/audio/audio_sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; - AE9C08108699C71A289462B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../src/audio/audio_sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; - 74AD63909D3EE09D63256A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../src/audio/audio_sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 67A8F408B1EC63407C9241B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../src/audio/audio_sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; - 5D6E837F124C347B3C1CAE23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - E1EA83B7EF928DC88D069AEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../src/audio/audio_sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 1511366CAD437989DAA30CF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - EA630BFFF638BBBC8FDC0018 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - D86718CE7E5DEF2071AC3D17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76BB7F75A7F9930ED5A0CDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../src/audio/audio_sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 9A8053936C35A19B9E98623A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9CB1126A9FBFF1D6D6469AF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../src/audio/audio_sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - C63D6EC0555C13C1B79A6AAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../src/audio/audio_sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - E2A56C23BF2BB466BB273E3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - BE5DB55285441D501FED3C00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../src/audio/audio_sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 5403C2A4DEE7B9B3B34235F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0F70C4D118AC7625B4C42CD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../src/audio/audio_sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 3988438157D4B75177703F8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6AC857F51FD805D7BD3EF712 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 6841D6AC927D02113F3AEBD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../src/audio/devices/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - E668D9C7FF084E59405A2A9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../src/audio/devices/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; - C7DB1BB9AF7FE0A2AA38D767 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../src/audio/devices/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - 95CA8EE24AFBB1F2F29A5394 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../src/audio/devices/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; - EAFD034BB1721BFBF9A3795E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../src/audio/devices/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; - EFAFC937377A21E9AC0F9776 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../src/audio/devices/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; - 5DB9D903D24646B0C2356A5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../src/audio/dsp/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; - EBA6B46F7B3C11CA3744A4D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../src/audio/dsp/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; - A1D687AE613A8B61EB63923D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../src/audio/dsp/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 812620B53BE820D26A63B65D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../src/audio/dsp/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 11C1A96A35A2F03F8C34BD43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../src/audio/dsp/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; - E68EB4BC75216B5B56E3F937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../src/audio/dsp/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE2259D9768027C2C001EEAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../src/audio/dsp/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 2C55CE1674244DB199C3033F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../src/audio/dsp/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; - B457515938E7141D5E79B671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../src/audio/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0604C2E17F0E0DFEFDA19F8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../src/audio/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 891E0B1AD09C0EA44297E0F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../src/audio/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - EBACA038DBB50817BE80E8C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../src/audio/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; - C376B06C58C5D3C972583BBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../src/audio/midi/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; - 0731C60911E6985F51325484 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../src/audio/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; - 062F7ACF5282C5B2D4BF5EE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../src/audio/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; - DF3833AF6E38E55218FDF23F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../src/audio/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; - C627F9E9EC160055D65D81CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../src/audio/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; - 0D3A77572C7256CE4C115FD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../src/audio/midi/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; - A22A0F77C15B1E4A8F2EB42A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../src/audio/midi/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; - 78D29BB5C76CCF7C21EC0DAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../src/audio/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; - DD3886D45B5988B4DAC2D049 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../src/audio/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; - 01712FF0A160032FA1DAA8C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../src/audio/midi/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; - 899BD7E18BE1EF7CDF53784C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../src/audio/midi/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; - 7B88F6B8E3A10CEAD9B0EE88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper.mm"; path = "../../src/audio/plugin_client/AU/juce_AU_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 1101E8CB676FDEEF0A89D921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RTAS_DigiCode_Header.h"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode_Header.h"; sourceTree = "SOURCE_ROOT"; }; - F222E5825D83E711C9F1B789 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; - CEAA2B84462EF0B5026EAB0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode2.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode2.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9A3151864FB90A6A4BCCAE9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode3.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode3.cpp"; sourceTree = "SOURCE_ROOT"; }; - BCE37F0D994C0ADF2CCFF796 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; }; - F52ECCD6C02108A2D7F672F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_WinUtilities.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_WinUtilities.cpp"; sourceTree = "SOURCE_ROOT"; }; - 833C3F205F05BA4ADC883E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_Wrapper.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 69C4FF0DD888BA25477561C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../src/audio/plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 37E1FC756833849B8C7C1215 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper.mm"; path = "../../src/audio/plugin_client/VST/juce_VST_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 2741189DF800566462E24A14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterWindow.cpp"; path = "../../src/audio/plugin_client/Standalone/juce_StandaloneFilterWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - FAC43251D74E5140740BEF60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandaloneFilterWindow.h"; path = "../../src/audio/plugin_client/Standalone/juce_StandaloneFilterWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 2E96F55074F4EB74171EE6B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeCharacteristics.h"; path = "../../src/audio/plugin_client/juce_IncludeCharacteristics.h"; sourceTree = "SOURCE_ROOT"; }; - 13F64389F0E25731A98E92CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHeaders.h"; path = "../../src/audio/plugin_client/juce_PluginHeaders.h"; sourceTree = "SOURCE_ROOT"; }; - 7CDC2FA849B7ED73A2638A11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../src/audio/plugin_client/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; - D76BDCCF9E1A1F26A8F578F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 50FAF92038EBD0127900AAA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../src/audio/plugin_host/formats/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; - 2073E1A497363200233CD34E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - F800E47459B2FE9DEF56F312 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - B4291F2CEEC78CFEDEFC360E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../src/audio/plugin_host/formats/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; - FCBB1DC14311D099809B21F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 723EBD80931754F4DD77DD53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 2EBF36FAAF019B6F811D1C84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VSTPluginFormat.mm"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; - 1C8211DFB558D740EF4B173A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../src/audio/plugin_host/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 28534632DF76A1EA837BD0D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../src/audio/plugin_host/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - DA4820727D6DDC75561A262C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../src/audio/plugin_host/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - A6415104D1E3E5CE7031C0C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../src/audio/plugin_host/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; - E5BA7B8913271E935A1DA487 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../src/audio/plugin_host/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; - 3110B983ACE956D6A24F8C8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../src/audio/plugin_host/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; - A3FE51C7DD706F536273AB0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../src/audio/plugin_host/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; - B6E20AE45813C0CA9B1014DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../src/audio/plugin_host/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4AE3A448D79602BE793BB5AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../src/audio/plugin_host/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; - AF47BC3796A74CC15A192E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../src/audio/plugin_host/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3D170AC8FD8E403C54E08F9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../src/audio/plugin_host/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; - 9C5C0BCB2A298160025B15FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../src/audio/plugin_host/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 08C65C3EB60FE8BFA252E3EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../src/audio/plugin_host/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4CF107951746567DB63880A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../src/audio/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; - AB554593165FE8C8B40F4447 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../src/audio/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3F260C24341E58745AC5BE79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../src/audio/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; - BC2A50B0B01128E394E9DE9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../src/audio/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - EC0F8FAA7EACE0D275064D60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../src/audio/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; - D141C024A3F5A6748B0E9ED7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../src/audio/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; - 19C9509EC7DD00DA7443DEFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../src/audio/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; - ABDE16ABC1784B0FD3887A8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../src/audio/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; - 08EBC2152F45FB2B839FCCC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../src/audio/processors/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 350428D4D70AAB88B2B84790 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../src/audio/processors/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; - 096CF2243648F17E1BF5421B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../src/audio/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - CAD3312170E5DBE8AA8348BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../src/audio/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; - ED5966B95F865C586A3CE08F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../src/audio/synthesisers/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6C6C1C360138D9BD4B27588B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../src/audio/synthesisers/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; - 35668D8EEA19957C6C9AC83A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../src/audio/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E6C206F95245BCDE38FB2B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../src/audio/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; - 4F22276689685D839BD252EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../src/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9584B84F23A4251755D49213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../src/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; - 839BE8047CF2F8EBE43ED34F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../src/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; - EDF52FDF87ACD33FE933142C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../src/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; - F77C9170829579FABA5679AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../src/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; - 34C402EF9ADCAD34FB657D43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../src/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; - 7DA9AC75A4D9227C8FC4B2F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../src/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; - 2767E1D082874D301D5D5F43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../src/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; - 9289A1E6B141F24C57FF0927 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../src/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 70E5409425A76782B6188B31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../src/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB4A73064B0FC74ECCA19116 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../src/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; - C1913C90ED7BE51E823887CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../src/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; - 9BD379D2F7995BFE0B3E5369 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../src/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; - C8F0F54CA3D913E7B8D559CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../src/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; - D7612CE51ED4F9D3F960F922 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../src/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; - F95BC2FA7861CFF968D661ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../src/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; - 2F5FD1DEFAE549553A8BE3B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../src/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; - 989E03031D341649B4A296F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../src/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; - 1809284DD05B56309D7EA24F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../src/containers/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; - 69F58BF234EDF6328F624E0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../src/containers/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; - 5D27EE211D9BFF6A58C4DC42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../src/containers/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7CABDD863B47D8ADC900A4D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../src/containers/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; - 4DF9D333038A442870668D31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../src/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; - A81B4FC81A75E21E5B96E506 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../src/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; - D66C00E06B06EAD3B5257DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../src/core/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; - C8441B7B3E4CCD4A257B4BFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../src/core/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; - 92ACFFCCCD1C85A0F8C6F80F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../src/core/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; - 4555F03DBD059EEDECEF9F85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../src/core/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; - 63F44EC0485FCA050814967E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../src/core/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; - DF6CAC67C0F2D379BDA03062 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../src/core/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1159C6BB0D33EE8E1A96B083 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../src/core/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; - 8292AE37F99FCC1E5BF63A28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../src/core/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; - CFAECB6551F48A1695DEC243 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../src/core/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; - B4137E4612C1D161894D0D27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../src/core/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; - 0AD73B8EA0D60D9927B36624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../src/core/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; - F51969AF328D2C7D52D7436D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../src/core/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; - C25D6136DF9CE441D6EB4C42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../src/core/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; - CA66415F6EAA172B83755954 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../src/core/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; - 18B170E96511BBA1019C66F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../src/core/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 45D14EF360BDA1F5692E583D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../src/core/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; - 956A1C30D5FE98DBB154204D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../src/core/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; - 8D2DE1F3CB15D003C90042E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../src/core/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; - 872020C1EC3997ED744BF1BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../src/core/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; - CEF91E0C9CBB3EBFF9500FDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../src/core/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; - 297B664E9AB86DFE7DCAFF22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../src/core/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; - E3C548295935D26121D5D823 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../src/cryptography/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7A4B0E6FD686BCF0B8CC771E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../src/cryptography/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; - EAFD8FAF365DFB32DC42D0E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../src/cryptography/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6E4345FEEB1DC732A16134A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../src/cryptography/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; - E9E692847C14AD33CD5FB40B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../src/cryptography/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; - 22612DBDC6C689B605CC6B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../src/cryptography/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; - 7AE9331938549244E27A5D0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../src/cryptography/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; - 16335266AFB4D19F25410E1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../src/cryptography/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; - 4CBD301A08E9C3762F861FC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../src/cryptography/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02CD7BA1750DE36237369F78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../src/cryptography/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; - 31D985CB8646B78460E9D5A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../src/events/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; - 09F7685D1EFF472ECB1F5EF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../src/events/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; - 4EF8BD4BF46C4BCB39F96609 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../src/events/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; - 5EB7BD94A754E88D076D777A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../src/events/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; - 1617348BBF5D103619D76911 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../src/events/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; - 44DB44953945417F76199479 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../src/events/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; - D04B6E43A037F985434B2F5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../src/events/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; - B80F8CD026033ACCCE11A1A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../src/events/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5F454A6B5A82ECE2396C5716 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../src/events/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; - B2D08C8EEE3E22026533D2EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../src/events/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; - AE68ECB6E063BD8D4984C0B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../src/events/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4B935D7360C9F166C80A158D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../src/events/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; - 843A7B398E9411F0AF28D65D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../src/events/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 57DD8EEE88C0D366E0354478 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../src/events/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; - 80633D64E9EFA1433454669B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../src/events/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; - 9CF077D3ED7B7B56F351AAF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../src/events/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7A1219C6560BDBE2E170D2A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../src/events/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; - E594F70DC2F292FF1EF65CB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../src/events/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - BE17B7279B4BF40E51C12F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../src/events/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; - E2D07ED5E1A4A460E0DEF59C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../src/events/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2EBDE3FF4894D72C310C9F84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../src/events/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; - 1F2CFBF13ADCA05C0DC2D7D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../src/events/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; - C51E9973A6FAB635081B9FDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../src/events/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; - C818B558D6D5B62A80621281 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../src/events/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32C0312A5D246D41AAD98A11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../src/events/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; - D0D9267E200BD462361810F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../src/gui/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; - 17A21B31FD41D00A4088FADF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../src/gui/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; - E13F33E386E1A0D5FC546521 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../src/gui/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - A0D6308567AAA50D1163D9D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../src/gui/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; - 621B3A4B154182F69DDE2989 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../src/gui/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; - A1F58C1A972425C2B43DD1B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../src/gui/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; - 2FFF9AFE4BD9437CE096E52B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../src/gui/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 41C8C324F13ADA3423FC3B0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../src/gui/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; - 18EE6576A9ED098632CE5155 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../src/gui/components/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - EB182DC4124FEFFFC87D12C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../src/gui/components/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; - 8B1C747E63EEF036AD9AF3D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../src/gui/components/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; - ECA97019B42083AD879B5B97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../src/gui/components/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; - 1C3D15546065C1A9AA5AA0C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../src/gui/components/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2032A24364695450A5E6A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../src/gui/components/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; - BA415BD77DF4B2F4760D1387 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../src/gui/components/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B72C0FB8DDC0F1102DF42943 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../src/gui/components/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; - 6930E651AEE97FD47E185EC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../src/gui/components/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - 96FD3A02BA915E460520A0B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../src/gui/components/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; - E927E4A58A84B21AA6B38A44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../src/gui/components/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - F2212B7F42E26C3DD86800F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../src/gui/components/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; - 09AE2C7E2573204A7A35452B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../src/gui/components/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B394145555DCB9E0FAA5522C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../src/gui/components/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; - 9846D4523B3425BBB04107EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../src/gui/components/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - 455176F8EDBA7A9DCEAA1367 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../src/gui/components/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; - F750738F398054AB38250780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../src/gui/components/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - DFF08DC68372AEE17EAA9CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../src/gui/components/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; - A3CB18F915377AC3FFA2E5F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../src/gui/components/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - B28C2EBD0846A09DAEDDFF4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../src/gui/components/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 04F48B09426293224576DA9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../src/gui/components/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - DF6B4E787E39CD446ED2EEEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../src/gui/components/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - C992FDA4396430392CFAD150 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../src/gui/components/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - 346CC505FAFEE9451040108D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3384A91143018ED9346E4118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - ADC16C18C8237A7F8E35E37A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../src/gui/components/controls/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - D8EB3EA456D9FCC211CD1ED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../src/gui/components/controls/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; - 0D3FA24FF38399E0EDA80860 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../src/gui/components/controls/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CA3454A9B6F80A2F4735C37E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../src/gui/components/controls/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 7330A9643F50DE8BEACDBB61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../src/gui/components/controls/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; - C0CC0FA84A4F7AA76C1611CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../src/gui/components/controls/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; - 1BC6C010045A06BDB4C684F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../src/gui/components/controls/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3FFCAECECC0D469A010F7AF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../src/gui/components/controls/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; - 71B6CE03D6DB07BB293C8206 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../src/gui/components/controls/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1DB68310EA4D6180FF948AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../src/gui/components/controls/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; - 3CE16163A43A6E67428385EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../src/gui/components/controls/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; - E698677EEC8E88CAFF542764 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../src/gui/components/controls/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; - 6BB68B37C7B0BB4DA8326647 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../src/gui/components/controls/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1EA844F7CC5377A14B0FD21C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../src/gui/components/controls/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 76E073B2A3F59A3ACD20CC87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../src/gui/components/controls/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8BA30F0AFF5EA0E1A0203ACB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../src/gui/components/controls/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; - A4E66D702028A22D8157241C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../src/gui/components/controls/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB6BF5E15522D8A272032AE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../src/gui/components/controls/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; - 53EB02EEDF5E7971EAB9E795 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../src/gui/components/controls/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 82FEB35063C3559D2F46AA6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../src/gui/components/controls/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; - 37E48B8F8AD2BC448E5935C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../src/gui/components/controls/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - A77096E86054F70AC0A3B69E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../src/gui/components/controls/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 981BACFF7892B83828313D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../src/gui/components/controls/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; - D317D4B5BA40A5754EE56F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../src/gui/components/controls/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8400CA0D3C2AB7A60A7329FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../src/gui/components/controls/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; - BC209F6862D5923B8F9E3080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../src/gui/components/controls/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; - B0D261D42091AAD1560A0D63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../src/gui/components/controls/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; - B60FE8BFA252E3EF2D60B77A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 79ABAD7BB654030EF29B8B9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D3B56583D4F60069296DB959 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3A4ABC7E24F155A8CAF027B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; - B1DEB4E0BBFE7E2D052165BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - F9FEE6DAB2B2752AC13D7286 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 85F0A0454489E4AF1F80AC83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../src/gui/components/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; - 102BAE57AAA43A7685FCBD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../src/gui/components/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - F631A108CB5015BFA2E25E00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../src/gui/components/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; - 730CAA344708954DE271072C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 295793C7AA1A57DC4BBCBBC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../src/gui/components/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; - D54308F25AEE3110A166F2BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../src/gui/components/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3AF50EADB5B2C973E0C8EE9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../src/gui/components/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 9A9D8C524A070162517620E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CD6C610A843822A7FA53E9D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - CA1B41922D8094982F967DBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9E66775B2F13ACD0B751E69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../src/gui/components/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B689E250203DE38D6D4F39F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../src/gui/components/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 29DFAA512171B967D687A945 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0AB8288D92FDFA00F30FB8DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A418FC3BDDBF1CE9F2903490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0EAD906B617A1A17305CB9F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 949854EDE6B5B16CEFB6108F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - F39059E72B927A700010851B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../src/gui/components/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8A67B45A2BA1D19D1AC43315 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - ECDD0F8397F3EE4E7FA7ACCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../src/gui/components/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 912C419859C9C56BC96AA6FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../src/gui/components/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 717295136FD426125079F78C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../src/gui/components/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 5ABC6616473BA4791AA8101E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; - F61C34EE417006881D0869F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; - 29A79478AE8567250972ED43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../src/gui/components/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - FB080C47434A8FAB73B8F486 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../src/gui/components/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; - 7F5A271EAB78C7CF8B2341DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 92EDE6EA48F94DC5A0BCB24A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A00C6593BFBFA76043BC0C06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../src/gui/components/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02982EB6A81020D3D421AED3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../src/gui/components/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; - F1A33029252D29A6ADF171B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - 15C6FD019B274AA51B4E2D76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../src/gui/components/keyboard/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; - B1E8FF009812F29C2620E6BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../src/gui/components/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; - FAEEA3536AD17B2667A1BB94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../src/gui/components/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; - D64DD9F41E4598606855DFCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../src/gui/components/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; - 7356F5E93CEA4D472D83D8E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../src/gui/components/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; - 921B616E2229AEB6390D2B57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../src/gui/components/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; - FE1072B5FB77E8FEE1BEBDFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../src/gui/components/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; - 07191E1A9805FA6E6F253FF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2EC173A08676F6E592A7B347 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../src/gui/components/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; - 45E5EE9E0173683D721FABDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../src/gui/components/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2D3A362DD3833B9E70B10FD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../src/gui/components/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; - F8FCCCE06D31FEF697FCD80D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../src/gui/components/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; - 44CDA79090B115C3B62A2168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../src/gui/components/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; - A6AD7357F905309D1B461EB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../src/gui/components/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9242E8425497D889C764C66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../src/gui/components/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; - FF046140CCF1EDB0DFF80178 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../src/gui/components/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6A223FB5B4A9388C83D6FC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../src/gui/components/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; - A95F42C5CB0C2E5052B31568 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 600B2FDBBBE812784CB49A69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../src/gui/components/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A31221E2A50CCE9DF06B5F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB54AC3D311C44A1F3B463A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../src/gui/components/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 3D8B0E86C98E2EE49AE868C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 238965266F88730956D776DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../src/gui/components/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B116FEC4D544DB8E38CB571E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../src/gui/components/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 797C94BB7F42CBBAACCFFB87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../src/gui/components/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; - F1F65C9E7394E04E073A57A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../src/gui/components/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - F64E8284F142600B9F519B07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../src/gui/components/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; - 993C90B10202DA78FA31CC58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8C0FFF811E06D162050CAB14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../src/gui/components/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; - 079CFB5DEF6F2B71E2910A22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../src/gui/components/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; - D5F5282BE0F43A5E16824749 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../src/gui/components/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; - 143F36BCDE7A65EBA33900ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../src/gui/components/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 093E54DECB8191CA74D79176 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../src/gui/components/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; - F2C653BA4552E6838DFA4F87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../src/gui/components/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C42D9251031A81B5CF2C843B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../src/gui/components/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D41423657626ACA672A9DED9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../src/gui/components/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; - 811149E18993F029165D330D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../src/gui/components/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; - FD004BDDCEDB7E324983F70C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../src/gui/components/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7B991020107EC0D54965BCA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../src/gui/components/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; - B92ACF027E63D1C788DEC893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3C739F61EE232C75546D4DCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; - 218D7D73C086866E587FFD01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../src/gui/components/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB93D3C283731C0B25B7AAAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../src/gui/components/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 1DDE0A8E4C5857715D9B5FAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../src/gui/components/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 502B3625329816EA6330465F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../src/gui/components/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; - 6AACD2FD239E39F87B666C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../src/gui/components/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; - A563BC883D801CF5956DC4BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../src/gui/components/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; - 9E4B3BAB9BDB06B60D28DF48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../src/gui/components/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; - BCDD702ED33BADF3FC19384C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../src/gui/components/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; - 3D74B30C63465C32E26D8E33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../src/gui/components/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4993649A93B73052C8045EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../src/gui/components/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; - 31EE71EA61B4ED293481EB97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../src/gui/components/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - A08313B5F112579D130373BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../src/gui/components/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - E1CA0B04EDE60771B81B9700 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../src/gui/components/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 944BC51C440C167C5B2A23E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../src/gui/components/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 136109B3076DDA7B2E01CF90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../src/gui/components/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; - 067D84F9291770240D1AB5B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../src/gui/components/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 50C02B44D0CB18898F575B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../src/gui/components/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; - 441257DD380138C03568FCBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../src/gui/components/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 07CF9AF337779EB486AC92BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../src/gui/components/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; - 2886656DF7ACC9DDC888827F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../src/gui/components/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0C28F27F9D1CE6CD65185760 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../src/gui/components/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; - 89AA49DD2A63D80E90A56768 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../src/gui/components/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; - 82DFF1BD3665DC32672FCCE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../src/gui/components/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5B6CD1833A98F9844B7E3FF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../src/gui/components/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; - D39C0B853C3EBBBD11E7C71E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../src/gui/components/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 657546D70AB7B2709619E07A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../src/gui/components/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; - D31704DAB806B6AF3ED52DC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../src/gui/components/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 574EC603B2B1189687851319 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../src/gui/components/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; - 243EF1A31A779413BC2D5B98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../src/gui/components/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; - 72EFFDE39C7255D50F926944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../src/gui/components/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; - 36BB6DDF702EC9B3DAC851FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../src/gui/components/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; - A3B6342C6207D452F6AD985C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../src/gui/components/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; - 9DA988F1D7CE29E0DFED7EF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../src/gui/components/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - C1A3232DDB617A20D9C26526 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../src/gui/components/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; - 072D77C3834B1B3FB77F277B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../src/gui/components/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; - 749CA35420339A25BA4E500F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../src/gui/components/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 1C3FFBA02AE51EDD72A6250B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - B422688E380911F3C21E3F04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../src/gui/components/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - C45E7E6B6E45DEFBF80940DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C1F662CED371C843E4EE03B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../src/gui/components/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - ECCBF2452804ECB2D5B4BC50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C6B318D6930A05FF86AD97DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../src/gui/components/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - E2C948680009D1744CEDBC25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5B9E9460EAA932889DDC4873 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../src/gui/components/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 0984A4BA00D6AAFB463657F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../src/gui/components/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02685CE4575D6E9B8CCC7738 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../src/gui/components/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; - 3451124EC2809C9BB591DF93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - B568DEC2B352281BC63B33CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../src/gui/components/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 84311C1F5A8ACC8DF4D6FF34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3641ABC17D67038746897FA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../src/gui/components/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - E748C93240CDD61473B0107F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../src/gui/components/special/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; - DED871B1C7458B15DE7C9234 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 26E787FFC68224BF8EB5A458 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../src/gui/components/special/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 11F1658A055C45FE824FD2DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../src/gui/components/special/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4DFF179AFD87D34C7E23B1E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../src/gui/components/special/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4C3C3AFC3D97C1378B7D7435 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../src/gui/components/special/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../src/gui/components/special/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../src/gui/components/special/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; - CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../src/gui/components/special/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; - 4BF7A01BCE61A5068CA13D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../src/gui/components/special/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../src/gui/components/special/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../src/gui/components/special/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; - 3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../src/gui/components/special/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 127FC743FE67E6EEF2531BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../src/gui/components/special/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4387C6496C7079FB0032B99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../src/gui/components/special/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 1317F0BE5EC80371F744967B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../src/gui/components/special/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 826CC87E9E280F46B6D62B64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../src/gui/components/special/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A34C0E63D41CFF5E55FD1D9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../src/gui/components/special/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6BE989C709D2D1D017548447 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../src/gui/components/special/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; - 529CB909220344AD55944372 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../src/gui/components/special/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A9DB12F944D9DC336AD0A78B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../src/gui/components/special/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; - CC04F253CB70B20B774801A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../src/gui/components/special/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - D9847FECA6801E9A61007D50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../src/gui/components/special/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 740D1808DB934123F05A1598 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../src/gui/components/special/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A5AAF4475138358F33D4904A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../src/gui/components/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 72C4FDDDB8602591DD4F7B3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../src/gui/components/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 8AEF18EE9B12D4677F96B709 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../src/gui/components/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F54431CD3A672B1EB8335BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../src/gui/components/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; - 2FFDC7636EFC2D7F74590A31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../src/gui/components/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 12C66C90F3192AFFD6BCEDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../src/gui/components/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; - 929FEA5458430B7AE23BBB46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../src/gui/components/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - C286C779DD52C29F86E3DBE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../src/gui/components/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 090907E4FE95EE2B11C1A0E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../src/gui/components/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6E522DF13EC47755234A5D57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../src/gui/components/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 3FC6FC331B4E104D1DC223D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../src/gui/components/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; - 2E4A5F7128313C23AD0356F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../src/gui/components/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 207CDD87107EAC8ED17DD601 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../src/gui/components/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 87E57C8F3448D615271CD9F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../src/gui/components/windows/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7C06FF93D655B9987000ECA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../src/gui/components/windows/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; - D7772BC5E4E455AE2916A87D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2FC449D291A603E26E938F52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../src/gui/components/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 6C33842C52B61407CACCA858 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../src/gui/components/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6165F485E931EF9F69D2145F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../src/gui/components/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; - A24990B395323FBAC0BEFB5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../src/gui/components/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - C7C882D550E3B72FA5EFA88A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../src/gui/components/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; - EF18D0073BE50E572ADD9A1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../src/gui/graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F6F9E1FD31E1A6268CFD3F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../src/gui/graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; - D36EFC4421056277BA87387E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../src/gui/graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3AE0BD116486BCE37F0D994C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../src/gui/graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; - 41AF663E626B8F6D319B9966 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../src/gui/graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; - C913994AAA448C9F22ACF100 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../src/gui/graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; - 112017AA0A061CF080DBD504 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../src/gui/graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; - 3EC800323255128D69539BAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../src/gui/graphics/contexts/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; - BD52C1CCEAF6FEC311B9FDA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../src/gui/graphics/contexts/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; - B7251E779500BA77F5522CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../src/gui/graphics/contexts/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1F0DB4B2825AF638183B50D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../src/gui/graphics/contexts/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; - EF50EEDCAB08F842AB8DE6DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../src/gui/graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6320F9BAFA094B5C0C828C58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../src/gui/graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; - 2E03ADF975A126C1F2F7B667 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../src/gui/graphics/contexts/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; - 36268DD78D00323D391ECAAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../src/gui/graphics/contexts/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; - D6B4FED1F1D9FB82C6424438 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; - ED3ED8389001D55FBDCF1087 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5792CC17E9DFB966371CBEE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; - 835CC2A1E67E7B19E41F8FBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; - A7A8BE6B30C70701A10B5BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; - FF052647D2EFA985D05C8E83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../src/gui/graphics/contexts/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2B90FAFBC65FB79A5D74E816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../src/gui/graphics/contexts/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; - 504730C9B9F60192C2577979 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../src/gui/graphics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6A249ADEC5400011AA671D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../src/gui/graphics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; - 85B7BCACB40E02815844F71D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; - 00B5FB5ABF4F13EC5D28E34D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../src/gui/graphics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; - A54BC72C899A2AF82E1E37F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; - 849E645981CA10B8D5576462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../src/gui/graphics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; - 582DCC2F948F1DEA0D450B0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; - 17EBDF689C731DA257B243C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../src/gui/graphics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; - E0694CD7C814AA99E5A84799 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0FA9E378EBD7EE63EF72124F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../src/gui/graphics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 62967D33232C5A86D88084B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2FBD6F49349E7CC8FC2051EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../src/gui/graphics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; - C17613C202D8E1C366F21D3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1FA43B2E4244CD74B551DAD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../src/gui/graphics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; - 2BFC199D03DEEC329D6A7CB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../src/gui/graphics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32EA297812F1C88B42099501 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../src/gui/graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; - 85D4043F9E25047E07496DAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../src/gui/graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - CB649686575473223C859482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../src/gui/graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; - FD1FA4ABB4226372235643E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../src/gui/graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - 18DB9BD10F140F132A3279C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../src/gui/graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; - BA17B023595ECD8166A231D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../src/gui/graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6B4E90767D784246EC4E1944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../src/gui/graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; - 78068AA59A5DCFCCAAEA79D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../src/gui/graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0401EA0E883CCAAAC6960A27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../src/gui/graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; - 61D06B694603F608CDA0703B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../src/gui/graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8117D400F45F1DF157634824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../src/gui/graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; - 91CB423DBC5F3CBEDD9CF2EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../src/gui/graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4284BA7A26C7F6DEB00B4366 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../src/gui/graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; - AF66A9951377E2D04C54CADD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../src/gui/graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - 932024E0F2A2CC22B7657691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../src/gui/graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; - 2ED8CC539A9D9BE611F67A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../src/gui/graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5CD42FFF9F1A509D117BD0CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../src/gui/graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; - C18F342C087F69D141B3FAF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../src/gui/graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; - 4011751B9EFCA7B9345D7D7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../src/gui/graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; - 29BC53FEE9BC27F44534C909 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../src/gui/graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; - 795E2BD2D39A3A6E36C26CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../src/gui/graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; - 312F208B501E0D7764C6B613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../src/gui/graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; - ADB84942A96B6B9A0F5D7590 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../src/gui/graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; - 9D3F1BAB1D48DDECB9F35916 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../src/gui/graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; - C2700BB57B9EED7BFE975564 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../src/gui/graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; - 132E3C38B4F0C6229EDF7000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../src/gui/graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; - F8C44FF03700F6140950F373 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../src/gui/graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 1B170F70AF8AA0A39074F671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../src/gui/graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8B7D7435287A20CB2D8E3704 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../src/gui/graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; - 0F1C5770B363EF7DF64A876A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6619D27E74F623B1E8CE8F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - EAF0F2EAB230F7539B91A7FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0337723C9D607B82CF8AA682 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../src/gui/graphics/imaging/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; - 7904C2A3C52959748C46D54F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../src/gui/graphics/imaging/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; - D1BBA8F348C6DA2852A68221 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../src/gui/graphics/imaging/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; - 94D3EBE6E0D9AFE555226A88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; - 16CAB09D19F1A7379506310A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../src/gui/graphics/imaging/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; - 67F4F9E1F6B9B4D1C1A668E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 35A9146C03FC33B577817E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; - 6E4DF7338364956EF42C4493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - BC2326E1A85025E700B1DE3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../src/gui/graphics/imaging/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 3FD3FA96955DD648494E76A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../src/io/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; - 974C3A59CC78DB4302B3552A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../src/io/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; - 692A95B19D9C32094A1E07B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../src/io/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; - DC51AF61DC4B345E5E4153E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../src/io/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; - 058702E8697667AEA38254C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../src/io/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 090490A1C3B0002DFAD78C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../src/io/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 6FFB38088C11BAE68368A3E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../src/io/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4EEF0B0BB4C3D1956B04122B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../src/io/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 59B2FFF817679AEA84375E1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../src/io/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - 49BF2B02A6D7B4438FC24839 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../src/io/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; - 00B348FA35A7F691AEF84FBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../src/io/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; - D9B3C04F8EB4228DD59002E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../src/io/files/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; - 42DA88264F768BAACD0414A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../src/io/files/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; - 17C3AF03FF7AE88AE0C73311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../src/io/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 75D6F1C676E178DEA8B86849 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../src/io/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; - 4035C867821E9B5887AA25FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../src/io/files/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4D005659935C7DE99C2C01E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../src/io/files/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; - EFA58F646B69B227AEF14140 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../src/io/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7241B187AA9B0217838B6052 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../src/io/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; - 06B06C420341B005DFF951D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../src/io/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; - 286206E754AC14DEAF88FD43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../src/io/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; - AD7A1C2C82EE714EBDD52EFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../src/io/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; - 21215569A0DCB6ACADD32401 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../src/io/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; - D4211E697F43821CDBCE4F24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../src/io/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7D593A29CAB138BD9AE950BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../src/io/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - BE5DCD603F7E21A1F66CDF33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../src/io/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 304FD4FD5771F00C8EA46C10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../src/io/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; - AE363A1FE2F403F7CE2FDF7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../src/io/streams/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 770082A38CF6071E5CFA563D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../src/io/streams/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - A10A63E2098A85B5CA9265B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../src/io/streams/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8932FA0AA37E1E04CBA55B23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../src/io/streams/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - AC183DCFAF18C9CEB88EEB1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../src/io/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; - 3F60563DEC7941B88163A50E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../src/io/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB059F528EC362F86E4B4278 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../src/io/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 39C0783ED515AAA82F9CA37F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../src/io/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - BD4388D88F2F02195AC73AD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../src/io/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - B3F5E7A708350F72E7C77153 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../src/io/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - DFE9A08C4AC8E1809018B5F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../src/io/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - BBE79494A818EF83F52A4C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../src/io/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5F27172FD963C1A748AA625A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../src/io/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - AE5A7EC70F288E7EA682081D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../src/io/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6F7CA1B3AD09C76271FED3D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../src/io/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; - 7A039686F4F852E26936CA53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../src/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; - 161894D0D279595D88F470A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../src/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; - 868E43A4BB7015579789E4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../src/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8E0874D93125C2DC34255EDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../src/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; - 7C2A4084A267F57F2E27F3F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../src/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - D99C977ACCD09262F06F6624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../src/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; - A978BD4031CAE24FB0FE26E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../src/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; - 1A656E62C071C54D28343AC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../src/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; - 252632F3F97DF57C0781BEAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../src/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; - 8FB80383DF3BAD7227DF465A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../src/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; - FE76B46873DE20DFDC5A94BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../src/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; - 28C4C81039B42A399F5B7320 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../src/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; - 341631A7E86BF1C0E49093C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../src/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; - AD655AA04981173716022D8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../src/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; - F1D085B5F12E814BF1D5C395 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../src/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; - 58654C2630387C4A336A5BFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../src/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 524A70C9F23954F8F2A3F99B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../src/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; - E05812E3CC31875A202D6B30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../src/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 224C989BF83B6EA867814BFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../src/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; - 213F0A7BF38AF6AB34414A45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../src/native/common/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; - 21B2342B75097AB93CFF7E97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../src/native/common/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2C48BB1A286C6A63174E5798 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../src/native/common/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; - 7A51D8B81F390A4CABF25C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Audio.cpp"; path = "../../src/native/linux/juce_linux_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76DB94CC776536F5D05B9445 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../src/native/linux/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - AA698DD5A82F91CF84A29666 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../src/native/linux/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; - FABA493FEE07E6373DD8EB41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../src/native/linux/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 595EBA8A689DA899986314D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../src/native/linux/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - EACFC12E665283EB7926E9EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../src/native/linux/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - BAE5CE629DF9D286293E616F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../src/native/linux/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4C499CB25F043FE667BC5E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../src/native/linux/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4366712140FBEBEDBCBDCE9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../src/native/linux/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - E0A2C24581917DD090186333 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_NativeCode.cpp"; path = "../../src/native/linux/juce_linux_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - E61B485B10F8D4A3986953CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_linux_NativeIncludes.h"; path = "../../src/native/linux/juce_linux_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - 3F3D429025A92B6F0FB6F8EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../src/native/linux/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - 275F2210628D9E9968B1B258 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../src/native/linux/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5DEA687D261C59CBABB782E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../src/native/linux/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5593DEC14D551C38CCB50D70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../src/native/linux/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - B8E47498C7C6D5ECF41F0EAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../src/native/linux/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9DC2C10B16A645EEB82220D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../src/native/linux/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE5F18DF1DED7617C4A41FF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../src/native/mac/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2BCE9DDC8F0F54CA3D913E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../src/native/mac/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; - 5249EFBE3B22E6FC1A7B6D42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../src/native/mac/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; - A257B76FCE9D594EAD41414C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../src/native/mac/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - 8280AA34B23B4D366711A9E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../src/native/mac/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; - C9561A66310DAD5EEB4A9462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../src/native/mac/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; - B62991F8AEE7327BA8A5070F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../src/native/mac/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; - 013F753639A6350C8DC602AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../src/native/mac/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; - 6B46AB1931E43DAFB278D23D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../src/native/mac/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 72524FE185FF48DC1F954341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../src/native/mac/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF5307F364AC9250D8625168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../src/native/mac/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; - AA4823F2F2A78C43D7A039D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../src/native/mac/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; - 87A5A064CC3CD55BA5D7617D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../src/native/mac/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; - 641638A0466CEC1BDEAFB476 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../src/native/mac/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; - 7DB37383434F45D8A7B674C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../src/native/mac/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; - CB16B2438EDCC10C499645E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../src/native/mac/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; - BEB35C6173793C1CB7AB6311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../src/native/mac/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; - BA58B49B820A47F6F55CDACB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../src/native/mac/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; - 930E58E13FC92BF70AC20EEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NativeCode.mm"; path = "../../src/native/mac/juce_mac_NativeCode.mm"; sourceTree = "SOURCE_ROOT"; }; - 2F1812B26076D9CC1495D452 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_NativeIncludes.h"; path = "../../src/native/mac/juce_mac_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - 9113CDD122D2790E147A8CF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../src/native/mac/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; - EE56999A85AF18015C540183 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../src/native/mac/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - 189F69E0B926C73B654D6951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../src/native/mac/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; - B9E16F4636FF8C0A1FC8BEFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../src/native/mac/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; - AE9A7A0775FA806126A74E16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../src/native/mac/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - 4F5D1AA83981FBCD33CE234F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../src/native/mac/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - E6A7BFB0FCD17A9B133CDFA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../src/native/mac/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; - FE6E3F911679B0D7547577A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../src/native/mac/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; - 8BCE60CBC91DBAAB089958A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../src/native/mac/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; - 3F11593DC3A168A52FCC2DD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../src/native/mac/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - FC2C82760E717788B5A6E691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../src/native/mac/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - AB0F3F5A622CBB251F64945A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../src/native/mac/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; - AD495FA1991295C722B46843 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../src/native/mac/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 42059626955C547DA6AD3196 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../src/native/windows/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F383A785B4876198C5B0194 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../src/native/windows/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; - F3B50EE3939E9F16D13C3C7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../src/native/windows/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_AutoLinkLibraries.h"; path = "../../src/native/windows/juce_win32_AutoLinkLibraries.h"; sourceTree = "SOURCE_ROOT"; }; - 3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../src/native/windows/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - B296F736C0CD6AC15BE6424B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../src/native/windows/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; - 7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - 249959E338D7750E56A9F2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../src/native/windows/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../src/native/windows/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; - DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../src/native/windows/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7527A5E8F4F39581159D3E5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../src/native/windows/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1DBF9DAAD0690CB2CA4E9960 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../src/native/windows/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9B203E963EB1AB566061AC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../src/native/windows/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; - BA561E64C6400CFB1DE013F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../src/native/windows/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 061B492EABD6B1C995D581A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../src/native/windows/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - 50159A5B7A552A6C1EB557F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_NativeCode.cpp"; path = "../../src/native/windows/juce_win32_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - E7625D7A06CBC11F40A56A70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_NativeIncludes.h"; path = "../../src/native/windows/juce_win32_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - CDA5FCC51F6C1E84D7DC3274 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../src/native/windows/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - B14735381ADB00741166E330 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../src/native/windows/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 09AE0882D58BE1715219556A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../src/native/windows/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0EB41C0AB478EE02D8C851F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../src/native/windows/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; - FBE07C5CC622A5D36BDAB9E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../src/native/windows/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - B07C853EB60D8D8691BC1B4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../src/native/windows/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5D32C8856093B33438AEB758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../src/native/windows/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8758E6857070D7E5406FDE3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../src/native/windows/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8E8BE2F1C182E418BBA6903C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../src/native/windows/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - 03B9D3D9042E85BDD691325E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../src/native/android/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - 13C661B79E1E9508512A6B21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../src/native/android/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - F2F68E50F42BD0F124E89E2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../src/native/android/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 59C46E289F86C80D4341EAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../src/native/android/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - FA82460758BDCB2DCCE1EAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../src/native/android/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE06EEED7426AA45C27B629C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../src/native/android/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - F439E6C4B2D2AF19645252C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../src/native/android/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 1D74C9567283836ECC70E48B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../src/native/android/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 40216CE846A54CE706131A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../src/native/android/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - E646726910F110DC34DD1662 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../src/native/android/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9AF9F1C0D766D4F894E4A7B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_NativeCode.cpp"; path = "../../src/native/android/juce_android_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - 902C32F471DA6C435E80372B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_NativeIncludes.h"; path = "../../src/native/android/juce_android_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - A404CD721E2A0F0CAE9326C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../src/native/android/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32B7C3609BDA01AA09740139 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../src/native/android/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CEF7210E311274F1DFAB6882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../src/native/android/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 755C440534C0EB494572B3F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../src/native/android/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE855319AF344A05C92580C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../src/native/android/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - FCD02A40985242A8A6648311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../src/native/android/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76E2084D2148068F9138A816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../src/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; - 33F16EE4F38C9B76E7FAEF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../src/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - 72F5ED2E8B945988C37EA9CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../src/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; - 663746215E9BA6C761172B85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../src/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; - C3FD9D93626F80A45F9B6DDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../src/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; - 4007410FACA2F865FD8EF769 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../src/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; - 8273A206FB309671284959DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../src/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF888BC540B64D5C61E46A34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../src/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; - 644FD6155385BC3AA270FB5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../src/text/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB092FB152F43900272F8E43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../src/text/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; - 4A97C8D2FF6454DDD3AF4BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../src/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2AA21CDC91EA122266EBD780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../src/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; - 35DA3E75DDB03BB35794289B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../src/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; - B507B4A8712A54D7A8C03223 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../src/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1EE2A763E06AF4951024950F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../src/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; - 23252E4C97AEFAE0C5EEAA77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../src/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4FED84C92ADC4B2C41A4275 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../src/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; - 81B36E7C56DF1A777AA04F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../src/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; - E5458BE2F33DBBF5AF834BB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../src/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; - 0EC7DE81A516F4130AC59557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../src/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - C972C24A7D2FC817362E1FD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../src/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; - 5715BC14D93D61D71206FCB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../src/text/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - B4575FEE10C67D45C9532540 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../src/text/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 95F21C2733BD5932372E4157 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../src/text/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4EF8C44FF03700F6140950F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../src/text/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; - 40282E23D43D86D122CA5C54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../src/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; - EC240B4379FB70C8A8AC2855 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../src/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; - 5508D42FCF7A1C8A8CD78BF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../src/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; - 90E4999A78655A238AF42BC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../src/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; - 8E78623B2D21CFE68DEC0483 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../src/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E622C38E4BD511B6ABBF7AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../src/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; - 6734838B47EF0D9ACEE571CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../src/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; - F00BDEF5CE2B281CBE2E89A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../src/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; - C5F20B02D7843F3C5ABEDFD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../src/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; - 1FD1C9A3D2DB64C825FDAC8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../src/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; - 4D60F7F748CF6702D1E45960 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../src/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; - EFE26D4E1E2B92828DBA3A99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../src/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; - EF06213027EA3F7C54EE0F18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../src/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - C25E5F90524645D684C674CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../src/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; - 60F21CB42270ACE2241544A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../src/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; - ED84C92ADC4B2C41A4275F92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../src/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; - 3268C8DBAB23CF503BF30935 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../src/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; - B4435D42216365FA97651272 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../src/utilities/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE216F2485CD5EFEA91554F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../src/utilities/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; - 599F5C47BB9B5898E0E88CF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../src/utilities/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9620E4769876FC01ECE885D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../src/utilities/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 4BE2727CCD2CD7603402C8FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../src/utilities/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7FDACEA80794451691A12703 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../src/utilities/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; - A618FC3255ECE14EC9259E6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../src/utilities/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; - A2D6317BEEC77A62E8F834AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../src/utilities/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; - 7F1AC20BE8A18CA6BB7403EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../src/utilities/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; - FA833EFA9E93C7DBE6624676 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../src/utilities/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; - EECE464606AE845BFC4B941B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../src/utilities/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; - A59A5DCFCCAAEA79D03C2B27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../src/utilities/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3C9E6597968358B57374502C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../src/utilities/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; - ADE5F12AA5AD969E2C7002B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../src/utilities/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; - 75700D13513346310CEAC30D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../src/utilities/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; - AAC585C4648559DD713F28FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../src/utilities/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; - 2FD5C998952BE08F8ED3F262 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce.h; path = ../../juce.h; sourceTree = "SOURCE_ROOT"; }; - 01778F26212AECCBF2452804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Config.h"; path = "../../juce_Config.h"; sourceTree = "SOURCE_ROOT"; }; - D443FD24B52106986FC8A531 = { isa = PBXGroup; children = ( - 144F56FCF3DF9EC922765901, - F6A490BA93AC3558E9A6FBB0, - CB9766F7A9C612B326D808CB, - 36A407F2BE4A625184B5CCFD, - 4E74130693EE120D905818AC, - 21E1DBFAB3FB75875EA35280, - EDF52AB382E80530E8FED9A0, - 415BD77DF4B2F4760D138735, - 8422E662212FA2082644A942, - BA97FEDA576503A21D971F1E, - E03C84620DCB004172C09B28 ); name = application; sourceTree = ""; }; - 2038F3EDCC94040C77D7620C = { isa = PBXGroup; children = ( - 1AA8BE2D76E153874FB08197, - 05C5C546E12C6422D865D864, - 1F5A667524FB005D872340E1, - 0877D5750D6F21C5231687CA, - 1BBE03BB0D71FEEEA440682B, - 7D85530D76756C33795ECCE9, - 013E8938EE1C6B4F63016B55, - 93006D32B18174D9FE0A5E9E, - 41070806F82EC9C6D1C67689, - 9349E14552FEA0371553E808, - 27356F5E93CEA4D472D83D8E, - 2AD64F53E12B20011B7A0DB7, - 8BD38C2507C0F8E28930A4F8, - 59597FA0A88A08937801D198, - AE7F7F0D959C2E3CF5989C88, - 27C3C51DF2519B519B76E2EE, - 7B34E897026857C84399A09C, - CB32D4EE59D5CA9DB12F944D, - 3442FA257104DC3F43E7F870, - 203AC66FFB20EAD2E7A594BD, - C9F1015CA457A61082398E34, - E00781B15E47C9CB9E94869D, - 7C06BD13BF7E0097EB0A8D08, - DA868174D4D2059AC1BE7E71, - 25B1AC1A6767AAD9E9515A18, - 7CF036906034FABB44D2108F, - DB5CAB7BC2973ABFF0867BCB, - D5D2FD212300E7D49ED74823, - 87A18C425F53C2098B1D42FE ); name = "audio_file_formats"; sourceTree = ""; }; - A319A40925DF075E2C31C2FC = { isa = PBXGroup; children = ( - 7AE5295A472723B26537FAEC, - 51287E236C749092458BA2DD, - 4C3258A1978AF3D357D196C6, - FBB2EEF0E5EC5EB6F89E9066, - AE9C08108699C71A289462B7, - 74AD63909D3EE09D63256A76, - 67A8F408B1EC63407C9241B2, - 5D6E837F124C347B3C1CAE23, - E1EA83B7EF928DC88D069AEC, - 1511366CAD437989DAA30CF2, - EA630BFFF638BBBC8FDC0018, - D86718CE7E5DEF2071AC3D17, - 76BB7F75A7F9930ED5A0CDB6, - 9A8053936C35A19B9E98623A, - 9CB1126A9FBFF1D6D6469AF9, - C63D6EC0555C13C1B79A6AAD, - E2A56C23BF2BB466BB273E3E, - BE5DB55285441D501FED3C00, - 5403C2A4DEE7B9B3B34235F8, - 0F70C4D118AC7625B4C42CD4, - 3988438157D4B75177703F8A, - 6AC857F51FD805D7BD3EF712 ); name = "audio_sources"; sourceTree = ""; }; - BF8F3D00CE4E97468E8BBC55 = { isa = PBXGroup; children = ( - 6841D6AC927D02113F3AEBD4, - E668D9C7FF084E59405A2A9E, - C7DB1BB9AF7FE0A2AA38D767, - 95CA8EE24AFBB1F2F29A5394, - EAFD034BB1721BFBF9A3795E, - EFAFC937377A21E9AC0F9776 ); name = devices; sourceTree = ""; }; - 53C441C8EEF2860715CC6599 = { isa = PBXGroup; children = ( - 5DB9D903D24646B0C2356A5D, - EBA6B46F7B3C11CA3744A4D0, - A1D687AE613A8B61EB63923D, - 812620B53BE820D26A63B65D, - 11C1A96A35A2F03F8C34BD43, - E68EB4BC75216B5B56E3F937, - EE2259D9768027C2C001EEAD, - 2C55CE1674244DB199C3033F ); name = dsp; sourceTree = ""; }; - 99B60B012D5CCF0BD861011D = { isa = PBXGroup; children = ( - B457515938E7141D5E79B671, - 0604C2E17F0E0DFEFDA19F8D, - 891E0B1AD09C0EA44297E0F2, - EBACA038DBB50817BE80E8C5, - C376B06C58C5D3C972583BBB, - 0731C60911E6985F51325484, - 062F7ACF5282C5B2D4BF5EE1, - DF3833AF6E38E55218FDF23F, - C627F9E9EC160055D65D81CB, - 0D3A77572C7256CE4C115FD7, - A22A0F77C15B1E4A8F2EB42A, - 78D29BB5C76CCF7C21EC0DAF, - DD3886D45B5988B4DAC2D049, - 01712FF0A160032FA1DAA8C2, - 899BD7E18BE1EF7CDF53784C ); name = midi; sourceTree = ""; }; - 844109733F09B5915AF75797 = { isa = PBXGroup; children = ( - 7B88F6B8E3A10CEAD9B0EE88 ); name = AU; sourceTree = ""; }; - FAA6189E385BD13EFEFE2E08 = { isa = PBXGroup; children = ( - 1101E8CB676FDEEF0A89D921, - F222E5825D83E711C9F1B789, - CEAA2B84462EF0B5026EAB0A, - 9A3151864FB90A6A4BCCAE9B, - BCE37F0D994C0ADF2CCFF796, - F52ECCD6C02108A2D7F672F5, - 833C3F205F05BA4ADC883E53 ); name = RTAS; sourceTree = ""; }; - EBF4EE8E84A562DE2EBAE6BB = { isa = PBXGroup; children = ( - 69C4FF0DD888BA25477561C8, - 37E1FC756833849B8C7C1215 ); name = VST; sourceTree = ""; }; - 0F0D49D13522C94A0F37D4AB = { isa = PBXGroup; children = ( - 2741189DF800566462E24A14, - FAC43251D74E5140740BEF60 ); name = Standalone; sourceTree = ""; }; - 2805C9C796CD7D77C2D662BF = { isa = PBXGroup; children = ( - 844109733F09B5915AF75797, - FAA6189E385BD13EFEFE2E08, - EBF4EE8E84A562DE2EBAE6BB, - 0F0D49D13522C94A0F37D4AB, - 2E96F55074F4EB74171EE6B6, - 13F64389F0E25731A98E92CD, - 7CDC2FA849B7ED73A2638A11 ); name = "plugin_client"; sourceTree = ""; }; - B1F82C796B56FCD97D211D8E = { isa = PBXGroup; children = ( - D76BDCCF9E1A1F26A8F578F0, - 50FAF92038EBD0127900AAA1, - 2073E1A497363200233CD34E, - F800E47459B2FE9DEF56F312, - B4291F2CEEC78CFEDEFC360E, - FCBB1DC14311D099809B21F7, - 723EBD80931754F4DD77DD53, - 2EBF36FAAF019B6F811D1C84 ); name = formats; sourceTree = ""; }; - 7AA82894558E047D7D5111E1 = { isa = PBXGroup; children = ( - B1F82C796B56FCD97D211D8E, - 1C8211DFB558D740EF4B173A, - 28534632DF76A1EA837BD0D7, - DA4820727D6DDC75561A262C, - A6415104D1E3E5CE7031C0C1, - E5BA7B8913271E935A1DA487, - 3110B983ACE956D6A24F8C8C, - A3FE51C7DD706F536273AB0E, - B6E20AE45813C0CA9B1014DD, - 4AE3A448D79602BE793BB5AA, - AF47BC3796A74CC15A192E8B, - 3D170AC8FD8E403C54E08F9D, - 9C5C0BCB2A298160025B15FC, - 08C65C3EB60FE8BFA252E3EF ); name = "plugin_host"; sourceTree = ""; }; - 231431F8B23F01DC6ECD4214 = { isa = PBXGroup; children = ( - 4CF107951746567DB63880A3, - AB554593165FE8C8B40F4447, - 3F260C24341E58745AC5BE79, - BC2A50B0B01128E394E9DE9C, - EC0F8FAA7EACE0D275064D60, - D141C024A3F5A6748B0E9ED7, - 19C9509EC7DD00DA7443DEFC, - ABDE16ABC1784B0FD3887A8F, - 08EBC2152F45FB2B839FCCC1, - 350428D4D70AAB88B2B84790, - 096CF2243648F17E1BF5421B, - CAD3312170E5DBE8AA8348BA ); name = processors; sourceTree = ""; }; - DC641C77950A335A20FD4532 = { isa = PBXGroup; children = ( - ED5966B95F865C586A3CE08F, - 6C6C1C360138D9BD4B27588B, - 35668D8EEA19957C6C9AC83A, - 9E6C206F95245BCDE38FB2B5 ); name = synthesisers; sourceTree = ""; }; - F2B0E44A08E127FD31184241 = { isa = PBXGroup; children = ( - 2038F3EDCC94040C77D7620C, - A319A40925DF075E2C31C2FC, - BF8F3D00CE4E97468E8BBC55, - 53C441C8EEF2860715CC6599, - 99B60B012D5CCF0BD861011D, - 2805C9C796CD7D77C2D662BF, - 7AA82894558E047D7D5111E1, - 231431F8B23F01DC6ECD4214, - DC641C77950A335A20FD4532 ); name = audio; sourceTree = ""; }; - 1CC2889DB696E12FC34E3F50 = { isa = PBXGroup; children = ( - 4F22276689685D839BD252EA, - 9584B84F23A4251755D49213, - 839BE8047CF2F8EBE43ED34F, - EDF52FDF87ACD33FE933142C, - F77C9170829579FABA5679AD, - 34C402EF9ADCAD34FB657D43, - 7DA9AC75A4D9227C8FC4B2F7, - 2767E1D082874D301D5D5F43, - 9289A1E6B141F24C57FF0927, - 70E5409425A76782B6188B31, - BB4A73064B0FC74ECCA19116, - C1913C90ED7BE51E823887CD, - 9BD379D2F7995BFE0B3E5369, - C8F0F54CA3D913E7B8D559CF, - D7612CE51ED4F9D3F960F922, - F95BC2FA7861CFF968D661ED, - 2F5FD1DEFAE549553A8BE3B1, - 989E03031D341649B4A296F5, - 1809284DD05B56309D7EA24F, - 69F58BF234EDF6328F624E0A, - 5D27EE211D9BFF6A58C4DC42, - 7CABDD863B47D8ADC900A4D8, - 4DF9D333038A442870668D31, - A81B4FC81A75E21E5B96E506 ); name = containers; sourceTree = ""; }; - 1AF37A533ABDD889670F9349 = { isa = PBXGroup; children = ( - D66C00E06B06EAD3B5257DD6, - C8441B7B3E4CCD4A257B4BFE, - 92ACFFCCCD1C85A0F8C6F80F, - 4555F03DBD059EEDECEF9F85, - 63F44EC0485FCA050814967E, - DF6CAC67C0F2D379BDA03062, - 1159C6BB0D33EE8E1A96B083, - 8292AE37F99FCC1E5BF63A28, - CFAECB6551F48A1695DEC243, - B4137E4612C1D161894D0D27, - 0AD73B8EA0D60D9927B36624, - F51969AF328D2C7D52D7436D, - C25D6136DF9CE441D6EB4C42, - CA66415F6EAA172B83755954, - 18B170E96511BBA1019C66F8, - 45D14EF360BDA1F5692E583D, - 956A1C30D5FE98DBB154204D, - 8D2DE1F3CB15D003C90042E7, - 872020C1EC3997ED744BF1BD, - CEF91E0C9CBB3EBFF9500FDA, - 297B664E9AB86DFE7DCAFF22 ); name = core; sourceTree = ""; }; - 2B74AFA66B37B748487152F4 = { isa = PBXGroup; children = ( - E3C548295935D26121D5D823, - 7A4B0E6FD686BCF0B8CC771E, - EAFD8FAF365DFB32DC42D0E7, - 6E4345FEEB1DC732A16134A4, - E9E692847C14AD33CD5FB40B, - 22612DBDC6C689B605CC6B48, - 7AE9331938549244E27A5D0E, - 16335266AFB4D19F25410E1D, - 4CBD301A08E9C3762F861FC3, - 02CD7BA1750DE36237369F78 ); name = cryptography; sourceTree = ""; }; - 89F308FD85F378E278C98884 = { isa = PBXGroup; children = ( - 31D985CB8646B78460E9D5A7, - 09F7685D1EFF472ECB1F5EF1, - 4EF8BD4BF46C4BCB39F96609, - 5EB7BD94A754E88D076D777A, - 1617348BBF5D103619D76911, - 44DB44953945417F76199479, - D04B6E43A037F985434B2F5A, - B80F8CD026033ACCCE11A1A4, - 5F454A6B5A82ECE2396C5716, - B2D08C8EEE3E22026533D2EA, - AE68ECB6E063BD8D4984C0B3, - 4B935D7360C9F166C80A158D, - 843A7B398E9411F0AF28D65D, - 57DD8EEE88C0D366E0354478, - 80633D64E9EFA1433454669B, - 9CF077D3ED7B7B56F351AAF6, - 7A1219C6560BDBE2E170D2A9, - E594F70DC2F292FF1EF65CB6, - BE17B7279B4BF40E51C12F47, - E2D07ED5E1A4A460E0DEF59C, - 2EBDE3FF4894D72C310C9F84, - 1F2CFBF13ADCA05C0DC2D7D4, - C51E9973A6FAB635081B9FDC, - C818B558D6D5B62A80621281, - 32C0312A5D246D41AAD98A11 ); name = events; sourceTree = ""; }; - 2DB55F83F4310F0C4E4E03AA = { isa = PBXGroup; children = ( - 18EE6576A9ED098632CE5155, - EB182DC4124FEFFFC87D12C4, - 8B1C747E63EEF036AD9AF3D8, - ECA97019B42083AD879B5B97, - 1C3D15546065C1A9AA5AA0C6, - B2032A24364695450A5E6A76, - BA415BD77DF4B2F4760D1387, - B72C0FB8DDC0F1102DF42943, - 6930E651AEE97FD47E185EC9, - 96FD3A02BA915E460520A0B7, - E927E4A58A84B21AA6B38A44, - F2212B7F42E26C3DD86800F2, - 09AE2C7E2573204A7A35452B, - B394145555DCB9E0FAA5522C, - 9846D4523B3425BBB04107EE, - 455176F8EDBA7A9DCEAA1367, - F750738F398054AB38250780, - DFF08DC68372AEE17EAA9CC7 ); name = buttons; sourceTree = ""; }; - 17B11D96CDB313ED60D8CFE0 = { isa = PBXGroup; children = ( - A3CB18F915377AC3FFA2E5F4, - B28C2EBD0846A09DAEDDFF4E, - 04F48B09426293224576DA9A, - DF6B4E787E39CD446ED2EEEE, - C992FDA4396430392CFAD150, - 346CC505FAFEE9451040108D, - 3384A91143018ED9346E4118 ); name = "code_editor"; sourceTree = ""; }; - BCB2FFE7C2A4084A267F57F2 = { isa = PBXGroup; children = ( - ADC16C18C8237A7F8E35E37A, - D8EB3EA456D9FCC211CD1ED5, - 0D3FA24FF38399E0EDA80860, - CA3454A9B6F80A2F4735C37E, - 7330A9643F50DE8BEACDBB61, - C0CC0FA84A4F7AA76C1611CB, - 1BC6C010045A06BDB4C684F6, - 3FFCAECECC0D469A010F7AF1, - 71B6CE03D6DB07BB293C8206, - 1DB68310EA4D6180FF948AA0, - 3CE16163A43A6E67428385EE, - E698677EEC8E88CAFF542764, - 6BB68B37C7B0BB4DA8326647, - 1EA844F7CC5377A14B0FD21C, - 76E073B2A3F59A3ACD20CC87, - 8BA30F0AFF5EA0E1A0203ACB, - A4E66D702028A22D8157241C, - CB6BF5E15522D8A272032AE9, - 53EB02EEDF5E7971EAB9E795, - 82FEB35063C3559D2F46AA6F, - 37E48B8F8AD2BC448E5935C7, - A77096E86054F70AC0A3B69E, - 981BACFF7892B83828313D8E, - D317D4B5BA40A5754EE56F47, - 8400CA0D3C2AB7A60A7329FB, - BC209F6862D5923B8F9E3080, - B0D261D42091AAD1560A0D63 ); name = controls; sourceTree = ""; }; - 2FE3729520998304E4B05FBA = { isa = PBXGroup; children = ( - B60FE8BFA252E3EF2D60B77A, - 79ABAD7BB654030EF29B8B9C, - D3B56583D4F60069296DB959, - 3A4ABC7E24F155A8CAF027B3, - B1DEB4E0BBFE7E2D052165BD, - F9FEE6DAB2B2752AC13D7286, - 85F0A0454489E4AF1F80AC83, - 102BAE57AAA43A7685FCBD9A, - F631A108CB5015BFA2E25E00, - 730CAA344708954DE271072C, - 295793C7AA1A57DC4BBCBBC4, - D54308F25AEE3110A166F2BE, - 3AF50EADB5B2C973E0C8EE9F, - 9A9D8C524A070162517620E5, - CD6C610A843822A7FA53E9D7, - CA1B41922D8094982F967DBD, - E9E66775B2F13ACD0B751E69, - B689E250203DE38D6D4F39F9, - 29DFAA512171B967D687A945, - 0AB8288D92FDFA00F30FB8DE, - A418FC3BDDBF1CE9F2903490, - 0EAD906B617A1A17305CB9F4, - 949854EDE6B5B16CEFB6108F, - F39059E72B927A700010851B, - 8A67B45A2BA1D19D1AC43315, - ECDD0F8397F3EE4E7FA7ACCC ); name = filebrowser; sourceTree = ""; }; - 558A664D5D1ECEC607F4775D = { isa = PBXGroup; children = ( - 912C419859C9C56BC96AA6FB, - 717295136FD426125079F78C, - 5ABC6616473BA4791AA8101E, - F61C34EE417006881D0869F4, - 29A79478AE8567250972ED43, - FB080C47434A8FAB73B8F486, - 7F5A271EAB78C7CF8B2341DE, - 92EDE6EA48F94DC5A0BCB24A, - A00C6593BFBFA76043BC0C06, - 02982EB6A81020D3D421AED3, - F1A33029252D29A6ADF171B0, - 15C6FD019B274AA51B4E2D76, - B1E8FF009812F29C2620E6BB, - FAEEA3536AD17B2667A1BB94, - D64DD9F41E4598606855DFCF, - 7356F5E93CEA4D472D83D8E5 ); name = keyboard; sourceTree = ""; }; - D75AAB3AB61247E962C00692 = { isa = PBXGroup; children = ( - 921B616E2229AEB6390D2B57, - FE1072B5FB77E8FEE1BEBDFE, - 07191E1A9805FA6E6F253FF6, - 2EC173A08676F6E592A7B347, - 45E5EE9E0173683D721FABDA, - 2D3A362DD3833B9E70B10FD3, - F8FCCCE06D31FEF697FCD80D, - 44CDA79090B115C3B62A2168, - A6AD7357F905309D1B461EB7, - E9242E8425497D889C764C66, - FF046140CCF1EDB0DFF80178, - B6A223FB5B4A9388C83D6FC7, - A95F42C5CB0C2E5052B31568, - 600B2FDBBBE812784CB49A69, - A31221E2A50CCE9DF06B5F4B, - CB54AC3D311C44A1F3B463A5, - 3D8B0E86C98E2EE49AE868C8, - 238965266F88730956D776DB, - B116FEC4D544DB8E38CB571E, - 797C94BB7F42CBBAACCFFB87, - F1F65C9E7394E04E073A57A4, - F64E8284F142600B9F519B07, - 993C90B10202DA78FA31CC58, - 8C0FFF811E06D162050CAB14, - 079CFB5DEF6F2B71E2910A22, - D5F5282BE0F43A5E16824749, - 143F36BCDE7A65EBA33900ED, - 093E54DECB8191CA74D79176, - F2C653BA4552E6838DFA4F87, - C42D9251031A81B5CF2C843B, - D41423657626ACA672A9DED9, - 811149E18993F029165D330D ); name = layout; sourceTree = ""; }; - EAE72EDE682D52DF77747660 = { isa = PBXGroup; children = ( - FD004BDDCEDB7E324983F70C, - 7B991020107EC0D54965BCA2, - B92ACF027E63D1C788DEC893, - 3C739F61EE232C75546D4DCF ); name = lookandfeel; sourceTree = ""; }; - 870DE7235866DA3B81B683B8 = { isa = PBXGroup; children = ( - 218D7D73C086866E587FFD01, - BB93D3C283731C0B25B7AAAE, - 1DDE0A8E4C5857715D9B5FAE, - 502B3625329816EA6330465F, - 6AACD2FD239E39F87B666C6F, - A563BC883D801CF5956DC4BC ); name = menus; sourceTree = ""; }; - 4F37E36BA5E052B3BD4B87AD = { isa = PBXGroup; children = ( - 9E4B3BAB9BDB06B60D28DF48, - BCDD702ED33BADF3FC19384C, - 3D74B30C63465C32E26D8E33, - D4993649A93B73052C8045EF, - 31EE71EA61B4ED293481EB97, - A08313B5F112579D130373BF, - E1CA0B04EDE60771B81B9700, - 944BC51C440C167C5B2A23E3, - 136109B3076DDA7B2E01CF90, - 067D84F9291770240D1AB5B4, - 50C02B44D0CB18898F575B1E, - 441257DD380138C03568FCBD, - 07CF9AF337779EB486AC92BF, - 2886656DF7ACC9DDC888827F, - 0C28F27F9D1CE6CD65185760, - 89AA49DD2A63D80E90A56768 ); name = mouse; sourceTree = ""; }; - 362862B72D7FF7997C44CECF = { isa = PBXGroup; children = ( - 82DFF1BD3665DC32672FCCE8, - 5B6CD1833A98F9844B7E3FF4, - D39C0B853C3EBBBD11E7C71E, - 657546D70AB7B2709619E07A, - D31704DAB806B6AF3ED52DC7, - 574EC603B2B1189687851319, - 243EF1A31A779413BC2D5B98, - 72EFFDE39C7255D50F926944, - 36BB6DDF702EC9B3DAC851FF, - A3B6342C6207D452F6AD985C, - 9DA988F1D7CE29E0DFED7EF0, - C1A3232DDB617A20D9C26526, - 072D77C3834B1B3FB77F277B, - 749CA35420339A25BA4E500F ); name = positioning; sourceTree = ""; }; - 0F03F34FC3542EF0CF8B31E6 = { isa = PBXGroup; children = ( - 1C3FFBA02AE51EDD72A6250B, - B422688E380911F3C21E3F04, - C45E7E6B6E45DEFBF80940DD, - C1F662CED371C843E4EE03B2, - ECCBF2452804ECB2D5B4BC50, - C6B318D6930A05FF86AD97DA, - E2C948680009D1744CEDBC25, - 5B9E9460EAA932889DDC4873, - 0984A4BA00D6AAFB463657F4, - 02685CE4575D6E9B8CCC7738, - 3451124EC2809C9BB591DF93, - B568DEC2B352281BC63B33CD, - 84311C1F5A8ACC8DF4D6FF34, - 3641ABC17D67038746897FA7 ); name = properties; sourceTree = ""; }; - 5C03BF1C4CF3DEE1E0D6A3A1 = { isa = PBXGroup; children = ( - E748C93240CDD61473B0107F, - DED871B1C7458B15DE7C9234, - 26E787FFC68224BF8EB5A458, - 11F1658A055C45FE824FD2DB, - 4DFF179AFD87D34C7E23B1E5, - 4C3C3AFC3D97C1378B7D7435, - C25DFA2F2B673EB0146412BB, - 0A20E7E561633610A76A34AB, - CD9F817B7EF0DA080668A3A8, - 4BF7A01BCE61A5068CA13D8F, - 9C1D5CDA61FB51F657DA8B22, - 7DB8CFB77EA690ACF54C63B4, - 3C8C1AAF32DFECB89EB83271, - 127FC743FE67E6EEF2531BD5, - 4387C6496C7079FB0032B99D, - 1317F0BE5EC80371F744967B, - 826CC87E9E280F46B6D62B64, - A34C0E63D41CFF5E55FD1D9E, - 6BE989C709D2D1D017548447, - 529CB909220344AD55944372, - A9DB12F944D9DC336AD0A78B, - CC04F253CB70B20B774801A9, - D9847FECA6801E9A61007D50, - 740D1808DB934123F05A1598 ); name = special; sourceTree = ""; }; - 48D41BA310DED74E900A5AB0 = { isa = PBXGroup; children = ( - A5AAF4475138358F33D4904A, - 72C4FDDDB8602591DD4F7B3B, - 8AEF18EE9B12D4677F96B709, - 8F54431CD3A672B1EB8335BE, - 2FFDC7636EFC2D7F74590A31, - 12C66C90F3192AFFD6BCEDB6, - 929FEA5458430B7AE23BBB46, - C286C779DD52C29F86E3DBE9, - 090907E4FE95EE2B11C1A0E1, - 6E522DF13EC47755234A5D57, - 3FC6FC331B4E104D1DC223D6, - 2E4A5F7128313C23AD0356F7, - 207CDD87107EAC8ED17DD601, - 87E57C8F3448D615271CD9F6, - 7C06FF93D655B9987000ECA9, - D7772BC5E4E455AE2916A87D, - 2FC449D291A603E26E938F52, - 6C33842C52B61407CACCA858, - 6165F485E931EF9F69D2145F, - A24990B395323FBAC0BEFB5A, - C7C882D550E3B72FA5EFA88A ); name = windows; sourceTree = ""; }; - 92D807F41C69EA70B3D78B08 = { isa = PBXGroup; children = ( - D0D9267E200BD462361810F7, - 17A21B31FD41D00A4088FADF, - E13F33E386E1A0D5FC546521, - A0D6308567AAA50D1163D9D3, - 621B3A4B154182F69DDE2989, - A1F58C1A972425C2B43DD1B3, - 2FFF9AFE4BD9437CE096E52B, - 41C8C324F13ADA3423FC3B0F, - 2DB55F83F4310F0C4E4E03AA, - 17B11D96CDB313ED60D8CFE0, - BCB2FFE7C2A4084A267F57F2, - 2FE3729520998304E4B05FBA, - 558A664D5D1ECEC607F4775D, - D75AAB3AB61247E962C00692, - EAE72EDE682D52DF77747660, - 870DE7235866DA3B81B683B8, - 4F37E36BA5E052B3BD4B87AD, - 362862B72D7FF7997C44CECF, - 0F03F34FC3542EF0CF8B31E6, - 5C03BF1C4CF3DEE1E0D6A3A1, - 48D41BA310DED74E900A5AB0 ); name = components; sourceTree = ""; }; - 4FB94A8F4982BFC449BCDF15 = { isa = PBXGroup; children = ( - EF18D0073BE50E572ADD9A1C, - 8F6F9E1FD31E1A6268CFD3F9, - D36EFC4421056277BA87387E, - 3AE0BD116486BCE37F0D994C, - 41AF663E626B8F6D319B9966, - C913994AAA448C9F22ACF100, - 112017AA0A061CF080DBD504 ); name = colour; sourceTree = ""; }; - 5C291A35207CB6C58F653E05 = { isa = PBXGroup; children = ( - 3EC800323255128D69539BAE, - BD52C1CCEAF6FEC311B9FDA1, - B7251E779500BA77F5522CC7, - 1F0DB4B2825AF638183B50D6, - EF50EEDCAB08F842AB8DE6DA, - 6320F9BAFA094B5C0C828C58, - 2E03ADF975A126C1F2F7B667, - 36268DD78D00323D391ECAAB, - D6B4FED1F1D9FB82C6424438, - ED3ED8389001D55FBDCF1087, - 5792CC17E9DFB966371CBEE1, - 835CC2A1E67E7B19E41F8FBD, - A7A8BE6B30C70701A10B5BD5, - FF052647D2EFA985D05C8E83, - 2B90FAFBC65FB79A5D74E816 ); name = contexts; sourceTree = ""; }; - 097AEBBD16544F0BEEE32245 = { isa = PBXGroup; children = ( - 504730C9B9F60192C2577979, - B6A249ADEC5400011AA671D9, - 85B7BCACB40E02815844F71D, - 00B5FB5ABF4F13EC5D28E34D, - A54BC72C899A2AF82E1E37F8, - 849E645981CA10B8D5576462, - 582DCC2F948F1DEA0D450B0D, - 17EBDF689C731DA257B243C9, - E0694CD7C814AA99E5A84799, - 0FA9E378EBD7EE63EF72124F, - 62967D33232C5A86D88084B4, - 2FBD6F49349E7CC8FC2051EA, - C17613C202D8E1C366F21D3C, - 1FA43B2E4244CD74B551DAD6, - 2BFC199D03DEEC329D6A7CB1 ); name = drawables; sourceTree = ""; }; - 6D6492A7E3B70A5E76AFB49B = { isa = PBXGroup; children = ( - 32EA297812F1C88B42099501, - 85D4043F9E25047E07496DAC, - CB649686575473223C859482, - FD1FA4ABB4226372235643E4, - 18DB9BD10F140F132A3279C3 ); name = effects; sourceTree = ""; }; - 58FE42C578BFFD1F8F545B39 = { isa = PBXGroup; children = ( - BA17B023595ECD8166A231D1, - 6B4E90767D784246EC4E1944, - 78068AA59A5DCFCCAAEA79D0, - 0401EA0E883CCAAAC6960A27, - 61D06B694603F608CDA0703B, - 8117D400F45F1DF157634824, - 91CB423DBC5F3CBEDD9CF2EF, - 4284BA7A26C7F6DEB00B4366, - AF66A9951377E2D04C54CADD, - 932024E0F2A2CC22B7657691 ); name = fonts; sourceTree = ""; }; - BF4679D9201C5AAE6751536B = { isa = PBXGroup; children = ( - 2ED8CC539A9D9BE611F67A9A, - 5CD42FFF9F1A509D117BD0CB, - C18F342C087F69D141B3FAF5, - 4011751B9EFCA7B9345D7D7C, - 29BC53FEE9BC27F44534C909, - 795E2BD2D39A3A6E36C26CBF, - 312F208B501E0D7764C6B613, - ADB84942A96B6B9A0F5D7590, - 9D3F1BAB1D48DDECB9F35916, - C2700BB57B9EED7BFE975564, - 132E3C38B4F0C6229EDF7000, - F8C44FF03700F6140950F373, - 1B170F70AF8AA0A39074F671, - 8B7D7435287A20CB2D8E3704 ); name = geometry; sourceTree = ""; }; - D71FD838B3FD1536FCA839A4 = { isa = PBXGroup; children = ( - 0F1C5770B363EF7DF64A876A, - 6619D27E74F623B1E8CE8F71, - EAF0F2EAB230F7539B91A7FB ); name = "image_file_formats"; sourceTree = ""; }; - 36A6F90D0C87EA1D8FBE9EC0 = { isa = PBXGroup; children = ( - D71FD838B3FD1536FCA839A4, - 0337723C9D607B82CF8AA682, - 7904C2A3C52959748C46D54F, - D1BBA8F348C6DA2852A68221, - 94D3EBE6E0D9AFE555226A88, - 16CAB09D19F1A7379506310A, - 67F4F9E1F6B9B4D1C1A668E5, - 35A9146C03FC33B577817E9E, - 6E4DF7338364956EF42C4493, - BC2326E1A85025E700B1DE3D ); name = imaging; sourceTree = ""; }; - 1BC496671A99D62A223BB364 = { isa = PBXGroup; children = ( - 4FB94A8F4982BFC449BCDF15, - 5C291A35207CB6C58F653E05, - 097AEBBD16544F0BEEE32245, - 6D6492A7E3B70A5E76AFB49B, - 58FE42C578BFFD1F8F545B39, - BF4679D9201C5AAE6751536B, - 36A6F90D0C87EA1D8FBE9EC0 ); name = graphics; sourceTree = ""; }; - A11081920ACF526B1320CA42 = { isa = PBXGroup; children = ( - 92D807F41C69EA70B3D78B08, - 1BC496671A99D62A223BB364 ); name = gui; sourceTree = ""; }; - 3C4DE044AE46D5AE2388C827 = { isa = PBXGroup; children = ( - 3FD3FA96955DD648494E76A4, - 974C3A59CC78DB4302B3552A, - 692A95B19D9C32094A1E07B9, - DC51AF61DC4B345E5E4153E3, - 058702E8697667AEA38254C1, - 090490A1C3B0002DFAD78C7B, - 6FFB38088C11BAE68368A3E7, - 4EEF0B0BB4C3D1956B04122B, - 59B2FFF817679AEA84375E1B, - 49BF2B02A6D7B4438FC24839, - 00B348FA35A7F691AEF84FBA, - D9B3C04F8EB4228DD59002E7, - 42DA88264F768BAACD0414A3, - 17C3AF03FF7AE88AE0C73311, - 75D6F1C676E178DEA8B86849, - 4035C867821E9B5887AA25FB, - 4D005659935C7DE99C2C01E2 ); name = files; sourceTree = ""; }; - 13FBF71BD76A08C8971C6351 = { isa = PBXGroup; children = ( - EFA58F646B69B227AEF14140, - 7241B187AA9B0217838B6052, - 06B06C420341B005DFF951D2, - 286206E754AC14DEAF88FD43, - AD7A1C2C82EE714EBDD52EFC, - 21215569A0DCB6ACADD32401 ); name = network; sourceTree = ""; }; - 177636E4EEEBBB139F934897 = { isa = PBXGroup; children = ( - D4211E697F43821CDBCE4F24, - 7D593A29CAB138BD9AE950BA, - BE5DCD603F7E21A1F66CDF33, - 304FD4FD5771F00C8EA46C10, - AE363A1FE2F403F7CE2FDF7F, - 770082A38CF6071E5CFA563D, - A10A63E2098A85B5CA9265B1, - 8932FA0AA37E1E04CBA55B23, - AC183DCFAF18C9CEB88EEB1E, - 3F60563DEC7941B88163A50E, - BB059F528EC362F86E4B4278, - 39C0783ED515AAA82F9CA37F, - BD4388D88F2F02195AC73AD1, - B3F5E7A708350F72E7C77153, - DFE9A08C4AC8E1809018B5F4, - BBE79494A818EF83F52A4C7B, - 5F27172FD963C1A748AA625A, - AE5A7EC70F288E7EA682081D, - 6F7CA1B3AD09C76271FED3D6 ); name = streams; sourceTree = ""; }; - 0C54591C1E8594B59F4701FE = { isa = PBXGroup; children = ( - 3C4DE044AE46D5AE2388C827, - 13FBF71BD76A08C8971C6351, - 177636E4EEEBBB139F934897 ); name = io; sourceTree = ""; }; - F5A63AD86C7C0A9A2C33D74D = { isa = PBXGroup; children = ( - 7A039686F4F852E26936CA53, - 161894D0D279595D88F470A6, - 868E43A4BB7015579789E4F8, - 8E0874D93125C2DC34255EDB, - 7C2A4084A267F57F2E27F3F7, - D99C977ACCD09262F06F6624, - A978BD4031CAE24FB0FE26E1, - 1A656E62C071C54D28343AC2 ); name = maths; sourceTree = ""; }; - 9518033FC989E104DDB02E8A = { isa = PBXGroup; children = ( - 252632F3F97DF57C0781BEAD, - 8FB80383DF3BAD7227DF465A, - FE76B46873DE20DFDC5A94BE, - 28C4C81039B42A399F5B7320, - 341631A7E86BF1C0E49093C6, - AD655AA04981173716022D8D, - F1D085B5F12E814BF1D5C395, - 58654C2630387C4A336A5BFB, - 524A70C9F23954F8F2A3F99B, - E05812E3CC31875A202D6B30, - 224C989BF83B6EA867814BFF ); name = memory; sourceTree = ""; }; - DDB94A7300C3D1F2E9E51C47 = { isa = PBXGroup; children = ( - 213F0A7BF38AF6AB34414A45, - 21B2342B75097AB93CFF7E97, - 2C48BB1A286C6A63174E5798 ); name = common; sourceTree = ""; }; - 1004A23965A4DB0FCC441ED3 = { isa = PBXGroup; children = ( - 7A51D8B81F390A4CABF25C73, - 76DB94CC776536F5D05B9445, - AA698DD5A82F91CF84A29666, - FABA493FEE07E6373DD8EB41, - 595EBA8A689DA899986314D8, - EACFC12E665283EB7926E9EC, - BAE5CE629DF9D286293E616F, - D4C499CB25F043FE667BC5E1, - 4366712140FBEBEDBCBDCE9B, - E0A2C24581917DD090186333, - E61B485B10F8D4A3986953CD, - 3F3D429025A92B6F0FB6F8EF, - 275F2210628D9E9968B1B258, - 5DEA687D261C59CBABB782E9, - 5593DEC14D551C38CCB50D70, - B8E47498C7C6D5ECF41F0EAB, - 9DC2C10B16A645EEB82220D8 ); name = linux; sourceTree = ""; }; - 13513EE40AD6BAB30E26C88B = { isa = PBXGroup; children = ( - EE5F18DF1DED7617C4A41FF3, - B2BCE9DDC8F0F54CA3D913E7, - 5249EFBE3B22E6FC1A7B6D42, - A257B76FCE9D594EAD41414C, - 8280AA34B23B4D366711A9E7, - C9561A66310DAD5EEB4A9462, - B62991F8AEE7327BA8A5070F, - 013F753639A6350C8DC602AD, - 6B46AB1931E43DAFB278D23D, - 72524FE185FF48DC1F954341, - BF5307F364AC9250D8625168, - AA4823F2F2A78C43D7A039D0, - 87A5A064CC3CD55BA5D7617D, - 641638A0466CEC1BDEAFB476, - 7DB37383434F45D8A7B674C3, - CB16B2438EDCC10C499645E6, - BEB35C6173793C1CB7AB6311, - BA58B49B820A47F6F55CDACB, - 930E58E13FC92BF70AC20EEF, - 2F1812B26076D9CC1495D452, - 9113CDD122D2790E147A8CF5, - EE56999A85AF18015C540183, - 189F69E0B926C73B654D6951, - B9E16F4636FF8C0A1FC8BEFB, - AE9A7A0775FA806126A74E16, - 4F5D1AA83981FBCD33CE234F, - E6A7BFB0FCD17A9B133CDFA4, - FE6E3F911679B0D7547577A3, - 8BCE60CBC91DBAAB089958A1, - 3F11593DC3A168A52FCC2DD9, - FC2C82760E717788B5A6E691, - AB0F3F5A622CBB251F64945A, - AD495FA1991295C722B46843 ); name = mac; sourceTree = ""; }; - 64DE2D4534D79E74C40A0DEE = { isa = PBXGroup; children = ( - 42059626955C547DA6AD3196, - 8F383A785B4876198C5B0194, - F3B50EE3939E9F16D13C3C7C, - 9C4D1018ECC0BA07346453EF, - 3A37CD82212075940421CE4F, - B296F736C0CD6AC15BE6424B, - 7F3EF672D07ECE3E13AAF267, - 249959E338D7750E56A9F2F8, - 58B70C726D186B4E770300BC, - DCD09B6EF4A4A109DE01F152, - 7527A5E8F4F39581159D3E5B, - 1DBF9DAAD0690CB2CA4E9960, - E9B203E963EB1AB566061AC1, - BA561E64C6400CFB1DE013F6, - 061B492EABD6B1C995D581A8, - 50159A5B7A552A6C1EB557F3, - E7625D7A06CBC11F40A56A70, - CDA5FCC51F6C1E84D7DC3274, - B14735381ADB00741166E330, - 09AE0882D58BE1715219556A, - 0EB41C0AB478EE02D8C851F9, - FBE07C5CC622A5D36BDAB9E1, - B07C853EB60D8D8691BC1B4B, - 5D32C8856093B33438AEB758, - 8758E6857070D7E5406FDE3F, - 8E8BE2F1C182E418BBA6903C ); name = windows; sourceTree = ""; }; - FBE56423C0482E49EF317C85 = { isa = PBXGroup; children = ( - 03B9D3D9042E85BDD691325E, - 13C661B79E1E9508512A6B21, - F2F68E50F42BD0F124E89E2C, - 59C46E289F86C80D4341EAA3, - FA82460758BDCB2DCCE1EAAA, - CE06EEED7426AA45C27B629C, - F439E6C4B2D2AF19645252C0, - 1D74C9567283836ECC70E48B, - 40216CE846A54CE706131A23, - E646726910F110DC34DD1662, - 9AF9F1C0D766D4F894E4A7B0, - 902C32F471DA6C435E80372B, - A404CD721E2A0F0CAE9326C5, - 32B7C3609BDA01AA09740139, - CEF7210E311274F1DFAB6882, - 755C440534C0EB494572B3F3, - EE855319AF344A05C92580C7, - FCD02A40985242A8A6648311 ); name = android; sourceTree = ""; }; - B3E58752D519C56B78A95ACE = { isa = PBXGroup; children = ( - DDB94A7300C3D1F2E9E51C47, - 1004A23965A4DB0FCC441ED3, - 13513EE40AD6BAB30E26C88B, - 64DE2D4534D79E74C40A0DEE, - FBE56423C0482E49EF317C85 ); name = native; sourceTree = ""; }; - C6B52BCD0CB1B809D6DE555A = { isa = PBXGroup; children = ( - 76E2084D2148068F9138A816, - 33F16EE4F38C9B76E7FAEF78, - 72F5ED2E8B945988C37EA9CF, - 663746215E9BA6C761172B85, - C3FD9D93626F80A45F9B6DDE, - 4007410FACA2F865FD8EF769, - 8273A206FB309671284959DD, - BF888BC540B64D5C61E46A34, - 644FD6155385BC3AA270FB5D, - CB092FB152F43900272F8E43, - 4A97C8D2FF6454DDD3AF4BE5, - 2AA21CDC91EA122266EBD780, - 35DA3E75DDB03BB35794289B, - B507B4A8712A54D7A8C03223, - 1EE2A763E06AF4951024950F, - 23252E4C97AEFAE0C5EEAA77, - D4FED84C92ADC4B2C41A4275, - 81B36E7C56DF1A777AA04F71, - E5458BE2F33DBBF5AF834BB6, - 0EC7DE81A516F4130AC59557, - C972C24A7D2FC817362E1FD7, - 5715BC14D93D61D71206FCB2, - B4575FEE10C67D45C9532540, - 95F21C2733BD5932372E4157, - 4EF8C44FF03700F6140950F3 ); name = text; sourceTree = ""; }; - 723AC5B999F1EC8F4A101AAF = { isa = PBXGroup; children = ( - 40282E23D43D86D122CA5C54, - EC240B4379FB70C8A8AC2855, - 5508D42FCF7A1C8A8CD78BF0, - 90E4999A78655A238AF42BC0, - 8E78623B2D21CFE68DEC0483, - 9E622C38E4BD511B6ABBF7AA, - 6734838B47EF0D9ACEE571CD, - F00BDEF5CE2B281CBE2E89A2, - C5F20B02D7843F3C5ABEDFD4, - 1FD1C9A3D2DB64C825FDAC8B, - 4D60F7F748CF6702D1E45960, - EFE26D4E1E2B92828DBA3A99, - EF06213027EA3F7C54EE0F18, - C25E5F90524645D684C674CB, - 60F21CB42270ACE2241544A8, - ED84C92ADC4B2C41A4275F92, - 3268C8DBAB23CF503BF30935 ); name = threads; sourceTree = ""; }; - 281D6856FAC3B07634AD1C32 = { isa = PBXGroup; children = ( - B4435D42216365FA97651272, - CE216F2485CD5EFEA91554F5, - 599F5C47BB9B5898E0E88CF3, - 9620E4769876FC01ECE885D1, - 4BE2727CCD2CD7603402C8FE, - 7FDACEA80794451691A12703, - A618FC3255ECE14EC9259E6B, - A2D6317BEEC77A62E8F834AF, - 7F1AC20BE8A18CA6BB7403EC, - FA833EFA9E93C7DBE6624676, - EECE464606AE845BFC4B941B, - A59A5DCFCCAAEA79D03C2B27, - 3C9E6597968358B57374502C, - ADE5F12AA5AD969E2C7002B3, - 75700D13513346310CEAC30D, - AAC585C4648559DD713F28FE ); name = utilities; sourceTree = ""; }; - 992526B83B6AA618A4FAECEB = { isa = PBXGroup; children = ( - D443FD24B52106986FC8A531, - F2B0E44A08E127FD31184241, - 1CC2889DB696E12FC34E3F50, - 1AF37A533ABDD889670F9349, - 2B74AFA66B37B748487152F4, - 89F308FD85F378E278C98884, - A11081920ACF526B1320CA42, - 0C54591C1E8594B59F4701FE, - F5A63AD86C7C0A9A2C33D74D, - 9518033FC989E104DDB02E8A, - B3E58752D519C56B78A95ACE, - C6B52BCD0CB1B809D6DE555A, - 723AC5B999F1EC8F4A101AAF, - 281D6856FAC3B07634AD1C32, - 2FD5C998952BE08F8ED3F262, - 01778F26212AECCBF2452804 ); name = Juce; sourceTree = ""; }; - 1076A9F8D71BFFF9E9975FB6 = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; - 23256FCDBD84A2E259E40908 = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; - 3E3A3D491CB40D2943E95E64 = { isa = PBXGroup; children = ( - 389351359BA78C682E1931A6 ); name = Products; sourceTree = ""; }; - 25F381A264FFB3735F124DCC = { isa = PBXGroup; children = ( - 992526B83B6AA618A4FAECEB, - 1076A9F8D71BFFF9E9975FB6, - 23256FCDBD84A2E259E40908, - 3E3A3D491CB40D2943E95E64 ); name = Source; sourceTree = ""; }; - 0344046290267DB74DECDC05 = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = Info.plist; - DSTROOT = ../../bin; - SYMROOT = ../../bin; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEPLOYMENT_LOCATION = YES; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - ONLY_ACTIVE_ARCH = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_DEBUG=1", - "DEBUG=1", - "JUCE_ObjCExtraSuffix=JSlRKlNBb5", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; - 9DE19CD5BB8E12A153385ADD = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = Info.plist; - DSTROOT = ../../bin; - SYMROOT = ../../bin; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEPLOYMENT_LOCATION = YES; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_NDEBUG=1", - "NDEBUG=1", - "JUCE_ObjCExtraSuffix=JSlRKlNBb5", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; - 8E935B9E7F2982A06CD7EF99 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "jucedebug"; }; name = Debug; }; - 71190EFA58D0942581B5F1AD = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "juce"; }; name = Release; }; - 3A1CB6B5ECF4A79CDE35CC66 = { isa = XCConfigurationList; buildConfigurations = ( - 8E935B9E7F2982A06CD7EF99, - 71190EFA58D0942581B5F1AD ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - D14EC3F0DC5861E37D35E15A = { isa = XCConfigurationList; buildConfigurations = ( - 0344046290267DB74DECDC05, - 9DE19CD5BB8E12A153385ADD ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 8914D147048B9EE245989ACB = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0F4BA87762766B98D5B58AD0, - 50933337E6C3CC5B82540F8B, - 04CB2DA89A71A183CEFEB7C0, - CD59C8E60146B04575CD61E6, - 76890501626BFFF310A94F15, - 46151070FA7D3426EC35280F, - 983FCD60625A60993546F850, - 416D6F00E88DC74879B4DF2B, - 9C709BC2F4F0EE60BF52FACA, - 992F46189ABF711A047186A4, - 5C312E6678456C8293633E0F, - FB21B7E6A7CE55D3C0E3C37E, - C1147D03F1F4D697CC30DD22, - C5CFF5508299C26380465290, - 0ACCAC5ABDE686B0CA42BFED, - 2171BD82DA3A6744260CDE58, - 3C22C15ACEEF0454171D231B, - 6D421F7B7EE3A149389653C2, - 4ED0A649C320BA53718501CE, - 5D3EC9BA6BA37694CB371ABB, - 4CF5FB501CB800D4485B08DB, - 3747D91BE3C6A2E641BB133D, - 4CFEE72495007A62F78C1B8E, - BF7E18A49525915A0E1928C5, - 6DC6DEEE8A1A6092830A79C8, - 2862E190ECA33D2CE1458B51, - 0791EB173E6A9F959E692AA2, - 3B64EF7F57EAC5C51460059D, - 16D537EB6D3BFAB3AAB54B11, - 0C22446F12486AD139A640CB, - 95CF50482DC7139FCB40EB1C, - D66B0BC466522CD4C5F1335B, - F20E960CAA933102A0F0225C, - 9CDC242CC037F1D00BFD6157, - FB0C4D926F00644C6435F0B4, - 3AA8CE85F8CEA9D4B8063E52, - DDD4E27CA174F32412F71093, - DC89A29962945F69CE38658B, - 78E7EF1759BA0AACCCE37533, - 573BF08B2CACCC317F3D7603, - 8376B6E3DB141DDF5EFF6327, - B579C891B16F4B219CD751B5, - 43FA6F0FD4DDEBA6427E730D, - BAB3164372A6C31A1A7DA58F, - D71FEEEA440682B04E024BB7, - B331EE2C23176373F2D52C1E, - 79D8E372BA77018BDA956D92, - 3688819F98EFF0AABDD79029, - 84F9FCAE9DF003DC6FC3C941, - E1046147432EB115A68D6C43, - 5CEE2D7E55DA99C1D310CDC2, - B154245927BCB4F87ABEAF17, - 52ADF1419B058963EE32B7C3, - 31D36C32211754E793B9FF81, - 2D46CF2B0350A442E08EC355, - D1407BB28C169F5E1CAC3CC7, - 07E6E11A658930554FF0C56A, - E8DFABC1603D55B97429A8E4, - 1F905F44E5FA23A2D5CCDA0A, - 4AB5E55BDF79028F82F83D8E, - 9D2D1BA65C27BDA1F7C44769, - 43B3119E2F1B559263AE956C, - 4A7952C0A4EEE13296EEED5E, - A230949FF8848D5E923F9083, - 11162E9812CFB0E738A7E2E6, - C682BEA7DB70FDC7C6BA2D6E, - 6A53DA58B55E2DE7241BF2C8, - 0FF71870483AC46D5B7AC5B0, - FA01B3EABA192AE041D4FE4D, - 43047D78351C2D7047F4F81E, - 5BF44F954E56B7C2DD15EAEA, - B14EB5F3829CA26DA906D5C0, - D75943C2812EA68CA74D9FDA, - 6DEA630BFFF638BBBC8FDC00, - 708060ED04ADF4E4FB8E2171, - 12E3CC31875A202D6B30F778, - CF51988743ED2CD823DFE0B5, - 4AAFC135B170CF02A40F0D51, - 659D9CD58B6914EB420E6AEC, - 55737E2F1817DE642AA7DA05, - 6D2C50B0A69855A7F8C062E7, - 70EE7A1273945B62B013DB43, - 9DF800566462E24A14246EAE, - 89F0DA39878F8A41E60B8C67, - 12E1174518BE1063E506CE5C, - EC0B67A801316FBA35A04356, - 86EDB250B9F5C8FF3045ADEB, - 8F7CC7DDA1E07A392CAD82A3, - 621B7B0B518E63E69122C13E, - 97982824572C18827047D92A, - 927E7250FCE62E838599DF83, - 9AE6891C35CE161CB1707B4B, - 06994A713C38F415C4E8A009, - 98F737B7459895BFCDC7965E, - 7033A0968B1C81A821CCC296, - 14E5A383C70731C60911E698, - 3A10CF09C41F8F55B7529E68, - 5482BFF6CAD3B6CDFB09FBA1, - FC3299637EACD8B5CBEC391F, - 5C245C1A77B96A1425323A1C, - 05DFD3AF416CA6FDDDDC4C74, - 78DEB64D3F38269C62EB1C7F, - DA5DA96B9D1A26342D9278B6, - CA49EF43B1478B146ADBBF62, - FE6F6A4946B7E4F6C9F44C4A, - 28254F1E6E686CF6F29AE56A, - 9EA7FEF4CAD2BF46DD3596DA, - D1400B3D9D07FA9E8BAA21CB, - 716823F3B5437A20FCADA50E, - 7CAB8DEBF6B93C845AEF11E5, - BBE24BE654237ACD381A97E4, - 6F38AFBC749040844076FD4F, - B35BFCD19569A9F91A3CCCF5, - 7C7B33BC2E2F245C8AFC9879, - 110285CA29B28DDC018D2BF0, - ECF05C68A4DF71A10F8E8BA4, - 50CE14D31986BA1BC81B0869, - E421EC41CB492F58BF1D9C4E, - E3CDB77EF18430879925E6A3, - 55E5B76FB1649B60DBE16B89, - 6D1A45ED50BAFAE4F4E403AC, - 70D519927F38B21BE572201A, - E4EFC5F8828526CE4518F1E6, - 835F7FDCAD027B4E96AB407C, - D027C0131892DA25CE716DDE, - A65EBA33900ED91BE522DBF7, - 0D91D36C2195315FE534F304, - A1E82F70796B8611D7323247, - BC1856E0B20406DDCE5EBF94, - FF3A28F88174E10CB478931E, - C39AE37828718E9A45589A24, - 4400B0595B35F919291C1A01, - BB1DAC0CA8D7B3DEEDEE76C6, - 56F347211337C9229BA06AA7, - 75EAEC54BA3A8BD7F317C7E4, - 5FFFA4B8857D64FE36B4B125, - 1D406F33F6B9FE7F92A71438, - 806FF2617B7CC21609927A11, - 9AA76460DA7D34CE6A69E2B1, - 4E81BC4A50CF1883F529E152, - 8FBB6BF0C5406E1BA481CFEF, - F5F3F25D9F377128DC74D95B, - C64A2BF05224582134872415, - 0A9C9486A6B31F21B1472D2B, - ED9F9A6CB4F8BB7FEA5384B7, - DE0BAD16BD5A6568EB4D228B, - AF6FEC311B9FDA112CEEBE03, - 3795ECCE9D98F872F5BCAE64, - 723CFE5184B20B12ECABEB41, - DB6098F004F6D7F19605002E, - 757AC60B8BA481E592FFE6FF, - FC659F15D298558D9553B643, - C090ACD462D9431C8B64CAD1, - D894FBF1CF62C5F126213616, - 3D80F7AE3D65EE0BB607F252, - 2F33C392A0DD205A865955DE, - 36615B7CB2BE96B624C4ADC0, - 4F2AAD8318402F8C23A9EA54, - E6971F06B78AE76C35E1A19C, - 6629D535AE1ABE35A0D53C69, - DD4599D0A8117B025B477DE1, - E064E329741F36C329989203, - 61E659ADBF9D832ED8F24540, - 9379C833B875207E5DFC5A3F, - F1A6C2E3226F87860BFC4EBC, - 144872E56AED1981C0973B24, - 95648DF5676EBEF57009D09A, - 2FE59D80851A0A392EF2F923, - 621D2E6CDA267030405166C2, - 90347B7C32ACE8A11FC1B708, - FAC87D81FE5168E37645A113, - E5BB4B5EBFE206E09D0E6E10, - 1906C642BF6CA67821512855, - 6F41A81F269BCBB912C6AFBC, - 7BB45CEB3B0913F98FC817F5, - F41D6061AD873C619D7436FB, - 1FC0972EFBE39C7CDEB73A3D, - E63E64BFF5FDCEF5B53AE304, - E162F83B5F038092E2C70FC0, - 710BF477DE534CF18BD68959, - E5DA150E966B948C4CB4EFDB, - E96B477EB51FC152AC2EA6BD, - CF36EF39EEAB7A4744C5D310, - 372B6FF28C49018F5191C517, - D9AAB4AE220010CD526C87D2, - C732ADB05901619B14F1D6BB, - 075D5995E41FDD670ED35E17, - BBE02E8719411C8A7D43A401, - 35E3B9684ED968BAC0BC8021, - 736AC4A9DA6515B92644FA02, - DFFBADCBC9C7E31B391BA560, - A24A946371D566E02BCC95A5, - D390CCB01BD9BD132F04E0A6, - 26E2FB6533B5700FA9780E00, - AF5593DEC14D551C38CCB50D, - 0B830401EA0E883CCAAAC696, - 3897B36CC1D89C5755CE1B90, - C55B00378E784DE4B428E934, - 82A9E0388C9BF3A698DCEF69, - 7F6749BFCF2F134468825D45, - 277CF246D5EE48868E38E625, - 4D285D9D3F5955F2FD574D04, - 30F9B53BD00228406F6477DF, - 759633D5CDB35874FD37DD7F, - E0F309D93E9A7F0CC71C4503, - F246AADF8E531BC2244A1D38, - F78940DAEB8BE98A9AA4B0BE, - 00FE118356919D0BA97AE853, - 18D8A96CCD34E41A5E162AD5, - CEB8A9B9A37EBBA79A6478D4, - D6D48B2CC53FAE2BD126B0DE, - C384A89F786FDE8426F657D5, - 3D324F656EEF8F1FB2B437AC, - 645AF66C048A4815F5A8ECDD, - 38EFE824E76B3BB99824C265, - E23C5C51305DC7CE30E4DAB7, - 60E1742796432D042C59B9B3, - B92F53BABB6A9AC8348B001E, - EBC3AA015D24C62FA0307F51, - 803FFCA3DAC0C004A80143B4, - F0556B3AD9D388177E26B90D, - 0558FFF11AED944C6B3E5FB5, - CF73FAC91E319C464F07C966, - B6D3EDA0F2E3516F3922F23F, - E7C9FAA5F8A4AEDAD8A8CC1D, - 084C9F2D4F78134CB1EFE676, - 4DAD08CD3A688747C9CA237B, - 60FE8BFA252E3EF2D60B77AD, - C592CC923C5495467EF05D48, - E12096E92D3D43DD7926E063, - F4567E6C9ABFB13FF24797DE, - 0B0996F97D926609C23E5F90, - FB5900FB9E071EDC2542B846, - EDE605169F0AF038FE5097B3, - D78C3DA6505CE8CC3F17C070, - B23EE989379EB2F075D6F587, - ED7C62DE10250FCC07CF17B2, - 1535D49C24E8A9FA5F6DCF6E, - BBCA4C01CEF1EDA75625D6DC, - 136FB9588C834E6F4A1EEBFB, - 274415D1C0AE9BF56FAAE791, - CBAD975785BD26A0DA9417B6, - 2A8F78D412AC7EC0C2998A1A, - 2DD969525DEF4AD408E9BB59, - 059B694C912BE81023D5240D, - 4387EB80C5795FACBE753A7F, - B2C41D39730EB3AC75D55949, - F045E8F977C00016F6EBB1B7, - B89FE5AB44DDEBCC050F8D7A, - 2EA320797BD7D2137F133681, - 1008A8A446B9BCADBB853056, - 0FB1AED6E5AB5CEA95E70950, - 103A3B11DFE35E9088ECE933, - DAC7AB8D9EA70D99A1C1287E, - B3D08D9E24CC369E4838E6FF, - 15932C8039A59B0431FBB93E, - 3BBC410C79D2F53D32ED7466, - 88A4D0443DFD6BA1A1B32AB9, - 06F1BEB9AB97F33305B8F816, - 6CB4FA2797FBEA5C4C342EED, - 150C16E65ADC7E3359C88510, - 9C547F4DC4FC50F9C3382ACE, - 5D1B2A14239B0351261D832E, - 0AFD6B2B694302A62C7C9DD1, - 3CE21931FC5A59ED7C23144B, - DB7E8E984F9BEF4C84B887B1, - 07645D91AFD4F8512ECD48ED, - D132232A4A404A7C08D10928, - 83B488D64AB9828CFFBC55A9, - 8305C5E01476E99FBB1A0315, - FF613B604C2333F4A4ACEDDA, - CECE3D66B19693E41850C30D, - DF419EBD05F13A0D2073D47A, - C9FB7884928BF0D6140AF881, - 5C9628DB3E0C0BA8809AE45D, - 724DA2BCA5ABC5772604C3B4, - 035B1F7B1505ABF24455690E, - 3C71EA297D7418FEBB52F9DD, - 7A86E411B55E15DA7AF1FE67, - BD86381924AE45021246ABA3, - 306AB64E97A05B800349E7E2, - E7A5418175B23C794421441C, - 51F5844EAE455D51BDB17228, - C99F35ABEC13F58C27C1D303, - 3D9B5EDBECAA680B0A067F5C, - 724B03672FC7862B671969BC, - 8B31099030792C554BD51211, - D04EEEC7EAE7C806E95ED41C, - 7EA440527972D6B7322EC307, - CB9FE1DA1AFE5FBA9FF06061, - 26454A5DB5BAFD7901F17DA7, - F41B46F970BA78762DCE67D1, - B7A8CF6F889840BED05C8C27, - 3EBF23F390FC0227260CF7CB, - 1906FDEEDAE61C88A59BC271, - F51142C2CF336FC4A4FAACC6, - 1021132FAC7870AC18C040DE, - 05C8FA821C64B69BFF8FAF2C, - 5E330E219B2D2944BCE95174, - 275FBC09BE58E708A73B88C1, - 6DA99BA218FB45568258841C, - 32F1C95EDEE7722797B8CEE8, - 029A0E8B44DC17211722677D, - 4B4E17467BC41E2166549998, - 9686F29C29D1C26E353DE68A, - 79B4C2F1C0CF592ACE8093C0, - 88A87D28B3809665F28DC16E, - 6BDBEFD97E643E5BB27637FF, - BC3C22F5350ED7433D303A04, - 0B41EC4D7839F8CBCB8F9A0D, - B420CD4B589C08EAFA6E3DA4, - D4A05D7CA67B6F0527C9BD81, - 0D7547577A31512EDCEDC42C, - E2FDC7D3E3DC4C1423FA0C5B, - A46B0025A68136ED993E0D85, - B99678E919BF547A3A3F5D6E, - 5B714CDD0082419BFED7D2D4, - 2DD498313DA488A5063C4C1B, - 5B33FFE120A47EF42CBC05E4, - 552D45FB250C62F86CD02A57, - 0E8E9829E95E32163F45482D, - 6801797B247CB3A6890C0AB0, - B0B82AB2D9B0950F67B11BEA, - 379B4A89E5403B57A2009E76, - 6ED121D4FEE575408B9612AB, - 9ADE436BC62FB84E297C1CA0, - 03D534E5B18011C3E03CDD40, - 06E2ED69E9FAC199D559F276, - 9801CCC32F01818B39CFD88E, - FE553DDF4F83DABF13DF4A2B, - 68DB48B0EC9E5E37C6B5281C, - 96E9017FBE104E9EADC586B1, - BA6C6EF4C88D49C640DA7BF6, - 0B124D9CE361014F815A5958, - C701E3FCB168A3B4A31C4242, - 04F6D85CCF26A7F6DE589876, - 62912A2DA2F01212517938E7, - 36D770FCDAC86084A495B96E, - DA2A4714F1A6957A4F2B8D48, - CE9A64287FCEF00DD2BA6AEE, - 2AC6F3BFAAA21E21076A9F8D, - B8DD4DB0BD1A6B38BBF92413, - 1C0B1362E81C8B073BF0DCEC, - 63BEC07A51CB8E516B38ECD4, - C8F81E843F446868FAD88197, - 50D91A2EC0ABF894E612D936, - 82568CF438EF4C950E4A42DF, - B2E9D0C534DDE9F96921A054, - C8D06AE9C68A675A87DC9C99, - FE2999972FE3D6E251DA6653, - 8B2193898D3465B5995EE98A, - 4FB3EE200AEA14C7218D7034, - 81E79D9217773BF0E39F7812, - 2A360CDF2B5A46B282CEA2C4, - 01FD07AB480226E84D52F591, - D8B9941A1375579D6CE7C1C4, - 0DE731ED3EC994B9227C2741, - A124FE5709D9324B5BAFFE53, - A84A5CA4654AE87192A6A096, - 55EDB4D9B702B469DB4655C3 ); runOnlyForDeploymentPostprocessing = 0; }; - 01555BA382FAED280FF5F58A = { isa = PBXNativeTarget; buildConfigurationList = D14EC3F0DC5861E37D35E15A; buildPhases = ( - 8914D147048B9EE245989ACB ); buildRules = ( ); dependencies = ( ); name = Juce; productName = Juce; productReference = 389351359BA78C682E1931A6; productType = "com.apple.product-type.library.static"; }; - FCFFEDFC83101B196BFA2AE2 = { isa = PBXProject; buildConfigurationList = 3A1CB6B5ECF4A79CDE35CC66; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = 25F381A264FFB3735F124DCC; projectDirPath = ""; projectRoot = ""; targets = ( 01555BA382FAED280FF5F58A ); }; - }; - rootObject = FCFFEDFC83101B196BFA2AE2; -} diff --git a/Builds/VisualStudio2005/Juce.sln b/Builds/VisualStudio2005/Juce.sln deleted file mode 100644 index 49f069576a..0000000000 --- a/Builds/VisualStudio2005/Juce.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -# Visual C++ Express 2005 -Project("{30DE6365-A0C4-171D-3ADD-E102A1BD1BB8}") = "Juce", "Juce.vcproj", "{2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.Build.0 = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.ActiveCfg = Release|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Builds/VisualStudio2005/Juce.vcproj b/Builds/VisualStudio2005/Juce.vcproj deleted file mode 100644 index 7323f7b832..0000000000 --- a/Builds/VisualStudio2005/Juce.vcproj +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Builds/VisualStudio2008/Juce.vcproj b/Builds/VisualStudio2008/Juce.vcproj deleted file mode 100644 index e076a2ac73..0000000000 --- a/Builds/VisualStudio2008/Juce.vcproj +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Builds/VisualStudio2008_DLL/Juce.vcproj b/Builds/VisualStudio2008_DLL/Juce.vcproj deleted file mode 100644 index a83b98eb80..0000000000 --- a/Builds/VisualStudio2008_DLL/Juce.vcproj +++ /dev/null @@ -1,1040 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Builds/VisualStudio2010/Juce.vcxproj b/Builds/VisualStudio2010/Juce.vcxproj deleted file mode 100644 index 75be023df0..0000000000 --- a/Builds/VisualStudio2010/Juce.vcxproj +++ /dev/null @@ -1,845 +0,0 @@ - - - - - - Debug - Win32 - - - Release - Win32 - - - - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3} - - - - StaticLibrary - false - MultiByte - - - StaticLibrary - false - MultiByte - true - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - .\..\..\bin\ - .\..\..\bin\ - jucelib_static_Win32_debug - .\..\..\bin\ - .\..\..\bin\ - jucelib_static_Win32 - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - Disabled - EditAndContinue - %(AdditionalIncludeDirectories) - _LIB;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2010_78A501D=1;%(PreprocessorDefinitions) - MultiThreadedDebug - true - - .\Debug\ - .\Debug\ - .\Debug\ - Level4 - true - - - _DEBUG;%(PreprocessorDefinitions) - - - .\..\..\bin\jucelib_static_Win32_debug.lib - true - libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) - true - .\Debug\jucedebug.pdb - Windows - MachineX86 - - - true - .\Debug\jucedebug.bsc - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - MaxSpeed - %(AdditionalIncludeDirectories) - _LIB;WIN32;_WINDOWS;NDEBUG;JUCER_VS2010_78A501D=1;%(PreprocessorDefinitions) - MultiThreaded - true - - .\Release\ - .\Release\ - .\Release\ - Level4 - true - - - NDEBUG;%(PreprocessorDefinitions) - - - .\..\..\bin\jucelib_static_Win32.lib - true - %(IgnoreSpecificDefaultLibraries) - false - .\Release\juce.pdb - Windows - MachineX86 - true - true - - - true - .\Release\juce.bsc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Builds/VisualStudio2010/Juce.vcxproj.filters b/Builds/VisualStudio2010/Juce.vcxproj.filters deleted file mode 100644 index 3ad7766b85..0000000000 --- a/Builds/VisualStudio2010/Juce.vcxproj.filters +++ /dev/null @@ -1,2446 +0,0 @@ - - - - - - {4EBB1AA0-C8C1-3A6E-4EEF-16D94A800C1D} - - - {E82B03B5-6C8B-32F8-FAB4-137DDBF9B03B} - - - {CAC35CEF-05A2-0670-EC21-954802764D60} - - - {17E38334-C120-7A48-FC92-3B30391D55FA} - - - {7C06CCB7-976D-79CF-57E4-FCE804DF4E19} - - - {0B983ACE-956D-6A24-F8C8-CE5BB260747E} - - - {886F5D81-78E1-42D2-7966-8746D242F6A6} - - - {7EB89E3D-DEFC-BD00-47DB-6EFE2D2EBA94} - - - {3C5ABC64-AB1E-2A0D-A185-828FFD5B5668} - - - {CB2E433E-1BE3-ABE4-5184-808BFB05F3DA} - - - {3EA06C97-CA9B-017F-F658-B6AFE39B1F5F} - - - {2B37EA38-AE04-A748-30AA-CB4C6CB18570} - - - {116E44B0-2193-064C-D252-3CA9C69E72B4} - - - {0F3CA87D-CB24-BF9D-4A8B-47E079B2DF7C} - - - {B8CE82F1-B084-4B70-AB1D-3D0F56ECC8D1} - - - {CCD85E1C-AAD0-AE3D-B543-2DD1401AC274} - - - {16408406-C36B-3D15-02A0-1A95C9BA465C} - - - {02356100-882F-2B5A-04F2-4692C2D43816} - - - {C853ECCB-F0E9-FFF3-55DB-419E2B20B837} - - - {7E0F3FCA-F70B-CADA-CF05-86754F3109E7} - - - {54AC0A55-CC5C-6219-AB36-B5C26B885E20} - - - {CC9556B2-2BC2-96E0-32C4-F3A69670C658} - - - {4363D749-999F-79AB-8824-5D6C2C6D4548} - - - {77B59E1F-0AAA-45EC-DEDF-5833BFD6ABB2} - - - {71E7F95D-5D93-6A52-3B04-3079DE9B7520} - - - {64DE4A8F-F3A6-60D4-ABCE-EB9D0645D899} - - - {C88D4A21-79EB-12CE-AE91-861542871292} - - - {3D424C6E-60D9-F5D7-57A3-12E338CF5854} - - - {0BBC3B03-2BD1-0BE2-48DE-42B6003D20C9} - - - {E8CDBA7B-355C-DDCD-2933-BE4FB964F2B6} - - - {E32AB6D4-DAAE-5D7D-1B1D-43D79A874FC8} - - - {6F3422BC-1140-5902-4BE8-83E7693136AC} - - - {1FB1BF2B-A73D-FC59-6CEE-219A5A9D57DF} - - - {3858B8C1-6873-0627-2387-678CC788EA96} - - - {9EF0AA5A-8B7F-E8BD-5EEC-5452C255D342} - - - {7DAEDC2C-B323-896A-3273-4C4108461BB0} - - - {210D20DC-B260-4F3D-A08A-2FC4DEAFD9BD} - - - {B5741E32-133D-F56B-DC82-F47AF8B0D27D} - - - {B4A49E1D-E5A4-A7B8-0749-252EFC318BDE} - - - {1DF00D90-FA2E-A2AF-AED9-379D050629F3} - - - {4BA22EF4-EF5A-8FA7-2A4F-2EA55A126598} - - - {37CE3166-A559-E350-DFC9-A963810B59A6} - - - {97F2C641-6AEA-7FA9-193B-C8F36EE0DD0F} - - - {E94A000A-7F89-9C6C-C393-1A9B18E0C716} - - - {5141F842-AA21-CDC9-1EA1-22266EBD7807} - - - {89F198B9-60A8-D24F-5204-2CD67851BCF3} - - - {490D1803-CF9F-8D56-E16A-D15EEDB8C3E9} - - - {939AB894-8A98-5465-332C-88B3EE3FAFC1} - - - {D6FF810F-61FA-739C-D430-3A9DD573F077} - - - {4399B64E-2D91-A936-C261-CB4AF3F4ADFA} - - - {1C375704-29AD-E915-5C03-96A9DF473A21} - - - {E48884B1-132F-96C5-EF93-AB47FE750C9B} - - - {F1BA3931-F495-119F-BE20-A6117A1CD41A} - - - {EBCA4826-20A6-A600-3179-3208DCEE7F9A} - - - {BC072C4D-20F2-393F-A199-BA12EADC660F} - - - {8967A721-6CC3-0F4D-4300-6566C7A2AD58} - - - {23C18B4F-06EA-FC28-9229-7AF1ACA6F6EA} - - - {00FDA359-9F94-7E24-9C9E-5E78860054FC} - - - {AED1A02A-B39D-B69B-FD23-861C4E50621B} - - - {EA223401-284E-5F2F-FACB-4944AF280662} - - - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\devices - - - Juce\audio\devices - - - Juce\audio\devices - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\plugin_client\AU - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\VST - - - Juce\audio\plugin_client\VST - - - Juce\audio\plugin_client\Standalone - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\synthesisers - - - Juce\audio\synthesisers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\code_editor - - - Juce\gui\components\code_editor - - - Juce\gui\components\code_editor - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\lookandfeel - - - Juce\gui\components\lookandfeel - - - Juce\gui\components\menus - - - Juce\gui\components\menus - - - Juce\gui\components\menus - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\effects - - - Juce\gui\graphics\effects - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\imaging\image_file_formats - - - Juce\gui\graphics\imaging\image_file_formats - - - Juce\gui\graphics\imaging\image_file_formats - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\network - - - Juce\io\network - - - Juce\io\network - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\maths - - - Juce\maths - - - Juce\maths - - - Juce\memory - - - Juce\native\common - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\linux - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\native\android - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\application - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_file_formats - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\audio_sources - - - Juce\audio\devices - - - Juce\audio\devices - - - Juce\audio\devices - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\dsp - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\midi - - - Juce\audio\plugin_client\RTAS - - - Juce\audio\plugin_client\Standalone - - - Juce\audio\plugin_client - - - Juce\audio\plugin_client - - - Juce\audio\plugin_client - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host\formats - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\plugin_host - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\processors - - - Juce\audio\synthesisers - - - Juce\audio\synthesisers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\containers - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\core - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\cryptography - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\events - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\buttons - - - Juce\gui\components\code_editor - - - Juce\gui\components\code_editor - - - Juce\gui\components\code_editor - - - Juce\gui\components\code_editor - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\controls - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\filebrowser - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\keyboard - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\layout - - - Juce\gui\components\lookandfeel - - - Juce\gui\components\lookandfeel - - - Juce\gui\components\menus - - - Juce\gui\components\menus - - - Juce\gui\components\menus - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\mouse - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\positioning - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\properties - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\special - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\components\windows - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\colour - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\contexts - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\drawables - - - Juce\gui\graphics\effects - - - Juce\gui\graphics\effects - - - Juce\gui\graphics\effects - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\fonts - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\geometry - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\gui\graphics\imaging - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\files - - - Juce\io\network - - - Juce\io\network - - - Juce\io\network - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\io\streams - - - Juce\maths - - - Juce\maths - - - Juce\maths - - - Juce\maths - - - Juce\maths - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\memory - - - Juce\native\common - - - Juce\native\common - - - Juce\native\linux - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\mac - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\windows - - - Juce\native\android - - - Juce\native\android - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\text - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\threads - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce\utilities - - - Juce - - - Juce - - - diff --git a/Builds/iOS/Juce.xcodeproj/project.pbxproj b/Builds/iOS/Juce.xcodeproj/project.pbxproj deleted file mode 100644 index c07c94a9f0..0000000000 --- a/Builds/iOS/Juce.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2446 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - - 0F4BA87762766B98D5B58AD0 = { isa = PBXBuildFile; fileRef = 144F56FCF3DF9EC922765901; }; - 50933337E6C3CC5B82540F8B = { isa = PBXBuildFile; fileRef = 36A407F2BE4A625184B5CCFD; }; - 04CB2DA89A71A183CEFEB7C0 = { isa = PBXBuildFile; fileRef = 21E1DBFAB3FB75875EA35280; }; - CD59C8E60146B04575CD61E6 = { isa = PBXBuildFile; fileRef = 415BD77DF4B2F4760D138735; }; - 76890501626BFFF310A94F15 = { isa = PBXBuildFile; fileRef = BA97FEDA576503A21D971F1E; }; - 46151070FA7D3426EC35280F = { isa = PBXBuildFile; fileRef = 1AA8BE2D76E153874FB08197; }; - 983FCD60625A60993546F850 = { isa = PBXBuildFile; fileRef = 0877D5750D6F21C5231687CA; }; - 416D6F00E88DC74879B4DF2B = { isa = PBXBuildFile; fileRef = 7D85530D76756C33795ECCE9; }; - 9C709BC2F4F0EE60BF52FACA = { isa = PBXBuildFile; fileRef = 93006D32B18174D9FE0A5E9E; }; - 992F46189ABF711A047186A4 = { isa = PBXBuildFile; fileRef = 9349E14552FEA0371553E808; }; - 5C312E6678456C8293633E0F = { isa = PBXBuildFile; fileRef = 2AD64F53E12B20011B7A0DB7; }; - FB21B7E6A7CE55D3C0E3C37E = { isa = PBXBuildFile; fileRef = 59597FA0A88A08937801D198; }; - C1147D03F1F4D697CC30DD22 = { isa = PBXBuildFile; fileRef = 27C3C51DF2519B519B76E2EE; }; - C5CFF5508299C26380465290 = { isa = PBXBuildFile; fileRef = CB32D4EE59D5CA9DB12F944D; }; - 0ACCAC5ABDE686B0CA42BFED = { isa = PBXBuildFile; fileRef = 203AC66FFB20EAD2E7A594BD; }; - 2171BD82DA3A6744260CDE58 = { isa = PBXBuildFile; fileRef = E00781B15E47C9CB9E94869D; }; - 3C22C15ACEEF0454171D231B = { isa = PBXBuildFile; fileRef = DA868174D4D2059AC1BE7E71; }; - 6D421F7B7EE3A149389653C2 = { isa = PBXBuildFile; fileRef = 7CF036906034FABB44D2108F; }; - 4ED0A649C320BA53718501CE = { isa = PBXBuildFile; fileRef = D5D2FD212300E7D49ED74823; }; - 5D3EC9BA6BA37694CB371ABB = { isa = PBXBuildFile; fileRef = 7AE5295A472723B26537FAEC; }; - 4CF5FB501CB800D4485B08DB = { isa = PBXBuildFile; fileRef = FBB2EEF0E5EC5EB6F89E9066; }; - 3747D91BE3C6A2E641BB133D = { isa = PBXBuildFile; fileRef = 74AD63909D3EE09D63256A76; }; - 4CFEE72495007A62F78C1B8E = { isa = PBXBuildFile; fileRef = 5D6E837F124C347B3C1CAE23; }; - BF7E18A49525915A0E1928C5 = { isa = PBXBuildFile; fileRef = 1511366CAD437989DAA30CF2; }; - 6DC6DEEE8A1A6092830A79C8 = { isa = PBXBuildFile; fileRef = D86718CE7E5DEF2071AC3D17; }; - 2862E190ECA33D2CE1458B51 = { isa = PBXBuildFile; fileRef = 9A8053936C35A19B9E98623A; }; - 0791EB173E6A9F959E692AA2 = { isa = PBXBuildFile; fileRef = E2A56C23BF2BB466BB273E3E; }; - 3B64EF7F57EAC5C51460059D = { isa = PBXBuildFile; fileRef = 5403C2A4DEE7B9B3B34235F8; }; - 16D537EB6D3BFAB3AAB54B11 = { isa = PBXBuildFile; fileRef = 3988438157D4B75177703F8A; }; - 0C22446F12486AD139A640CB = { isa = PBXBuildFile; fileRef = 6841D6AC927D02113F3AEBD4; }; - 95CF50482DC7139FCB40EB1C = { isa = PBXBuildFile; fileRef = C7DB1BB9AF7FE0A2AA38D767; }; - D66B0BC466522CD4C5F1335B = { isa = PBXBuildFile; fileRef = EAFD034BB1721BFBF9A3795E; }; - F20E960CAA933102A0F0225C = { isa = PBXBuildFile; fileRef = 5DB9D903D24646B0C2356A5D; }; - 9CDC242CC037F1D00BFD6157 = { isa = PBXBuildFile; fileRef = A1D687AE613A8B61EB63923D; }; - FB0C4D926F00644C6435F0B4 = { isa = PBXBuildFile; fileRef = E68EB4BC75216B5B56E3F937; }; - 3AA8CE85F8CEA9D4B8063E52 = { isa = PBXBuildFile; fileRef = B457515938E7141D5E79B671; }; - DDD4E27CA174F32412F71093 = { isa = PBXBuildFile; fileRef = 891E0B1AD09C0EA44297E0F2; }; - DC89A29962945F69CE38658B = { isa = PBXBuildFile; fileRef = 0731C60911E6985F51325484; }; - 78E7EF1759BA0AACCCE37533 = { isa = PBXBuildFile; fileRef = DF3833AF6E38E55218FDF23F; }; - 573BF08B2CACCC317F3D7603 = { isa = PBXBuildFile; fileRef = 0D3A77572C7256CE4C115FD7; }; - 8376B6E3DB141DDF5EFF6327 = { isa = PBXBuildFile; fileRef = 78D29BB5C76CCF7C21EC0DAF; }; - B579C891B16F4B219CD751B5 = { isa = PBXBuildFile; fileRef = 01712FF0A160032FA1DAA8C2; }; - 43FA6F0FD4DDEBA6427E730D = { isa = PBXBuildFile; fileRef = 50FAF92038EBD0127900AAA1; }; - BAB3164372A6C31A1A7DA58F = { isa = PBXBuildFile; fileRef = FCBB1DC14311D099809B21F7; }; - D71FEEEA440682B04E024BB7 = { isa = PBXBuildFile; fileRef = 2EBF36FAAF019B6F811D1C84; }; - B331EE2C23176373F2D52C1E = { isa = PBXBuildFile; fileRef = 1C8211DFB558D740EF4B173A; }; - 79D8E372BA77018BDA956D92 = { isa = PBXBuildFile; fileRef = DA4820727D6DDC75561A262C; }; - 3688819F98EFF0AABDD79029 = { isa = PBXBuildFile; fileRef = 3110B983ACE956D6A24F8C8C; }; - 84F9FCAE9DF003DC6FC3C941 = { isa = PBXBuildFile; fileRef = B6E20AE45813C0CA9B1014DD; }; - E1046147432EB115A68D6C43 = { isa = PBXBuildFile; fileRef = AF47BC3796A74CC15A192E8B; }; - 5CEE2D7E55DA99C1D310CDC2 = { isa = PBXBuildFile; fileRef = 9C5C0BCB2A298160025B15FC; }; - B154245927BCB4F87ABEAF17 = { isa = PBXBuildFile; fileRef = AB554593165FE8C8B40F4447; }; - 52ADF1419B058963EE32B7C3 = { isa = PBXBuildFile; fileRef = BC2A50B0B01128E394E9DE9C; }; - 31D36C32211754E793B9FF81 = { isa = PBXBuildFile; fileRef = D141C024A3F5A6748B0E9ED7; }; - 2D46CF2B0350A442E08EC355 = { isa = PBXBuildFile; fileRef = 08EBC2152F45FB2B839FCCC1; }; - D1407BB28C169F5E1CAC3CC7 = { isa = PBXBuildFile; fileRef = 096CF2243648F17E1BF5421B; }; - 07E6E11A658930554FF0C56A = { isa = PBXBuildFile; fileRef = ED5966B95F865C586A3CE08F; }; - E8DFABC1603D55B97429A8E4 = { isa = PBXBuildFile; fileRef = 35668D8EEA19957C6C9AC83A; }; - 1F905F44E5FA23A2D5CCDA0A = { isa = PBXBuildFile; fileRef = 4F22276689685D839BD252EA; }; - 4AB5E55BDF79028F82F83D8E = { isa = PBXBuildFile; fileRef = F77C9170829579FABA5679AD; }; - 9D2D1BA65C27BDA1F7C44769 = { isa = PBXBuildFile; fileRef = 70E5409425A76782B6188B31; }; - 43B3119E2F1B559263AE956C = { isa = PBXBuildFile; fileRef = 9BD379D2F7995BFE0B3E5369; }; - 4A7952C0A4EEE13296EEED5E = { isa = PBXBuildFile; fileRef = 1809284DD05B56309D7EA24F; }; - A230949FF8848D5E923F9083 = { isa = PBXBuildFile; fileRef = 5D27EE211D9BFF6A58C4DC42; }; - 11162E9812CFB0E738A7E2E6 = { isa = PBXBuildFile; fileRef = 4DF9D333038A442870668D31; }; - C682BEA7DB70FDC7C6BA2D6E = { isa = PBXBuildFile; fileRef = D66C00E06B06EAD3B5257DD6; }; - 6A53DA58B55E2DE7241BF2C8 = { isa = PBXBuildFile; fileRef = 4555F03DBD059EEDECEF9F85; }; - 0FF71870483AC46D5B7AC5B0 = { isa = PBXBuildFile; fileRef = DF6CAC67C0F2D379BDA03062; }; - FA01B3EABA192AE041D4FE4D = { isa = PBXBuildFile; fileRef = CFAECB6551F48A1695DEC243; }; - 43047D78351C2D7047F4F81E = { isa = PBXBuildFile; fileRef = 0AD73B8EA0D60D9927B36624; }; - 5BF44F954E56B7C2DD15EAEA = { isa = PBXBuildFile; fileRef = 18B170E96511BBA1019C66F8; }; - B14EB5F3829CA26DA906D5C0 = { isa = PBXBuildFile; fileRef = 8D2DE1F3CB15D003C90042E7; }; - D75943C2812EA68CA74D9FDA = { isa = PBXBuildFile; fileRef = CEF91E0C9CBB3EBFF9500FDA; }; - 6DEA630BFFF638BBBC8FDC00 = { isa = PBXBuildFile; fileRef = E3C548295935D26121D5D823; }; - 708060ED04ADF4E4FB8E2171 = { isa = PBXBuildFile; fileRef = EAFD8FAF365DFB32DC42D0E7; }; - 12E3CC31875A202D6B30F778 = { isa = PBXBuildFile; fileRef = E9E692847C14AD33CD5FB40B; }; - CF51988743ED2CD823DFE0B5 = { isa = PBXBuildFile; fileRef = 7AE9331938549244E27A5D0E; }; - 4AAFC135B170CF02A40F0D51 = { isa = PBXBuildFile; fileRef = 4CBD301A08E9C3762F861FC3; }; - 659D9CD58B6914EB420E6AEC = { isa = PBXBuildFile; fileRef = 31D985CB8646B78460E9D5A7; }; - 55737E2F1817DE642AA7DA05 = { isa = PBXBuildFile; fileRef = 1617348BBF5D103619D76911; }; - 6D2C50B0A69855A7F8C062E7 = { isa = PBXBuildFile; fileRef = B80F8CD026033ACCCE11A1A4; }; - 70EE7A1273945B62B013DB43 = { isa = PBXBuildFile; fileRef = AE68ECB6E063BD8D4984C0B3; }; - 9DF800566462E24A14246EAE = { isa = PBXBuildFile; fileRef = 843A7B398E9411F0AF28D65D; }; - 89F0DA39878F8A41E60B8C67 = { isa = PBXBuildFile; fileRef = 9CF077D3ED7B7B56F351AAF6; }; - 12E1174518BE1063E506CE5C = { isa = PBXBuildFile; fileRef = E594F70DC2F292FF1EF65CB6; }; - EC0B67A801316FBA35A04356 = { isa = PBXBuildFile; fileRef = E2D07ED5E1A4A460E0DEF59C; }; - 86EDB250B9F5C8FF3045ADEB = { isa = PBXBuildFile; fileRef = 1F2CFBF13ADCA05C0DC2D7D4; }; - 8F7CC7DDA1E07A392CAD82A3 = { isa = PBXBuildFile; fileRef = C818B558D6D5B62A80621281; }; - 621B7B0B518E63E69122C13E = { isa = PBXBuildFile; fileRef = D0D9267E200BD462361810F7; }; - 97982824572C18827047D92A = { isa = PBXBuildFile; fileRef = E13F33E386E1A0D5FC546521; }; - 927E7250FCE62E838599DF83 = { isa = PBXBuildFile; fileRef = 621B3A4B154182F69DDE2989; }; - 9AE6891C35CE161CB1707B4B = { isa = PBXBuildFile; fileRef = 2FFF9AFE4BD9437CE096E52B; }; - 06994A713C38F415C4E8A009 = { isa = PBXBuildFile; fileRef = 18EE6576A9ED098632CE5155; }; - 98F737B7459895BFCDC7965E = { isa = PBXBuildFile; fileRef = 8B1C747E63EEF036AD9AF3D8; }; - 7033A0968B1C81A821CCC296 = { isa = PBXBuildFile; fileRef = 1C3D15546065C1A9AA5AA0C6; }; - 14E5A383C70731C60911E698 = { isa = PBXBuildFile; fileRef = BA415BD77DF4B2F4760D1387; }; - 3A10CF09C41F8F55B7529E68 = { isa = PBXBuildFile; fileRef = 6930E651AEE97FD47E185EC9; }; - 5482BFF6CAD3B6CDFB09FBA1 = { isa = PBXBuildFile; fileRef = E927E4A58A84B21AA6B38A44; }; - FC3299637EACD8B5CBEC391F = { isa = PBXBuildFile; fileRef = 09AE2C7E2573204A7A35452B; }; - 5C245C1A77B96A1425323A1C = { isa = PBXBuildFile; fileRef = 9846D4523B3425BBB04107EE; }; - 05DFD3AF416CA6FDDDDC4C74 = { isa = PBXBuildFile; fileRef = F750738F398054AB38250780; }; - 78DEB64D3F38269C62EB1C7F = { isa = PBXBuildFile; fileRef = A3CB18F915377AC3FFA2E5F4; }; - DA5DA96B9D1A26342D9278B6 = { isa = PBXBuildFile; fileRef = 04F48B09426293224576DA9A; }; - CA49EF43B1478B146ADBBF62 = { isa = PBXBuildFile; fileRef = 346CC505FAFEE9451040108D; }; - FE6F6A4946B7E4F6C9F44C4A = { isa = PBXBuildFile; fileRef = ADC16C18C8237A7F8E35E37A; }; - 28254F1E6E686CF6F29AE56A = { isa = PBXBuildFile; fileRef = 0D3FA24FF38399E0EDA80860; }; - 9EA7FEF4CAD2BF46DD3596DA = { isa = PBXBuildFile; fileRef = 7330A9643F50DE8BEACDBB61; }; - D1400B3D9D07FA9E8BAA21CB = { isa = PBXBuildFile; fileRef = 1BC6C010045A06BDB4C684F6; }; - 716823F3B5437A20FCADA50E = { isa = PBXBuildFile; fileRef = 71B6CE03D6DB07BB293C8206; }; - 7CAB8DEBF6B93C845AEF11E5 = { isa = PBXBuildFile; fileRef = 3CE16163A43A6E67428385EE; }; - BBE24BE654237ACD381A97E4 = { isa = PBXBuildFile; fileRef = 6BB68B37C7B0BB4DA8326647; }; - 6F38AFBC749040844076FD4F = { isa = PBXBuildFile; fileRef = 76E073B2A3F59A3ACD20CC87; }; - B35BFCD19569A9F91A3CCCF5 = { isa = PBXBuildFile; fileRef = A4E66D702028A22D8157241C; }; - 7C7B33BC2E2F245C8AFC9879 = { isa = PBXBuildFile; fileRef = 53EB02EEDF5E7971EAB9E795; }; - 110285CA29B28DDC018D2BF0 = { isa = PBXBuildFile; fileRef = 37E48B8F8AD2BC448E5935C7; }; - ECF05C68A4DF71A10F8E8BA4 = { isa = PBXBuildFile; fileRef = D317D4B5BA40A5754EE56F47; }; - 50CE14D31986BA1BC81B0869 = { isa = PBXBuildFile; fileRef = BC209F6862D5923B8F9E3080; }; - E421EC41CB492F58BF1D9C4E = { isa = PBXBuildFile; fileRef = B60FE8BFA252E3EF2D60B77A; }; - E3CDB77EF18430879925E6A3 = { isa = PBXBuildFile; fileRef = D3B56583D4F60069296DB959; }; - 55E5B76FB1649B60DBE16B89 = { isa = PBXBuildFile; fileRef = B1DEB4E0BBFE7E2D052165BD; }; - 6D1A45ED50BAFAE4F4E403AC = { isa = PBXBuildFile; fileRef = 102BAE57AAA43A7685FCBD9A; }; - 70D519927F38B21BE572201A = { isa = PBXBuildFile; fileRef = 730CAA344708954DE271072C; }; - E4EFC5F8828526CE4518F1E6 = { isa = PBXBuildFile; fileRef = D54308F25AEE3110A166F2BE; }; - 835F7FDCAD027B4E96AB407C = { isa = PBXBuildFile; fileRef = 9A9D8C524A070162517620E5; }; - D027C0131892DA25CE716DDE = { isa = PBXBuildFile; fileRef = CA1B41922D8094982F967DBD; }; - A65EBA33900ED91BE522DBF7 = { isa = PBXBuildFile; fileRef = 29DFAA512171B967D687A945; }; - 0D91D36C2195315FE534F304 = { isa = PBXBuildFile; fileRef = A418FC3BDDBF1CE9F2903490; }; - A1E82F70796B8611D7323247 = { isa = PBXBuildFile; fileRef = 949854EDE6B5B16CEFB6108F; }; - BC1856E0B20406DDCE5EBF94 = { isa = PBXBuildFile; fileRef = 8A67B45A2BA1D19D1AC43315; }; - FF3A28F88174E10CB478931E = { isa = PBXBuildFile; fileRef = 912C419859C9C56BC96AA6FB; }; - C39AE37828718E9A45589A24 = { isa = PBXBuildFile; fileRef = 5ABC6616473BA4791AA8101E; }; - 4400B0595B35F919291C1A01 = { isa = PBXBuildFile; fileRef = 29A79478AE8567250972ED43; }; - BB1DAC0CA8D7B3DEEDEE76C6 = { isa = PBXBuildFile; fileRef = 7F5A271EAB78C7CF8B2341DE; }; - 56F347211337C9229BA06AA7 = { isa = PBXBuildFile; fileRef = A00C6593BFBFA76043BC0C06; }; - 75EAEC54BA3A8BD7F317C7E4 = { isa = PBXBuildFile; fileRef = F1A33029252D29A6ADF171B0; }; - 5FFFA4B8857D64FE36B4B125 = { isa = PBXBuildFile; fileRef = B1E8FF009812F29C2620E6BB; }; - 1D406F33F6B9FE7F92A71438 = { isa = PBXBuildFile; fileRef = 921B616E2229AEB6390D2B57; }; - 806FF2617B7CC21609927A11 = { isa = PBXBuildFile; fileRef = 07191E1A9805FA6E6F253FF6; }; - 9AA76460DA7D34CE6A69E2B1 = { isa = PBXBuildFile; fileRef = 45E5EE9E0173683D721FABDA; }; - 4E81BC4A50CF1883F529E152 = { isa = PBXBuildFile; fileRef = F8FCCCE06D31FEF697FCD80D; }; - 8FBB6BF0C5406E1BA481CFEF = { isa = PBXBuildFile; fileRef = A6AD7357F905309D1B461EB7; }; - F5F3F25D9F377128DC74D95B = { isa = PBXBuildFile; fileRef = FF046140CCF1EDB0DFF80178; }; - C64A2BF05224582134872415 = { isa = PBXBuildFile; fileRef = A95F42C5CB0C2E5052B31568; }; - 0A9C9486A6B31F21B1472D2B = { isa = PBXBuildFile; fileRef = A31221E2A50CCE9DF06B5F4B; }; - ED9F9A6CB4F8BB7FEA5384B7 = { isa = PBXBuildFile; fileRef = 3D8B0E86C98E2EE49AE868C8; }; - DE0BAD16BD5A6568EB4D228B = { isa = PBXBuildFile; fileRef = B116FEC4D544DB8E38CB571E; }; - AF6FEC311B9FDA112CEEBE03 = { isa = PBXBuildFile; fileRef = F1F65C9E7394E04E073A57A4; }; - 3795ECCE9D98F872F5BCAE64 = { isa = PBXBuildFile; fileRef = 993C90B10202DA78FA31CC58; }; - 723CFE5184B20B12ECABEB41 = { isa = PBXBuildFile; fileRef = 079CFB5DEF6F2B71E2910A22; }; - DB6098F004F6D7F19605002E = { isa = PBXBuildFile; fileRef = 143F36BCDE7A65EBA33900ED; }; - 757AC60B8BA481E592FFE6FF = { isa = PBXBuildFile; fileRef = F2C653BA4552E6838DFA4F87; }; - FC659F15D298558D9553B643 = { isa = PBXBuildFile; fileRef = D41423657626ACA672A9DED9; }; - C090ACD462D9431C8B64CAD1 = { isa = PBXBuildFile; fileRef = FD004BDDCEDB7E324983F70C; }; - D894FBF1CF62C5F126213616 = { isa = PBXBuildFile; fileRef = B92ACF027E63D1C788DEC893; }; - 3D80F7AE3D65EE0BB607F252 = { isa = PBXBuildFile; fileRef = 218D7D73C086866E587FFD01; }; - 2F33C392A0DD205A865955DE = { isa = PBXBuildFile; fileRef = 1DDE0A8E4C5857715D9B5FAE; }; - 36615B7CB2BE96B624C4ADC0 = { isa = PBXBuildFile; fileRef = 6AACD2FD239E39F87B666C6F; }; - 4F2AAD8318402F8C23A9EA54 = { isa = PBXBuildFile; fileRef = 9E4B3BAB9BDB06B60D28DF48; }; - E6971F06B78AE76C35E1A19C = { isa = PBXBuildFile; fileRef = 3D74B30C63465C32E26D8E33; }; - 6629D535AE1ABE35A0D53C69 = { isa = PBXBuildFile; fileRef = 944BC51C440C167C5B2A23E3; }; - DD4599D0A8117B025B477DE1 = { isa = PBXBuildFile; fileRef = 067D84F9291770240D1AB5B4; }; - E064E329741F36C329989203 = { isa = PBXBuildFile; fileRef = 441257DD380138C03568FCBD; }; - 61E659ADBF9D832ED8F24540 = { isa = PBXBuildFile; fileRef = 2886656DF7ACC9DDC888827F; }; - 9379C833B875207E5DFC5A3F = { isa = PBXBuildFile; fileRef = 82DFF1BD3665DC32672FCCE8; }; - F1A6C2E3226F87860BFC4EBC = { isa = PBXBuildFile; fileRef = D39C0B853C3EBBBD11E7C71E; }; - 144872E56AED1981C0973B24 = { isa = PBXBuildFile; fileRef = D31704DAB806B6AF3ED52DC7; }; - 95648DF5676EBEF57009D09A = { isa = PBXBuildFile; fileRef = 243EF1A31A779413BC2D5B98; }; - 2FE59D80851A0A392EF2F923 = { isa = PBXBuildFile; fileRef = 36BB6DDF702EC9B3DAC851FF; }; - 621D2E6CDA267030405166C2 = { isa = PBXBuildFile; fileRef = 9DA988F1D7CE29E0DFED7EF0; }; - 90347B7C32ACE8A11FC1B708 = { isa = PBXBuildFile; fileRef = 072D77C3834B1B3FB77F277B; }; - FAC87D81FE5168E37645A113 = { isa = PBXBuildFile; fileRef = 1C3FFBA02AE51EDD72A6250B; }; - E5BB4B5EBFE206E09D0E6E10 = { isa = PBXBuildFile; fileRef = C45E7E6B6E45DEFBF80940DD; }; - 1906C642BF6CA67821512855 = { isa = PBXBuildFile; fileRef = ECCBF2452804ECB2D5B4BC50; }; - 6F41A81F269BCBB912C6AFBC = { isa = PBXBuildFile; fileRef = E2C948680009D1744CEDBC25; }; - 7BB45CEB3B0913F98FC817F5 = { isa = PBXBuildFile; fileRef = 0984A4BA00D6AAFB463657F4; }; - F41D6061AD873C619D7436FB = { isa = PBXBuildFile; fileRef = 3451124EC2809C9BB591DF93; }; - 1FC0972EFBE39C7CDEB73A3D = { isa = PBXBuildFile; fileRef = 84311C1F5A8ACC8DF4D6FF34; }; - E63E64BFF5FDCEF5B53AE304 = { isa = PBXBuildFile; fileRef = DED871B1C7458B15DE7C9234; }; - E162F83B5F038092E2C70FC0 = { isa = PBXBuildFile; fileRef = 11F1658A055C45FE824FD2DB; }; - 710BF477DE534CF18BD68959 = { isa = PBXBuildFile; fileRef = 4C3C3AFC3D97C1378B7D7435; }; - E5DA150E966B948C4CB4EFDB = { isa = PBXBuildFile; fileRef = 0A20E7E561633610A76A34AB; }; - E96B477EB51FC152AC2EA6BD = { isa = PBXBuildFile; fileRef = 9C1D5CDA61FB51F657DA8B22; }; - CF36EF39EEAB7A4744C5D310 = { isa = PBXBuildFile; fileRef = 3C8C1AAF32DFECB89EB83271; }; - 372B6FF28C49018F5191C517 = { isa = PBXBuildFile; fileRef = 1317F0BE5EC80371F744967B; }; - D9AAB4AE220010CD526C87D2 = { isa = PBXBuildFile; fileRef = A34C0E63D41CFF5E55FD1D9E; }; - C732ADB05901619B14F1D6BB = { isa = PBXBuildFile; fileRef = CC04F253CB70B20B774801A9; }; - 075D5995E41FDD670ED35E17 = { isa = PBXBuildFile; fileRef = A5AAF4475138358F33D4904A; }; - BBE02E8719411C8A7D43A401 = { isa = PBXBuildFile; fileRef = 8AEF18EE9B12D4677F96B709; }; - 35E3B9684ED968BAC0BC8021 = { isa = PBXBuildFile; fileRef = 2FFDC7636EFC2D7F74590A31; }; - 736AC4A9DA6515B92644FA02 = { isa = PBXBuildFile; fileRef = 929FEA5458430B7AE23BBB46; }; - DFFBADCBC9C7E31B391BA560 = { isa = PBXBuildFile; fileRef = 090907E4FE95EE2B11C1A0E1; }; - A24A946371D566E02BCC95A5 = { isa = PBXBuildFile; fileRef = 2E4A5F7128313C23AD0356F7; }; - D390CCB01BD9BD132F04E0A6 = { isa = PBXBuildFile; fileRef = 87E57C8F3448D615271CD9F6; }; - 26E2FB6533B5700FA9780E00 = { isa = PBXBuildFile; fileRef = D7772BC5E4E455AE2916A87D; }; - AF5593DEC14D551C38CCB50D = { isa = PBXBuildFile; fileRef = 6C33842C52B61407CACCA858; }; - 0B830401EA0E883CCAAAC696 = { isa = PBXBuildFile; fileRef = A24990B395323FBAC0BEFB5A; }; - 3897B36CC1D89C5755CE1B90 = { isa = PBXBuildFile; fileRef = EF18D0073BE50E572ADD9A1C; }; - C55B00378E784DE4B428E934 = { isa = PBXBuildFile; fileRef = D36EFC4421056277BA87387E; }; - 82A9E0388C9BF3A698DCEF69 = { isa = PBXBuildFile; fileRef = 41AF663E626B8F6D319B9966; }; - 7F6749BFCF2F134468825D45 = { isa = PBXBuildFile; fileRef = 3EC800323255128D69539BAE; }; - 277CF246D5EE48868E38E625 = { isa = PBXBuildFile; fileRef = B7251E779500BA77F5522CC7; }; - 4D285D9D3F5955F2FD574D04 = { isa = PBXBuildFile; fileRef = EF50EEDCAB08F842AB8DE6DA; }; - 30F9B53BD00228406F6477DF = { isa = PBXBuildFile; fileRef = 2E03ADF975A126C1F2F7B667; }; - 759633D5CDB35874FD37DD7F = { isa = PBXBuildFile; fileRef = ED3ED8389001D55FBDCF1087; }; - E0F309D93E9A7F0CC71C4503 = { isa = PBXBuildFile; fileRef = 835CC2A1E67E7B19E41F8FBD; }; - F246AADF8E531BC2244A1D38 = { isa = PBXBuildFile; fileRef = FF052647D2EFA985D05C8E83; }; - F78940DAEB8BE98A9AA4B0BE = { isa = PBXBuildFile; fileRef = 504730C9B9F60192C2577979; }; - 00FE118356919D0BA97AE853 = { isa = PBXBuildFile; fileRef = 85B7BCACB40E02815844F71D; }; - 18D8A96CCD34E41A5E162AD5 = { isa = PBXBuildFile; fileRef = A54BC72C899A2AF82E1E37F8; }; - CEB8A9B9A37EBBA79A6478D4 = { isa = PBXBuildFile; fileRef = 582DCC2F948F1DEA0D450B0D; }; - D6D48B2CC53FAE2BD126B0DE = { isa = PBXBuildFile; fileRef = E0694CD7C814AA99E5A84799; }; - C384A89F786FDE8426F657D5 = { isa = PBXBuildFile; fileRef = 62967D33232C5A86D88084B4; }; - 3D324F656EEF8F1FB2B437AC = { isa = PBXBuildFile; fileRef = C17613C202D8E1C366F21D3C; }; - 645AF66C048A4815F5A8ECDD = { isa = PBXBuildFile; fileRef = 2BFC199D03DEEC329D6A7CB1; }; - 38EFE824E76B3BB99824C265 = { isa = PBXBuildFile; fileRef = 32EA297812F1C88B42099501; }; - E23C5C51305DC7CE30E4DAB7 = { isa = PBXBuildFile; fileRef = CB649686575473223C859482; }; - 60E1742796432D042C59B9B3 = { isa = PBXBuildFile; fileRef = BA17B023595ECD8166A231D1; }; - B92F53BABB6A9AC8348B001E = { isa = PBXBuildFile; fileRef = 78068AA59A5DCFCCAAEA79D0; }; - EBC3AA015D24C62FA0307F51 = { isa = PBXBuildFile; fileRef = 61D06B694603F608CDA0703B; }; - 803FFCA3DAC0C004A80143B4 = { isa = PBXBuildFile; fileRef = 91CB423DBC5F3CBEDD9CF2EF; }; - F0556B3AD9D388177E26B90D = { isa = PBXBuildFile; fileRef = AF66A9951377E2D04C54CADD; }; - 0558FFF11AED944C6B3E5FB5 = { isa = PBXBuildFile; fileRef = 2ED8CC539A9D9BE611F67A9A; }; - CF73FAC91E319C464F07C966 = { isa = PBXBuildFile; fileRef = 29BC53FEE9BC27F44534C909; }; - B6D3EDA0F2E3516F3922F23F = { isa = PBXBuildFile; fileRef = 312F208B501E0D7764C6B613; }; - E7C9FAA5F8A4AEDAD8A8CC1D = { isa = PBXBuildFile; fileRef = 9D3F1BAB1D48DDECB9F35916; }; - 084C9F2D4F78134CB1EFE676 = { isa = PBXBuildFile; fileRef = 1B170F70AF8AA0A39074F671; }; - 4DAD08CD3A688747C9CA237B = { isa = PBXBuildFile; fileRef = 0F1C5770B363EF7DF64A876A; }; - 60FE8BFA252E3EF2D60B77AD = { isa = PBXBuildFile; fileRef = 6619D27E74F623B1E8CE8F71; }; - C592CC923C5495467EF05D48 = { isa = PBXBuildFile; fileRef = EAF0F2EAB230F7539B91A7FB; }; - E12096E92D3D43DD7926E063 = { isa = PBXBuildFile; fileRef = 7904C2A3C52959748C46D54F; }; - F4567E6C9ABFB13FF24797DE = { isa = PBXBuildFile; fileRef = 94D3EBE6E0D9AFE555226A88; }; - 0B0996F97D926609C23E5F90 = { isa = PBXBuildFile; fileRef = 67F4F9E1F6B9B4D1C1A668E5; }; - FB5900FB9E071EDC2542B846 = { isa = PBXBuildFile; fileRef = 6E4DF7338364956EF42C4493; }; - EDE605169F0AF038FE5097B3 = { isa = PBXBuildFile; fileRef = 3FD3FA96955DD648494E76A4; }; - D78C3DA6505CE8CC3F17C070 = { isa = PBXBuildFile; fileRef = 692A95B19D9C32094A1E07B9; }; - B23EE989379EB2F075D6F587 = { isa = PBXBuildFile; fileRef = 058702E8697667AEA38254C1; }; - ED7C62DE10250FCC07CF17B2 = { isa = PBXBuildFile; fileRef = 6FFB38088C11BAE68368A3E7; }; - 1535D49C24E8A9FA5F6DCF6E = { isa = PBXBuildFile; fileRef = 59B2FFF817679AEA84375E1B; }; - BBCA4C01CEF1EDA75625D6DC = { isa = PBXBuildFile; fileRef = D9B3C04F8EB4228DD59002E7; }; - 136FB9588C834E6F4A1EEBFB = { isa = PBXBuildFile; fileRef = 17C3AF03FF7AE88AE0C73311; }; - 274415D1C0AE9BF56FAAE791 = { isa = PBXBuildFile; fileRef = 4035C867821E9B5887AA25FB; }; - CBAD975785BD26A0DA9417B6 = { isa = PBXBuildFile; fileRef = EFA58F646B69B227AEF14140; }; - 2A8F78D412AC7EC0C2998A1A = { isa = PBXBuildFile; fileRef = 06B06C420341B005DFF951D2; }; - 2DD969525DEF4AD408E9BB59 = { isa = PBXBuildFile; fileRef = AD7A1C2C82EE714EBDD52EFC; }; - 059B694C912BE81023D5240D = { isa = PBXBuildFile; fileRef = D4211E697F43821CDBCE4F24; }; - 4387EB80C5795FACBE753A7F = { isa = PBXBuildFile; fileRef = BE5DCD603F7E21A1F66CDF33; }; - B2C41D39730EB3AC75D55949 = { isa = PBXBuildFile; fileRef = AE363A1FE2F403F7CE2FDF7F; }; - F045E8F977C00016F6EBB1B7 = { isa = PBXBuildFile; fileRef = A10A63E2098A85B5CA9265B1; }; - B89FE5AB44DDEBCC050F8D7A = { isa = PBXBuildFile; fileRef = 3F60563DEC7941B88163A50E; }; - 2EA320797BD7D2137F133681 = { isa = PBXBuildFile; fileRef = 39C0783ED515AAA82F9CA37F; }; - 1008A8A446B9BCADBB853056 = { isa = PBXBuildFile; fileRef = B3F5E7A708350F72E7C77153; }; - 0FB1AED6E5AB5CEA95E70950 = { isa = PBXBuildFile; fileRef = BBE79494A818EF83F52A4C7B; }; - 103A3B11DFE35E9088ECE933 = { isa = PBXBuildFile; fileRef = AE5A7EC70F288E7EA682081D; }; - DAC7AB8D9EA70D99A1C1287E = { isa = PBXBuildFile; fileRef = 7A039686F4F852E26936CA53; }; - B3D08D9E24CC369E4838E6FF = { isa = PBXBuildFile; fileRef = 868E43A4BB7015579789E4F8; }; - 15932C8039A59B0431FBB93E = { isa = PBXBuildFile; fileRef = D99C977ACCD09262F06F6624; }; - 3BBC410C79D2F53D32ED7466 = { isa = PBXBuildFile; fileRef = AD655AA04981173716022D8D; }; - 88A4D0443DFD6BA1A1B32AB9 = { isa = PBXBuildFile; fileRef = 21B2342B75097AB93CFF7E97; }; - 06F1BEB9AB97F33305B8F816 = { isa = PBXBuildFile; fileRef = 7A51D8B81F390A4CABF25C73; }; - 6CB4FA2797FBEA5C4C342EED = { isa = PBXBuildFile; fileRef = 76DB94CC776536F5D05B9445; }; - 150C16E65ADC7E3359C88510 = { isa = PBXBuildFile; fileRef = AA698DD5A82F91CF84A29666; }; - 9C547F4DC4FC50F9C3382ACE = { isa = PBXBuildFile; fileRef = FABA493FEE07E6373DD8EB41; }; - 5D1B2A14239B0351261D832E = { isa = PBXBuildFile; fileRef = 595EBA8A689DA899986314D8; }; - 0AFD6B2B694302A62C7C9DD1 = { isa = PBXBuildFile; fileRef = EACFC12E665283EB7926E9EC; }; - 3CE21931FC5A59ED7C23144B = { isa = PBXBuildFile; fileRef = BAE5CE629DF9D286293E616F; }; - DB7E8E984F9BEF4C84B887B1 = { isa = PBXBuildFile; fileRef = D4C499CB25F043FE667BC5E1; }; - 07645D91AFD4F8512ECD48ED = { isa = PBXBuildFile; fileRef = 4366712140FBEBEDBCBDCE9B; }; - D132232A4A404A7C08D10928 = { isa = PBXBuildFile; fileRef = E0A2C24581917DD090186333; }; - 83B488D64AB9828CFFBC55A9 = { isa = PBXBuildFile; fileRef = 3F3D429025A92B6F0FB6F8EF; }; - 8305C5E01476E99FBB1A0315 = { isa = PBXBuildFile; fileRef = 275F2210628D9E9968B1B258; }; - FF613B604C2333F4A4ACEDDA = { isa = PBXBuildFile; fileRef = 5DEA687D261C59CBABB782E9; }; - CECE3D66B19693E41850C30D = { isa = PBXBuildFile; fileRef = 5593DEC14D551C38CCB50D70; }; - DF419EBD05F13A0D2073D47A = { isa = PBXBuildFile; fileRef = B8E47498C7C6D5ECF41F0EAB; }; - C9FB7884928BF0D6140AF881 = { isa = PBXBuildFile; fileRef = 9DC2C10B16A645EEB82220D8; }; - 5C9628DB3E0C0BA8809AE45D = { isa = PBXBuildFile; fileRef = EE5F18DF1DED7617C4A41FF3; }; - 724DA2BCA5ABC5772604C3B4 = { isa = PBXBuildFile; fileRef = B2BCE9DDC8F0F54CA3D913E7; }; - 035B1F7B1505ABF24455690E = { isa = PBXBuildFile; fileRef = 5249EFBE3B22E6FC1A7B6D42; }; - 3C71EA297D7418FEBB52F9DD = { isa = PBXBuildFile; fileRef = A257B76FCE9D594EAD41414C; }; - 7A86E411B55E15DA7AF1FE67 = { isa = PBXBuildFile; fileRef = 8280AA34B23B4D366711A9E7; }; - BD86381924AE45021246ABA3 = { isa = PBXBuildFile; fileRef = C9561A66310DAD5EEB4A9462; }; - 306AB64E97A05B800349E7E2 = { isa = PBXBuildFile; fileRef = B62991F8AEE7327BA8A5070F; }; - E7A5418175B23C794421441C = { isa = PBXBuildFile; fileRef = 013F753639A6350C8DC602AD; }; - 51F5844EAE455D51BDB17228 = { isa = PBXBuildFile; fileRef = 72524FE185FF48DC1F954341; }; - C99F35ABEC13F58C27C1D303 = { isa = PBXBuildFile; fileRef = BF5307F364AC9250D8625168; }; - 3D9B5EDBECAA680B0A067F5C = { isa = PBXBuildFile; fileRef = AA4823F2F2A78C43D7A039D0; }; - 724B03672FC7862B671969BC = { isa = PBXBuildFile; fileRef = 87A5A064CC3CD55BA5D7617D; }; - 8B31099030792C554BD51211 = { isa = PBXBuildFile; fileRef = 641638A0466CEC1BDEAFB476; }; - D04EEEC7EAE7C806E95ED41C = { isa = PBXBuildFile; fileRef = 7DB37383434F45D8A7B674C3; }; - 7EA440527972D6B7322EC307 = { isa = PBXBuildFile; fileRef = CB16B2438EDCC10C499645E6; }; - CB9FE1DA1AFE5FBA9FF06061 = { isa = PBXBuildFile; fileRef = BEB35C6173793C1CB7AB6311; }; - 26454A5DB5BAFD7901F17DA7 = { isa = PBXBuildFile; fileRef = BA58B49B820A47F6F55CDACB; }; - F41B46F970BA78762DCE67D1 = { isa = PBXBuildFile; fileRef = 930E58E13FC92BF70AC20EEF; }; - B7A8CF6F889840BED05C8C27 = { isa = PBXBuildFile; fileRef = 9113CDD122D2790E147A8CF5; }; - 3EBF23F390FC0227260CF7CB = { isa = PBXBuildFile; fileRef = EE56999A85AF18015C540183; }; - 1906FDEEDAE61C88A59BC271 = { isa = PBXBuildFile; fileRef = 189F69E0B926C73B654D6951; }; - F51142C2CF336FC4A4FAACC6 = { isa = PBXBuildFile; fileRef = AE9A7A0775FA806126A74E16; }; - 1021132FAC7870AC18C040DE = { isa = PBXBuildFile; fileRef = 4F5D1AA83981FBCD33CE234F; }; - 05C8FA821C64B69BFF8FAF2C = { isa = PBXBuildFile; fileRef = E6A7BFB0FCD17A9B133CDFA4; }; - 5E330E219B2D2944BCE95174 = { isa = PBXBuildFile; fileRef = FE6E3F911679B0D7547577A3; }; - 275FBC09BE58E708A73B88C1 = { isa = PBXBuildFile; fileRef = 8BCE60CBC91DBAAB089958A1; }; - 6DA99BA218FB45568258841C = { isa = PBXBuildFile; fileRef = 3F11593DC3A168A52FCC2DD9; }; - 32F1C95EDEE7722797B8CEE8 = { isa = PBXBuildFile; fileRef = FC2C82760E717788B5A6E691; }; - 029A0E8B44DC17211722677D = { isa = PBXBuildFile; fileRef = 42059626955C547DA6AD3196; }; - 4B4E17467BC41E2166549998 = { isa = PBXBuildFile; fileRef = 8F383A785B4876198C5B0194; }; - 9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; - 79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; - 88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; - 6BDBEFD97E643E5BB27637FF = { isa = PBXBuildFile; fileRef = 249959E338D7750E56A9F2F8; }; - BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; - 0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; - B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; - D4A05D7CA67B6F0527C9BD81 = { isa = PBXBuildFile; fileRef = 1DBF9DAAD0690CB2CA4E9960; }; - 0D7547577A31512EDCEDC42C = { isa = PBXBuildFile; fileRef = BA561E64C6400CFB1DE013F6; }; - E2FDC7D3E3DC4C1423FA0C5B = { isa = PBXBuildFile; fileRef = 061B492EABD6B1C995D581A8; }; - A46B0025A68136ED993E0D85 = { isa = PBXBuildFile; fileRef = 50159A5B7A552A6C1EB557F3; }; - B99678E919BF547A3A3F5D6E = { isa = PBXBuildFile; fileRef = CDA5FCC51F6C1E84D7DC3274; }; - 5B714CDD0082419BFED7D2D4 = { isa = PBXBuildFile; fileRef = B14735381ADB00741166E330; }; - 2DD498313DA488A5063C4C1B = { isa = PBXBuildFile; fileRef = 09AE0882D58BE1715219556A; }; - 5B33FFE120A47EF42CBC05E4 = { isa = PBXBuildFile; fileRef = 0EB41C0AB478EE02D8C851F9; }; - 552D45FB250C62F86CD02A57 = { isa = PBXBuildFile; fileRef = FBE07C5CC622A5D36BDAB9E1; }; - 0E8E9829E95E32163F45482D = { isa = PBXBuildFile; fileRef = B07C853EB60D8D8691BC1B4B; }; - 6801797B247CB3A6890C0AB0 = { isa = PBXBuildFile; fileRef = 5D32C8856093B33438AEB758; }; - B0B82AB2D9B0950F67B11BEA = { isa = PBXBuildFile; fileRef = 8758E6857070D7E5406FDE3F; }; - 379B4A89E5403B57A2009E76 = { isa = PBXBuildFile; fileRef = 8E8BE2F1C182E418BBA6903C; }; - 6ED121D4FEE575408B9612AB = { isa = PBXBuildFile; fileRef = 03B9D3D9042E85BDD691325E; }; - 9ADE436BC62FB84E297C1CA0 = { isa = PBXBuildFile; fileRef = 13C661B79E1E9508512A6B21; }; - 03D534E5B18011C3E03CDD40 = { isa = PBXBuildFile; fileRef = F2F68E50F42BD0F124E89E2C; }; - 06E2ED69E9FAC199D559F276 = { isa = PBXBuildFile; fileRef = 59C46E289F86C80D4341EAA3; }; - 9801CCC32F01818B39CFD88E = { isa = PBXBuildFile; fileRef = FA82460758BDCB2DCCE1EAAA; }; - FE553DDF4F83DABF13DF4A2B = { isa = PBXBuildFile; fileRef = CE06EEED7426AA45C27B629C; }; - 68DB48B0EC9E5E37C6B5281C = { isa = PBXBuildFile; fileRef = 1D74C9567283836ECC70E48B; }; - 96E9017FBE104E9EADC586B1 = { isa = PBXBuildFile; fileRef = 40216CE846A54CE706131A23; }; - BA6C6EF4C88D49C640DA7BF6 = { isa = PBXBuildFile; fileRef = E646726910F110DC34DD1662; }; - 0B124D9CE361014F815A5958 = { isa = PBXBuildFile; fileRef = 9AF9F1C0D766D4F894E4A7B0; }; - C701E3FCB168A3B4A31C4242 = { isa = PBXBuildFile; fileRef = A404CD721E2A0F0CAE9326C5; }; - 04F6D85CCF26A7F6DE589876 = { isa = PBXBuildFile; fileRef = 32B7C3609BDA01AA09740139; }; - 62912A2DA2F01212517938E7 = { isa = PBXBuildFile; fileRef = CEF7210E311274F1DFAB6882; }; - 36D770FCDAC86084A495B96E = { isa = PBXBuildFile; fileRef = 755C440534C0EB494572B3F3; }; - DA2A4714F1A6957A4F2B8D48 = { isa = PBXBuildFile; fileRef = EE855319AF344A05C92580C7; }; - CE9A64287FCEF00DD2BA6AEE = { isa = PBXBuildFile; fileRef = FCD02A40985242A8A6648311; }; - 2AC6F3BFAAA21E21076A9F8D = { isa = PBXBuildFile; fileRef = 76E2084D2148068F9138A816; }; - B8DD4DB0BD1A6B38BBF92413 = { isa = PBXBuildFile; fileRef = 8273A206FB309671284959DD; }; - 1C0B1362E81C8B073BF0DCEC = { isa = PBXBuildFile; fileRef = 644FD6155385BC3AA270FB5D; }; - 63BEC07A51CB8E516B38ECD4 = { isa = PBXBuildFile; fileRef = 4A97C8D2FF6454DDD3AF4BE5; }; - C8F81E843F446868FAD88197 = { isa = PBXBuildFile; fileRef = B507B4A8712A54D7A8C03223; }; - 50D91A2EC0ABF894E612D936 = { isa = PBXBuildFile; fileRef = 23252E4C97AEFAE0C5EEAA77; }; - 82568CF438EF4C950E4A42DF = { isa = PBXBuildFile; fileRef = 81B36E7C56DF1A777AA04F71; }; - B2E9D0C534DDE9F96921A054 = { isa = PBXBuildFile; fileRef = 0EC7DE81A516F4130AC59557; }; - C8D06AE9C68A675A87DC9C99 = { isa = PBXBuildFile; fileRef = 5715BC14D93D61D71206FCB2; }; - FE2999972FE3D6E251DA6653 = { isa = PBXBuildFile; fileRef = 95F21C2733BD5932372E4157; }; - 8B2193898D3465B5995EE98A = { isa = PBXBuildFile; fileRef = 8E78623B2D21CFE68DEC0483; }; - 4FB3EE200AEA14C7218D7034 = { isa = PBXBuildFile; fileRef = 4D60F7F748CF6702D1E45960; }; - 81E79D9217773BF0E39F7812 = { isa = PBXBuildFile; fileRef = EF06213027EA3F7C54EE0F18; }; - 2A360CDF2B5A46B282CEA2C4 = { isa = PBXBuildFile; fileRef = 60F21CB42270ACE2241544A8; }; - 01FD07AB480226E84D52F591 = { isa = PBXBuildFile; fileRef = B4435D42216365FA97651272; }; - D8B9941A1375579D6CE7C1C4 = { isa = PBXBuildFile; fileRef = 599F5C47BB9B5898E0E88CF3; }; - 0DE731ED3EC994B9227C2741 = { isa = PBXBuildFile; fileRef = 4BE2727CCD2CD7603402C8FE; }; - A124FE5709D9324B5BAFFE53 = { isa = PBXBuildFile; fileRef = A618FC3255ECE14EC9259E6B; }; - A84A5CA4654AE87192A6A096 = { isa = PBXBuildFile; fileRef = A59A5DCFCCAAEA79D03C2B27; }; - 55EDB4D9B702B469DB4655C3 = { isa = PBXBuildFile; fileRef = ADE5F12AA5AD969E2C7002B3; }; - 389351359BA78C682E1931A6 = { isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 144F56FCF3DF9EC922765901 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../src/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; - F6A490BA93AC3558E9A6FBB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../src/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; - CB9766F7A9C612B326D808CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../src/application/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; - 36A407F2BE4A625184B5CCFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../src/application/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4E74130693EE120D905818AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../src/application/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; - 21E1DBFAB3FB75875EA35280 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../src/application/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - EDF52AB382E80530E8FED9A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../src/application/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; - 415BD77DF4B2F4760D138735 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../src/application/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8422E662212FA2082644A942 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../src/application/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; - BA97FEDA576503A21D971F1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../src/application/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; - E03C84620DCB004172C09B28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../src/application/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; - 1AA8BE2D76E153874FB08197 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 05C5C546E12C6422D865D864 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 1F5A667524FB005D872340E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../src/audio/audio_file_formats/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; - 0877D5750D6F21C5231687CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1BBE03BB0D71FEEEA440682B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; - 7D85530D76756C33795ECCE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 013E8938EE1C6B4F63016B55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 93006D32B18174D9FE0A5E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 41070806F82EC9C6D1C67689 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; - 9349E14552FEA0371553E808 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 27356F5E93CEA4D472D83D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; - 2AD64F53E12B20011B7A0DB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8BD38C2507C0F8E28930A4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../src/audio/audio_file_formats/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; - 59597FA0A88A08937801D198 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - AE7F7F0D959C2E3CF5989C88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../src/audio/audio_file_formats/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; - 27C3C51DF2519B519B76E2EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnail.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7B34E897026857C84399A09C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; - CB32D4EE59D5CA9DB12F944D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3442FA257104DC3F43E7F870 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; - 203AC66FFB20EAD2E7A594BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - C9F1015CA457A61082398E34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - E00781B15E47C9CB9E94869D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7C06BD13BF7E0097EB0A8D08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - DA868174D4D2059AC1BE7E71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 25B1AC1A6767AAD9E9515A18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 7CF036906034FABB44D2108F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - DB5CAB7BC2973ABFF0867BCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - D5D2FD212300E7D49ED74823 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 87A18C425F53C2098B1D42FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 7AE5295A472723B26537FAEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 51287E236C749092458BA2DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../src/audio/audio_sources/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; - 4C3258A1978AF3D357D196C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../src/audio/audio_sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - FBB2EEF0E5EC5EB6F89E9066 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../src/audio/audio_sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; - AE9C08108699C71A289462B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../src/audio/audio_sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; - 74AD63909D3EE09D63256A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../src/audio/audio_sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 67A8F408B1EC63407C9241B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../src/audio/audio_sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; - 5D6E837F124C347B3C1CAE23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - E1EA83B7EF928DC88D069AEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../src/audio/audio_sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 1511366CAD437989DAA30CF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - EA630BFFF638BBBC8FDC0018 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - D86718CE7E5DEF2071AC3D17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76BB7F75A7F9930ED5A0CDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../src/audio/audio_sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 9A8053936C35A19B9E98623A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9CB1126A9FBFF1D6D6469AF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../src/audio/audio_sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - C63D6EC0555C13C1B79A6AAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../src/audio/audio_sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - E2A56C23BF2BB466BB273E3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - BE5DB55285441D501FED3C00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../src/audio/audio_sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 5403C2A4DEE7B9B3B34235F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0F70C4D118AC7625B4C42CD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../src/audio/audio_sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 3988438157D4B75177703F8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6AC857F51FD805D7BD3EF712 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 6841D6AC927D02113F3AEBD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../src/audio/devices/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - E668D9C7FF084E59405A2A9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../src/audio/devices/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; - C7DB1BB9AF7FE0A2AA38D767 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../src/audio/devices/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - 95CA8EE24AFBB1F2F29A5394 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../src/audio/devices/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; - EAFD034BB1721BFBF9A3795E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../src/audio/devices/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; - EFAFC937377A21E9AC0F9776 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../src/audio/devices/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; - 5DB9D903D24646B0C2356A5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../src/audio/dsp/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; - EBA6B46F7B3C11CA3744A4D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../src/audio/dsp/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; - A1D687AE613A8B61EB63923D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../src/audio/dsp/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 812620B53BE820D26A63B65D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../src/audio/dsp/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 11C1A96A35A2F03F8C34BD43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../src/audio/dsp/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; - E68EB4BC75216B5B56E3F937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../src/audio/dsp/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE2259D9768027C2C001EEAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../src/audio/dsp/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 2C55CE1674244DB199C3033F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../src/audio/dsp/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; - B457515938E7141D5E79B671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../src/audio/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0604C2E17F0E0DFEFDA19F8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../src/audio/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 891E0B1AD09C0EA44297E0F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../src/audio/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - EBACA038DBB50817BE80E8C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../src/audio/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; - C376B06C58C5D3C972583BBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../src/audio/midi/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; - 0731C60911E6985F51325484 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../src/audio/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; - 062F7ACF5282C5B2D4BF5EE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../src/audio/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; - DF3833AF6E38E55218FDF23F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../src/audio/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; - C627F9E9EC160055D65D81CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../src/audio/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; - 0D3A77572C7256CE4C115FD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../src/audio/midi/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; - A22A0F77C15B1E4A8F2EB42A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../src/audio/midi/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; - 78D29BB5C76CCF7C21EC0DAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../src/audio/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; - DD3886D45B5988B4DAC2D049 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../src/audio/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; - 01712FF0A160032FA1DAA8C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../src/audio/midi/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; - 899BD7E18BE1EF7CDF53784C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../src/audio/midi/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; - 7B88F6B8E3A10CEAD9B0EE88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper.mm"; path = "../../src/audio/plugin_client/AU/juce_AU_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 1101E8CB676FDEEF0A89D921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RTAS_DigiCode_Header.h"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode_Header.h"; sourceTree = "SOURCE_ROOT"; }; - F222E5825D83E711C9F1B789 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; - CEAA2B84462EF0B5026EAB0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode2.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode2.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9A3151864FB90A6A4BCCAE9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode3.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_DigiCode3.cpp"; sourceTree = "SOURCE_ROOT"; }; - BCE37F0D994C0ADF2CCFF796 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; }; - F52ECCD6C02108A2D7F672F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_WinUtilities.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_WinUtilities.cpp"; sourceTree = "SOURCE_ROOT"; }; - 833C3F205F05BA4ADC883E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_Wrapper.cpp"; path = "../../src/audio/plugin_client/RTAS/juce_RTAS_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 69C4FF0DD888BA25477561C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../src/audio/plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 37E1FC756833849B8C7C1215 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper.mm"; path = "../../src/audio/plugin_client/VST/juce_VST_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 2741189DF800566462E24A14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterWindow.cpp"; path = "../../src/audio/plugin_client/Standalone/juce_StandaloneFilterWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - FAC43251D74E5140740BEF60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandaloneFilterWindow.h"; path = "../../src/audio/plugin_client/Standalone/juce_StandaloneFilterWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 2E96F55074F4EB74171EE6B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeCharacteristics.h"; path = "../../src/audio/plugin_client/juce_IncludeCharacteristics.h"; sourceTree = "SOURCE_ROOT"; }; - 13F64389F0E25731A98E92CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHeaders.h"; path = "../../src/audio/plugin_client/juce_PluginHeaders.h"; sourceTree = "SOURCE_ROOT"; }; - 7CDC2FA849B7ED73A2638A11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../src/audio/plugin_client/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; - D76BDCCF9E1A1F26A8F578F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 50FAF92038EBD0127900AAA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../src/audio/plugin_host/formats/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; - 2073E1A497363200233CD34E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - F800E47459B2FE9DEF56F312 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - B4291F2CEEC78CFEDEFC360E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../src/audio/plugin_host/formats/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; - FCBB1DC14311D099809B21F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 723EBD80931754F4DD77DD53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 2EBF36FAAF019B6F811D1C84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VSTPluginFormat.mm"; path = "../../src/audio/plugin_host/formats/juce_VSTPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; - 1C8211DFB558D740EF4B173A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../src/audio/plugin_host/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 28534632DF76A1EA837BD0D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../src/audio/plugin_host/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - DA4820727D6DDC75561A262C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../src/audio/plugin_host/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - A6415104D1E3E5CE7031C0C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../src/audio/plugin_host/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; - E5BA7B8913271E935A1DA487 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../src/audio/plugin_host/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; - 3110B983ACE956D6A24F8C8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../src/audio/plugin_host/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; - A3FE51C7DD706F536273AB0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../src/audio/plugin_host/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; - B6E20AE45813C0CA9B1014DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../src/audio/plugin_host/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4AE3A448D79602BE793BB5AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../src/audio/plugin_host/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; - AF47BC3796A74CC15A192E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../src/audio/plugin_host/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3D170AC8FD8E403C54E08F9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../src/audio/plugin_host/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; - 9C5C0BCB2A298160025B15FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../src/audio/plugin_host/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 08C65C3EB60FE8BFA252E3EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../src/audio/plugin_host/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4CF107951746567DB63880A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../src/audio/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; - AB554593165FE8C8B40F4447 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../src/audio/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3F260C24341E58745AC5BE79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../src/audio/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; - BC2A50B0B01128E394E9DE9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../src/audio/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - EC0F8FAA7EACE0D275064D60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../src/audio/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; - D141C024A3F5A6748B0E9ED7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../src/audio/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; - 19C9509EC7DD00DA7443DEFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../src/audio/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; - ABDE16ABC1784B0FD3887A8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../src/audio/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; - 08EBC2152F45FB2B839FCCC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../src/audio/processors/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 350428D4D70AAB88B2B84790 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../src/audio/processors/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; - 096CF2243648F17E1BF5421B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../src/audio/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - CAD3312170E5DBE8AA8348BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../src/audio/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; - ED5966B95F865C586A3CE08F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../src/audio/synthesisers/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6C6C1C360138D9BD4B27588B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../src/audio/synthesisers/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; - 35668D8EEA19957C6C9AC83A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../src/audio/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E6C206F95245BCDE38FB2B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../src/audio/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; - 4F22276689685D839BD252EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../src/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9584B84F23A4251755D49213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../src/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; - 839BE8047CF2F8EBE43ED34F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../src/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; - EDF52FDF87ACD33FE933142C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../src/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; - F77C9170829579FABA5679AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../src/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; - 34C402EF9ADCAD34FB657D43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../src/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; - 7DA9AC75A4D9227C8FC4B2F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../src/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; - 2767E1D082874D301D5D5F43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../src/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; - 9289A1E6B141F24C57FF0927 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../src/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 70E5409425A76782B6188B31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../src/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB4A73064B0FC74ECCA19116 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../src/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; - C1913C90ED7BE51E823887CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../src/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; - 9BD379D2F7995BFE0B3E5369 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../src/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; - C8F0F54CA3D913E7B8D559CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../src/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; - D7612CE51ED4F9D3F960F922 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../src/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; - F95BC2FA7861CFF968D661ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../src/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; - 2F5FD1DEFAE549553A8BE3B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../src/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; - 989E03031D341649B4A296F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../src/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; - 1809284DD05B56309D7EA24F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../src/containers/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; - 69F58BF234EDF6328F624E0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../src/containers/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; - 5D27EE211D9BFF6A58C4DC42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../src/containers/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7CABDD863B47D8ADC900A4D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../src/containers/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; - 4DF9D333038A442870668D31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../src/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; - A81B4FC81A75E21E5B96E506 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../src/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; - D66C00E06B06EAD3B5257DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../src/core/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; - C8441B7B3E4CCD4A257B4BFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../src/core/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; - 92ACFFCCCD1C85A0F8C6F80F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../src/core/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; - 4555F03DBD059EEDECEF9F85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../src/core/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; - 63F44EC0485FCA050814967E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../src/core/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; - DF6CAC67C0F2D379BDA03062 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../src/core/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1159C6BB0D33EE8E1A96B083 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../src/core/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; - 8292AE37F99FCC1E5BF63A28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../src/core/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; - CFAECB6551F48A1695DEC243 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../src/core/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; - B4137E4612C1D161894D0D27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../src/core/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; - 0AD73B8EA0D60D9927B36624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../src/core/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; - F51969AF328D2C7D52D7436D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../src/core/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; - C25D6136DF9CE441D6EB4C42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../src/core/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; - CA66415F6EAA172B83755954 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../src/core/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; - 18B170E96511BBA1019C66F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../src/core/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 45D14EF360BDA1F5692E583D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../src/core/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; - 956A1C30D5FE98DBB154204D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../src/core/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; - 8D2DE1F3CB15D003C90042E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../src/core/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; - 872020C1EC3997ED744BF1BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../src/core/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; - CEF91E0C9CBB3EBFF9500FDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../src/core/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; - 297B664E9AB86DFE7DCAFF22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../src/core/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; - E3C548295935D26121D5D823 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../src/cryptography/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7A4B0E6FD686BCF0B8CC771E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../src/cryptography/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; - EAFD8FAF365DFB32DC42D0E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../src/cryptography/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6E4345FEEB1DC732A16134A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../src/cryptography/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; - E9E692847C14AD33CD5FB40B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../src/cryptography/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; - 22612DBDC6C689B605CC6B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../src/cryptography/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; - 7AE9331938549244E27A5D0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../src/cryptography/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; - 16335266AFB4D19F25410E1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../src/cryptography/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; - 4CBD301A08E9C3762F861FC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../src/cryptography/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02CD7BA1750DE36237369F78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../src/cryptography/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; - 31D985CB8646B78460E9D5A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../src/events/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; - 09F7685D1EFF472ECB1F5EF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../src/events/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; - 4EF8BD4BF46C4BCB39F96609 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../src/events/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; - 5EB7BD94A754E88D076D777A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../src/events/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; - 1617348BBF5D103619D76911 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../src/events/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; - 44DB44953945417F76199479 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../src/events/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; - D04B6E43A037F985434B2F5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../src/events/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; - B80F8CD026033ACCCE11A1A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../src/events/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5F454A6B5A82ECE2396C5716 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../src/events/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; - B2D08C8EEE3E22026533D2EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../src/events/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; - AE68ECB6E063BD8D4984C0B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../src/events/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4B935D7360C9F166C80A158D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../src/events/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; - 843A7B398E9411F0AF28D65D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../src/events/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 57DD8EEE88C0D366E0354478 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../src/events/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; - 80633D64E9EFA1433454669B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../src/events/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; - 9CF077D3ED7B7B56F351AAF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../src/events/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7A1219C6560BDBE2E170D2A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../src/events/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; - E594F70DC2F292FF1EF65CB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../src/events/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - BE17B7279B4BF40E51C12F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../src/events/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; - E2D07ED5E1A4A460E0DEF59C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../src/events/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2EBDE3FF4894D72C310C9F84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../src/events/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; - 1F2CFBF13ADCA05C0DC2D7D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../src/events/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; - C51E9973A6FAB635081B9FDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../src/events/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; - C818B558D6D5B62A80621281 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../src/events/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32C0312A5D246D41AAD98A11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../src/events/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; - D0D9267E200BD462361810F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../src/gui/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; - 17A21B31FD41D00A4088FADF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../src/gui/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; - E13F33E386E1A0D5FC546521 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../src/gui/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - A0D6308567AAA50D1163D9D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../src/gui/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; - 621B3A4B154182F69DDE2989 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../src/gui/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; - A1F58C1A972425C2B43DD1B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../src/gui/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; - 2FFF9AFE4BD9437CE096E52B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../src/gui/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 41C8C324F13ADA3423FC3B0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../src/gui/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; - 18EE6576A9ED098632CE5155 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../src/gui/components/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - EB182DC4124FEFFFC87D12C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../src/gui/components/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; - 8B1C747E63EEF036AD9AF3D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../src/gui/components/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; - ECA97019B42083AD879B5B97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../src/gui/components/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; - 1C3D15546065C1A9AA5AA0C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../src/gui/components/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2032A24364695450A5E6A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../src/gui/components/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; - BA415BD77DF4B2F4760D1387 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../src/gui/components/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B72C0FB8DDC0F1102DF42943 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../src/gui/components/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; - 6930E651AEE97FD47E185EC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../src/gui/components/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - 96FD3A02BA915E460520A0B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../src/gui/components/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; - E927E4A58A84B21AA6B38A44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../src/gui/components/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - F2212B7F42E26C3DD86800F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../src/gui/components/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; - 09AE2C7E2573204A7A35452B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../src/gui/components/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - B394145555DCB9E0FAA5522C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../src/gui/components/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; - 9846D4523B3425BBB04107EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../src/gui/components/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - 455176F8EDBA7A9DCEAA1367 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../src/gui/components/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; - F750738F398054AB38250780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../src/gui/components/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; - DFF08DC68372AEE17EAA9CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../src/gui/components/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; - A3CB18F915377AC3FFA2E5F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../src/gui/components/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - B28C2EBD0846A09DAEDDFF4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../src/gui/components/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 04F48B09426293224576DA9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../src/gui/components/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - DF6B4E787E39CD446ED2EEEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../src/gui/components/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - C992FDA4396430392CFAD150 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../src/gui/components/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - 346CC505FAFEE9451040108D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3384A91143018ED9346E4118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - ADC16C18C8237A7F8E35E37A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../src/gui/components/controls/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - D8EB3EA456D9FCC211CD1ED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../src/gui/components/controls/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; - 0D3FA24FF38399E0EDA80860 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../src/gui/components/controls/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CA3454A9B6F80A2F4735C37E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../src/gui/components/controls/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 7330A9643F50DE8BEACDBB61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../src/gui/components/controls/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; - C0CC0FA84A4F7AA76C1611CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../src/gui/components/controls/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; - 1BC6C010045A06BDB4C684F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../src/gui/components/controls/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3FFCAECECC0D469A010F7AF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../src/gui/components/controls/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; - 71B6CE03D6DB07BB293C8206 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../src/gui/components/controls/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1DB68310EA4D6180FF948AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../src/gui/components/controls/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; - 3CE16163A43A6E67428385EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../src/gui/components/controls/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; - E698677EEC8E88CAFF542764 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../src/gui/components/controls/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; - 6BB68B37C7B0BB4DA8326647 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../src/gui/components/controls/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1EA844F7CC5377A14B0FD21C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../src/gui/components/controls/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 76E073B2A3F59A3ACD20CC87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../src/gui/components/controls/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8BA30F0AFF5EA0E1A0203ACB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../src/gui/components/controls/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; - A4E66D702028A22D8157241C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../src/gui/components/controls/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB6BF5E15522D8A272032AE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../src/gui/components/controls/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; - 53EB02EEDF5E7971EAB9E795 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../src/gui/components/controls/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 82FEB35063C3559D2F46AA6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../src/gui/components/controls/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; - 37E48B8F8AD2BC448E5935C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../src/gui/components/controls/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - A77096E86054F70AC0A3B69E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../src/gui/components/controls/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 981BACFF7892B83828313D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../src/gui/components/controls/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; - D317D4B5BA40A5754EE56F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../src/gui/components/controls/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8400CA0D3C2AB7A60A7329FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../src/gui/components/controls/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; - BC209F6862D5923B8F9E3080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../src/gui/components/controls/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; - B0D261D42091AAD1560A0D63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../src/gui/components/controls/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; - B60FE8BFA252E3EF2D60B77A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 79ABAD7BB654030EF29B8B9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D3B56583D4F60069296DB959 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3A4ABC7E24F155A8CAF027B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../src/gui/components/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; - B1DEB4E0BBFE7E2D052165BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - F9FEE6DAB2B2752AC13D7286 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 85F0A0454489E4AF1F80AC83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../src/gui/components/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; - 102BAE57AAA43A7685FCBD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../src/gui/components/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - F631A108CB5015BFA2E25E00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../src/gui/components/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; - 730CAA344708954DE271072C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 295793C7AA1A57DC4BBCBBC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../src/gui/components/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; - D54308F25AEE3110A166F2BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../src/gui/components/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3AF50EADB5B2C973E0C8EE9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../src/gui/components/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 9A9D8C524A070162517620E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CD6C610A843822A7FA53E9D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - CA1B41922D8094982F967DBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9E66775B2F13ACD0B751E69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../src/gui/components/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B689E250203DE38D6D4F39F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../src/gui/components/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 29DFAA512171B967D687A945 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0AB8288D92FDFA00F30FB8DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A418FC3BDDBF1CE9F2903490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0EAD906B617A1A17305CB9F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../src/gui/components/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 949854EDE6B5B16CEFB6108F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - F39059E72B927A700010851B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../src/gui/components/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8A67B45A2BA1D19D1AC43315 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - ECDD0F8397F3EE4E7FA7ACCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../src/gui/components/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 912C419859C9C56BC96AA6FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../src/gui/components/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 717295136FD426125079F78C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../src/gui/components/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 5ABC6616473BA4791AA8101E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; - F61C34EE417006881D0869F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; - 29A79478AE8567250972ED43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../src/gui/components/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - FB080C47434A8FAB73B8F486 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../src/gui/components/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; - 7F5A271EAB78C7CF8B2341DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 92EDE6EA48F94DC5A0BCB24A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A00C6593BFBFA76043BC0C06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../src/gui/components/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02982EB6A81020D3D421AED3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../src/gui/components/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; - F1A33029252D29A6ADF171B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - 15C6FD019B274AA51B4E2D76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../src/gui/components/keyboard/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; - B1E8FF009812F29C2620E6BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../src/gui/components/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; - FAEEA3536AD17B2667A1BB94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../src/gui/components/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; - D64DD9F41E4598606855DFCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../src/gui/components/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; - 7356F5E93CEA4D472D83D8E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../src/gui/components/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; - 921B616E2229AEB6390D2B57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../src/gui/components/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; - FE1072B5FB77E8FEE1BEBDFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../src/gui/components/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; - 07191E1A9805FA6E6F253FF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2EC173A08676F6E592A7B347 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../src/gui/components/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; - 45E5EE9E0173683D721FABDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../src/gui/components/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2D3A362DD3833B9E70B10FD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../src/gui/components/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; - F8FCCCE06D31FEF697FCD80D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../src/gui/components/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; - 44CDA79090B115C3B62A2168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../src/gui/components/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; - A6AD7357F905309D1B461EB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../src/gui/components/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9242E8425497D889C764C66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../src/gui/components/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; - FF046140CCF1EDB0DFF80178 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../src/gui/components/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6A223FB5B4A9388C83D6FC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../src/gui/components/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; - A95F42C5CB0C2E5052B31568 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 600B2FDBBBE812784CB49A69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../src/gui/components/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A31221E2A50CCE9DF06B5F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB54AC3D311C44A1F3B463A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../src/gui/components/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 3D8B0E86C98E2EE49AE868C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../src/gui/components/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 238965266F88730956D776DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../src/gui/components/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B116FEC4D544DB8E38CB571E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../src/gui/components/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 797C94BB7F42CBBAACCFFB87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../src/gui/components/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; - F1F65C9E7394E04E073A57A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../src/gui/components/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - F64E8284F142600B9F519B07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../src/gui/components/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; - 993C90B10202DA78FA31CC58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8C0FFF811E06D162050CAB14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../src/gui/components/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; - 079CFB5DEF6F2B71E2910A22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../src/gui/components/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; - D5F5282BE0F43A5E16824749 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../src/gui/components/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; - 143F36BCDE7A65EBA33900ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../src/gui/components/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; - 093E54DECB8191CA74D79176 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../src/gui/components/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; - F2C653BA4552E6838DFA4F87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../src/gui/components/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C42D9251031A81B5CF2C843B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../src/gui/components/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D41423657626ACA672A9DED9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../src/gui/components/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; - 811149E18993F029165D330D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../src/gui/components/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; - FD004BDDCEDB7E324983F70C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../src/gui/components/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7B991020107EC0D54965BCA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../src/gui/components/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; - B92ACF027E63D1C788DEC893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3C739F61EE232C75546D4DCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; - 218D7D73C086866E587FFD01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../src/gui/components/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB93D3C283731C0B25B7AAAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../src/gui/components/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 1DDE0A8E4C5857715D9B5FAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../src/gui/components/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 502B3625329816EA6330465F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../src/gui/components/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; - 6AACD2FD239E39F87B666C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../src/gui/components/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; - A563BC883D801CF5956DC4BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../src/gui/components/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; - 9E4B3BAB9BDB06B60D28DF48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../src/gui/components/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; - BCDD702ED33BADF3FC19384C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../src/gui/components/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; - 3D74B30C63465C32E26D8E33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../src/gui/components/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4993649A93B73052C8045EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../src/gui/components/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; - 31EE71EA61B4ED293481EB97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../src/gui/components/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - A08313B5F112579D130373BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../src/gui/components/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - E1CA0B04EDE60771B81B9700 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../src/gui/components/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 944BC51C440C167C5B2A23E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../src/gui/components/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 136109B3076DDA7B2E01CF90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../src/gui/components/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; - 067D84F9291770240D1AB5B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../src/gui/components/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 50C02B44D0CB18898F575B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../src/gui/components/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; - 441257DD380138C03568FCBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../src/gui/components/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 07CF9AF337779EB486AC92BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../src/gui/components/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; - 2886656DF7ACC9DDC888827F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../src/gui/components/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0C28F27F9D1CE6CD65185760 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../src/gui/components/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; - 89AA49DD2A63D80E90A56768 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../src/gui/components/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; - 82DFF1BD3665DC32672FCCE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../src/gui/components/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5B6CD1833A98F9844B7E3FF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../src/gui/components/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; - D39C0B853C3EBBBD11E7C71E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../src/gui/components/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 657546D70AB7B2709619E07A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../src/gui/components/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; - D31704DAB806B6AF3ED52DC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../src/gui/components/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 574EC603B2B1189687851319 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../src/gui/components/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; - 243EF1A31A779413BC2D5B98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../src/gui/components/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; - 72EFFDE39C7255D50F926944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../src/gui/components/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; - 36BB6DDF702EC9B3DAC851FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../src/gui/components/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; - A3B6342C6207D452F6AD985C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../src/gui/components/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; - 9DA988F1D7CE29E0DFED7EF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../src/gui/components/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - C1A3232DDB617A20D9C26526 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../src/gui/components/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; - 072D77C3834B1B3FB77F277B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../src/gui/components/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; - 749CA35420339A25BA4E500F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../src/gui/components/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 1C3FFBA02AE51EDD72A6250B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - B422688E380911F3C21E3F04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../src/gui/components/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - C45E7E6B6E45DEFBF80940DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C1F662CED371C843E4EE03B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../src/gui/components/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - ECCBF2452804ECB2D5B4BC50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C6B318D6930A05FF86AD97DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../src/gui/components/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - E2C948680009D1744CEDBC25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5B9E9460EAA932889DDC4873 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../src/gui/components/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 0984A4BA00D6AAFB463657F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../src/gui/components/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 02685CE4575D6E9B8CCC7738 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../src/gui/components/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; - 3451124EC2809C9BB591DF93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - B568DEC2B352281BC63B33CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../src/gui/components/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 84311C1F5A8ACC8DF4D6FF34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../src/gui/components/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3641ABC17D67038746897FA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../src/gui/components/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - E748C93240CDD61473B0107F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../src/gui/components/special/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; - DED871B1C7458B15DE7C9234 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 26E787FFC68224BF8EB5A458 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../src/gui/components/special/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 11F1658A055C45FE824FD2DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../src/gui/components/special/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4DFF179AFD87D34C7E23B1E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../src/gui/components/special/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4C3C3AFC3D97C1378B7D7435 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../src/gui/components/special/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../src/gui/components/special/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../src/gui/components/special/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; - CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../src/gui/components/special/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; - 4BF7A01BCE61A5068CA13D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../src/gui/components/special/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../src/gui/components/special/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../src/gui/components/special/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; - 3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../src/gui/components/special/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 127FC743FE67E6EEF2531BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../src/gui/components/special/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 4387C6496C7079FB0032B99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../src/gui/components/special/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 1317F0BE5EC80371F744967B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../src/gui/components/special/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 826CC87E9E280F46B6D62B64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../src/gui/components/special/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A34C0E63D41CFF5E55FD1D9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../src/gui/components/special/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6BE989C709D2D1D017548447 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../src/gui/components/special/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; - 529CB909220344AD55944372 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../src/gui/components/special/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A9DB12F944D9DC336AD0A78B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../src/gui/components/special/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; - CC04F253CB70B20B774801A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../src/gui/components/special/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - D9847FECA6801E9A61007D50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../src/gui/components/special/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 740D1808DB934123F05A1598 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../src/gui/components/special/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A5AAF4475138358F33D4904A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../src/gui/components/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 72C4FDDDB8602591DD4F7B3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../src/gui/components/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 8AEF18EE9B12D4677F96B709 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../src/gui/components/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F54431CD3A672B1EB8335BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../src/gui/components/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; - 2FFDC7636EFC2D7F74590A31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../src/gui/components/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 12C66C90F3192AFFD6BCEDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../src/gui/components/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; - 929FEA5458430B7AE23BBB46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../src/gui/components/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - C286C779DD52C29F86E3DBE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../src/gui/components/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 090907E4FE95EE2B11C1A0E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../src/gui/components/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6E522DF13EC47755234A5D57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../src/gui/components/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 3FC6FC331B4E104D1DC223D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../src/gui/components/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; - 2E4A5F7128313C23AD0356F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../src/gui/components/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 207CDD87107EAC8ED17DD601 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../src/gui/components/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 87E57C8F3448D615271CD9F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../src/gui/components/windows/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7C06FF93D655B9987000ECA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../src/gui/components/windows/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; - D7772BC5E4E455AE2916A87D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2FC449D291A603E26E938F52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../src/gui/components/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 6C33842C52B61407CACCA858 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../src/gui/components/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6165F485E931EF9F69D2145F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../src/gui/components/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; - A24990B395323FBAC0BEFB5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../src/gui/components/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - C7C882D550E3B72FA5EFA88A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../src/gui/components/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; - EF18D0073BE50E572ADD9A1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../src/gui/graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F6F9E1FD31E1A6268CFD3F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../src/gui/graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; - D36EFC4421056277BA87387E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../src/gui/graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3AE0BD116486BCE37F0D994C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../src/gui/graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; - 41AF663E626B8F6D319B9966 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../src/gui/graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; - C913994AAA448C9F22ACF100 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../src/gui/graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; - 112017AA0A061CF080DBD504 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../src/gui/graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; - 3EC800323255128D69539BAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../src/gui/graphics/contexts/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; - BD52C1CCEAF6FEC311B9FDA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../src/gui/graphics/contexts/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; - B7251E779500BA77F5522CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../src/gui/graphics/contexts/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1F0DB4B2825AF638183B50D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../src/gui/graphics/contexts/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; - EF50EEDCAB08F842AB8DE6DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../src/gui/graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6320F9BAFA094B5C0C828C58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../src/gui/graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; - 2E03ADF975A126C1F2F7B667 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../src/gui/graphics/contexts/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; - 36268DD78D00323D391ECAAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../src/gui/graphics/contexts/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; - D6B4FED1F1D9FB82C6424438 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; - ED3ED8389001D55FBDCF1087 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5792CC17E9DFB966371CBEE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; - 835CC2A1E67E7B19E41F8FBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; - A7A8BE6B30C70701A10B5BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; - FF052647D2EFA985D05C8E83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../src/gui/graphics/contexts/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2B90FAFBC65FB79A5D74E816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../src/gui/graphics/contexts/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; - 504730C9B9F60192C2577979 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../src/gui/graphics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6A249ADEC5400011AA671D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../src/gui/graphics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; - 85B7BCACB40E02815844F71D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; - 00B5FB5ABF4F13EC5D28E34D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../src/gui/graphics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; - A54BC72C899A2AF82E1E37F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; - 849E645981CA10B8D5576462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../src/gui/graphics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; - 582DCC2F948F1DEA0D450B0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; - 17EBDF689C731DA257B243C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../src/gui/graphics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; - E0694CD7C814AA99E5A84799 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0FA9E378EBD7EE63EF72124F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../src/gui/graphics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 62967D33232C5A86D88084B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2FBD6F49349E7CC8FC2051EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../src/gui/graphics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; - C17613C202D8E1C366F21D3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../src/gui/graphics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1FA43B2E4244CD74B551DAD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../src/gui/graphics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; - 2BFC199D03DEEC329D6A7CB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../src/gui/graphics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32EA297812F1C88B42099501 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../src/gui/graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; - 85D4043F9E25047E07496DAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../src/gui/graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - CB649686575473223C859482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../src/gui/graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; - FD1FA4ABB4226372235643E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../src/gui/graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - 18DB9BD10F140F132A3279C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../src/gui/graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; - BA17B023595ECD8166A231D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../src/gui/graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6B4E90767D784246EC4E1944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../src/gui/graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; - 78068AA59A5DCFCCAAEA79D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../src/gui/graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0401EA0E883CCAAAC6960A27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../src/gui/graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; - 61D06B694603F608CDA0703B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../src/gui/graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8117D400F45F1DF157634824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../src/gui/graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; - 91CB423DBC5F3CBEDD9CF2EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../src/gui/graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4284BA7A26C7F6DEB00B4366 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../src/gui/graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; - AF66A9951377E2D04C54CADD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../src/gui/graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - 932024E0F2A2CC22B7657691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../src/gui/graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; - 2ED8CC539A9D9BE611F67A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../src/gui/graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5CD42FFF9F1A509D117BD0CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../src/gui/graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; - C18F342C087F69D141B3FAF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../src/gui/graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; - 4011751B9EFCA7B9345D7D7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../src/gui/graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; - 29BC53FEE9BC27F44534C909 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../src/gui/graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; - 795E2BD2D39A3A6E36C26CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../src/gui/graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; - 312F208B501E0D7764C6B613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../src/gui/graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; - ADB84942A96B6B9A0F5D7590 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../src/gui/graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; - 9D3F1BAB1D48DDECB9F35916 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../src/gui/graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; - C2700BB57B9EED7BFE975564 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../src/gui/graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; - 132E3C38B4F0C6229EDF7000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../src/gui/graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; - F8C44FF03700F6140950F373 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../src/gui/graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 1B170F70AF8AA0A39074F671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../src/gui/graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8B7D7435287A20CB2D8E3704 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../src/gui/graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; - 0F1C5770B363EF7DF64A876A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6619D27E74F623B1E8CE8F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - EAF0F2EAB230F7539B91A7FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0337723C9D607B82CF8AA682 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../src/gui/graphics/imaging/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; - 7904C2A3C52959748C46D54F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../src/gui/graphics/imaging/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; - D1BBA8F348C6DA2852A68221 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../src/gui/graphics/imaging/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; - 94D3EBE6E0D9AFE555226A88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; - 16CAB09D19F1A7379506310A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../src/gui/graphics/imaging/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; - 67F4F9E1F6B9B4D1C1A668E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 35A9146C03FC33B577817E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; - 6E4DF7338364956EF42C4493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../src/gui/graphics/imaging/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - BC2326E1A85025E700B1DE3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../src/gui/graphics/imaging/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; - 3FD3FA96955DD648494E76A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../src/io/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; - 974C3A59CC78DB4302B3552A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../src/io/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; - 692A95B19D9C32094A1E07B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../src/io/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; - DC51AF61DC4B345E5E4153E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../src/io/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; - 058702E8697667AEA38254C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../src/io/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 090490A1C3B0002DFAD78C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../src/io/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 6FFB38088C11BAE68368A3E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../src/io/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4EEF0B0BB4C3D1956B04122B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../src/io/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 59B2FFF817679AEA84375E1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../src/io/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - 49BF2B02A6D7B4438FC24839 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../src/io/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; - 00B348FA35A7F691AEF84FBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../src/io/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; - D9B3C04F8EB4228DD59002E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../src/io/files/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; - 42DA88264F768BAACD0414A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../src/io/files/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; - 17C3AF03FF7AE88AE0C73311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../src/io/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 75D6F1C676E178DEA8B86849 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../src/io/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; - 4035C867821E9B5887AA25FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../src/io/files/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4D005659935C7DE99C2C01E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../src/io/files/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; - EFA58F646B69B227AEF14140 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../src/io/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7241B187AA9B0217838B6052 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../src/io/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; - 06B06C420341B005DFF951D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../src/io/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; - 286206E754AC14DEAF88FD43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../src/io/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; - AD7A1C2C82EE714EBDD52EFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../src/io/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; - 21215569A0DCB6ACADD32401 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../src/io/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; - D4211E697F43821CDBCE4F24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../src/io/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7D593A29CAB138BD9AE950BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../src/io/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - BE5DCD603F7E21A1F66CDF33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../src/io/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 304FD4FD5771F00C8EA46C10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../src/io/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; - AE363A1FE2F403F7CE2FDF7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../src/io/streams/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 770082A38CF6071E5CFA563D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../src/io/streams/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - A10A63E2098A85B5CA9265B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../src/io/streams/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8932FA0AA37E1E04CBA55B23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../src/io/streams/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - AC183DCFAF18C9CEB88EEB1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../src/io/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; - 3F60563DEC7941B88163A50E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../src/io/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB059F528EC362F86E4B4278 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../src/io/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; - 39C0783ED515AAA82F9CA37F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../src/io/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - BD4388D88F2F02195AC73AD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../src/io/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - B3F5E7A708350F72E7C77153 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../src/io/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - DFE9A08C4AC8E1809018B5F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../src/io/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - BBE79494A818EF83F52A4C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../src/io/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5F27172FD963C1A748AA625A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../src/io/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; - AE5A7EC70F288E7EA682081D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../src/io/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6F7CA1B3AD09C76271FED3D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../src/io/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; - 7A039686F4F852E26936CA53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../src/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; - 161894D0D279595D88F470A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../src/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; - 868E43A4BB7015579789E4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../src/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8E0874D93125C2DC34255EDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../src/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; - 7C2A4084A267F57F2E27F3F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../src/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - D99C977ACCD09262F06F6624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../src/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; - A978BD4031CAE24FB0FE26E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../src/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; - 1A656E62C071C54D28343AC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../src/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; - 252632F3F97DF57C0781BEAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../src/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; - 8FB80383DF3BAD7227DF465A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../src/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; - FE76B46873DE20DFDC5A94BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../src/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; - 28C4C81039B42A399F5B7320 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../src/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; - 341631A7E86BF1C0E49093C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../src/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; - AD655AA04981173716022D8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../src/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; - F1D085B5F12E814BF1D5C395 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../src/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; - 58654C2630387C4A336A5BFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../src/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 524A70C9F23954F8F2A3F99B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../src/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; - E05812E3CC31875A202D6B30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../src/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 224C989BF83B6EA867814BFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../src/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; - 213F0A7BF38AF6AB34414A45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../src/native/common/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; - 21B2342B75097AB93CFF7E97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../src/native/common/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2C48BB1A286C6A63174E5798 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../src/native/common/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; - 7A51D8B81F390A4CABF25C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Audio.cpp"; path = "../../src/native/linux/juce_linux_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76DB94CC776536F5D05B9445 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../src/native/linux/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - AA698DD5A82F91CF84A29666 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../src/native/linux/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; - FABA493FEE07E6373DD8EB41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../src/native/linux/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 595EBA8A689DA899986314D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../src/native/linux/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - EACFC12E665283EB7926E9EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../src/native/linux/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - BAE5CE629DF9D286293E616F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../src/native/linux/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4C499CB25F043FE667BC5E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../src/native/linux/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4366712140FBEBEDBCBDCE9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../src/native/linux/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - E0A2C24581917DD090186333 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_NativeCode.cpp"; path = "../../src/native/linux/juce_linux_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - E61B485B10F8D4A3986953CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_linux_NativeIncludes.h"; path = "../../src/native/linux/juce_linux_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - 3F3D429025A92B6F0FB6F8EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../src/native/linux/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - 275F2210628D9E9968B1B258 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../src/native/linux/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5DEA687D261C59CBABB782E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../src/native/linux/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5593DEC14D551C38CCB50D70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../src/native/linux/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - B8E47498C7C6D5ECF41F0EAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../src/native/linux/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9DC2C10B16A645EEB82220D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../src/native/linux/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE5F18DF1DED7617C4A41FF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../src/native/mac/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2BCE9DDC8F0F54CA3D913E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../src/native/mac/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; - 5249EFBE3B22E6FC1A7B6D42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../src/native/mac/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; - A257B76FCE9D594EAD41414C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../src/native/mac/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - 8280AA34B23B4D366711A9E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../src/native/mac/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; - C9561A66310DAD5EEB4A9462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../src/native/mac/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; - B62991F8AEE7327BA8A5070F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../src/native/mac/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; - 013F753639A6350C8DC602AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../src/native/mac/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; - 6B46AB1931E43DAFB278D23D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../src/native/mac/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 72524FE185FF48DC1F954341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../src/native/mac/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF5307F364AC9250D8625168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../src/native/mac/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; - AA4823F2F2A78C43D7A039D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../src/native/mac/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; - 87A5A064CC3CD55BA5D7617D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../src/native/mac/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; - 641638A0466CEC1BDEAFB476 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../src/native/mac/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; - 7DB37383434F45D8A7B674C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../src/native/mac/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; - CB16B2438EDCC10C499645E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../src/native/mac/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; - BEB35C6173793C1CB7AB6311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../src/native/mac/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; - BA58B49B820A47F6F55CDACB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../src/native/mac/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; - 930E58E13FC92BF70AC20EEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NativeCode.mm"; path = "../../src/native/mac/juce_mac_NativeCode.mm"; sourceTree = "SOURCE_ROOT"; }; - 2F1812B26076D9CC1495D452 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_NativeIncludes.h"; path = "../../src/native/mac/juce_mac_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - 9113CDD122D2790E147A8CF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../src/native/mac/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; - EE56999A85AF18015C540183 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../src/native/mac/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - 189F69E0B926C73B654D6951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../src/native/mac/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; - B9E16F4636FF8C0A1FC8BEFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../src/native/mac/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; - AE9A7A0775FA806126A74E16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../src/native/mac/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - 4F5D1AA83981FBCD33CE234F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../src/native/mac/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - E6A7BFB0FCD17A9B133CDFA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../src/native/mac/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; - FE6E3F911679B0D7547577A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../src/native/mac/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; - 8BCE60CBC91DBAAB089958A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../src/native/mac/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; - 3F11593DC3A168A52FCC2DD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../src/native/mac/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; - FC2C82760E717788B5A6E691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../src/native/mac/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - AB0F3F5A622CBB251F64945A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../src/native/mac/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; - AD495FA1991295C722B46843 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../src/native/mac/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 42059626955C547DA6AD3196 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../src/native/windows/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F383A785B4876198C5B0194 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../src/native/windows/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; - F3B50EE3939E9F16D13C3C7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../src/native/windows/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_AutoLinkLibraries.h"; path = "../../src/native/windows/juce_win32_AutoLinkLibraries.h"; sourceTree = "SOURCE_ROOT"; }; - 3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../src/native/windows/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - B296F736C0CD6AC15BE6424B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../src/native/windows/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; - 7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - 249959E338D7750E56A9F2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../src/native/windows/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../src/native/windows/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; - DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../src/native/windows/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7527A5E8F4F39581159D3E5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../src/native/windows/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1DBF9DAAD0690CB2CA4E9960 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../src/native/windows/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - E9B203E963EB1AB566061AC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../src/native/windows/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; - BA561E64C6400CFB1DE013F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../src/native/windows/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 061B492EABD6B1C995D581A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../src/native/windows/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - 50159A5B7A552A6C1EB557F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_NativeCode.cpp"; path = "../../src/native/windows/juce_win32_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - E7625D7A06CBC11F40A56A70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_NativeIncludes.h"; path = "../../src/native/windows/juce_win32_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - CDA5FCC51F6C1E84D7DC3274 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../src/native/windows/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - B14735381ADB00741166E330 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../src/native/windows/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 09AE0882D58BE1715219556A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../src/native/windows/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0EB41C0AB478EE02D8C851F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../src/native/windows/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; - FBE07C5CC622A5D36BDAB9E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../src/native/windows/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - B07C853EB60D8D8691BC1B4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../src/native/windows/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5D32C8856093B33438AEB758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../src/native/windows/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8758E6857070D7E5406FDE3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../src/native/windows/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8E8BE2F1C182E418BBA6903C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../src/native/windows/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - 03B9D3D9042E85BDD691325E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../src/native/android/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - 13C661B79E1E9508512A6B21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../src/native/android/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; - F2F68E50F42BD0F124E89E2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../src/native/android/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 59C46E289F86C80D4341EAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../src/native/android/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; - FA82460758BDCB2DCCE1EAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../src/native/android/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE06EEED7426AA45C27B629C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../src/native/android/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; - F439E6C4B2D2AF19645252C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../src/native/android/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 1D74C9567283836ECC70E48B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../src/native/android/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; - 40216CE846A54CE706131A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../src/native/android/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; - E646726910F110DC34DD1662 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../src/native/android/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9AF9F1C0D766D4F894E4A7B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_NativeCode.cpp"; path = "../../src/native/android/juce_android_NativeCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - 902C32F471DA6C435E80372B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_NativeIncludes.h"; path = "../../src/native/android/juce_android_NativeIncludes.h"; sourceTree = "SOURCE_ROOT"; }; - A404CD721E2A0F0CAE9326C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../src/native/android/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - 32B7C3609BDA01AA09740139 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../src/native/android/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CEF7210E311274F1DFAB6882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../src/native/android/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; - 755C440534C0EB494572B3F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../src/native/android/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; - EE855319AF344A05C92580C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../src/native/android/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - FCD02A40985242A8A6648311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../src/native/android/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; - 76E2084D2148068F9138A816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../src/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; - 33F16EE4F38C9B76E7FAEF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../src/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - 72F5ED2E8B945988C37EA9CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../src/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; - 663746215E9BA6C761172B85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../src/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; - C3FD9D93626F80A45F9B6DDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../src/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; - 4007410FACA2F865FD8EF769 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../src/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; - 8273A206FB309671284959DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../src/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF888BC540B64D5C61E46A34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../src/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; - 644FD6155385BC3AA270FB5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../src/text/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB092FB152F43900272F8E43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../src/text/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; - 4A97C8D2FF6454DDD3AF4BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../src/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2AA21CDC91EA122266EBD780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../src/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; - 35DA3E75DDB03BB35794289B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../src/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; - B507B4A8712A54D7A8C03223 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../src/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1EE2A763E06AF4951024950F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../src/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; - 23252E4C97AEFAE0C5EEAA77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../src/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4FED84C92ADC4B2C41A4275 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../src/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; - 81B36E7C56DF1A777AA04F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../src/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; - E5458BE2F33DBBF5AF834BB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../src/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; - 0EC7DE81A516F4130AC59557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../src/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - C972C24A7D2FC817362E1FD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../src/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; - 5715BC14D93D61D71206FCB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../src/text/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - B4575FEE10C67D45C9532540 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../src/text/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 95F21C2733BD5932372E4157 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../src/text/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4EF8C44FF03700F6140950F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../src/text/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; - 40282E23D43D86D122CA5C54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../src/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; - EC240B4379FB70C8A8AC2855 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../src/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; - 5508D42FCF7A1C8A8CD78BF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../src/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; - 90E4999A78655A238AF42BC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../src/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; - 8E78623B2D21CFE68DEC0483 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../src/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E622C38E4BD511B6ABBF7AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../src/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; - 6734838B47EF0D9ACEE571CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../src/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; - F00BDEF5CE2B281CBE2E89A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../src/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; - C5F20B02D7843F3C5ABEDFD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../src/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; - 1FD1C9A3D2DB64C825FDAC8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../src/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; - 4D60F7F748CF6702D1E45960 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../src/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; - EFE26D4E1E2B92828DBA3A99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../src/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; - EF06213027EA3F7C54EE0F18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../src/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - C25E5F90524645D684C674CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../src/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; - 60F21CB42270ACE2241544A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../src/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; - ED84C92ADC4B2C41A4275F92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../src/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; - 3268C8DBAB23CF503BF30935 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../src/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; - B4435D42216365FA97651272 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../src/utilities/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE216F2485CD5EFEA91554F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../src/utilities/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; - 599F5C47BB9B5898E0E88CF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../src/utilities/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9620E4769876FC01ECE885D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../src/utilities/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 4BE2727CCD2CD7603402C8FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../src/utilities/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7FDACEA80794451691A12703 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../src/utilities/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; - A618FC3255ECE14EC9259E6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../src/utilities/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; - A2D6317BEEC77A62E8F834AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../src/utilities/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; - 7F1AC20BE8A18CA6BB7403EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../src/utilities/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; - FA833EFA9E93C7DBE6624676 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../src/utilities/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; - EECE464606AE845BFC4B941B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../src/utilities/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; - A59A5DCFCCAAEA79D03C2B27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../src/utilities/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3C9E6597968358B57374502C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../src/utilities/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; - ADE5F12AA5AD969E2C7002B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../src/utilities/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; - 75700D13513346310CEAC30D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../src/utilities/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; - AAC585C4648559DD713F28FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../src/utilities/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; - 2FD5C998952BE08F8ED3F262 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce.h; path = ../../juce.h; sourceTree = "SOURCE_ROOT"; }; - 01778F26212AECCBF2452804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Config.h"; path = "../../juce_Config.h"; sourceTree = "SOURCE_ROOT"; }; - D443FD24B52106986FC8A531 = { isa = PBXGroup; children = ( - 144F56FCF3DF9EC922765901, - F6A490BA93AC3558E9A6FBB0, - CB9766F7A9C612B326D808CB, - 36A407F2BE4A625184B5CCFD, - 4E74130693EE120D905818AC, - 21E1DBFAB3FB75875EA35280, - EDF52AB382E80530E8FED9A0, - 415BD77DF4B2F4760D138735, - 8422E662212FA2082644A942, - BA97FEDA576503A21D971F1E, - E03C84620DCB004172C09B28 ); name = application; sourceTree = ""; }; - 2038F3EDCC94040C77D7620C = { isa = PBXGroup; children = ( - 1AA8BE2D76E153874FB08197, - 05C5C546E12C6422D865D864, - 1F5A667524FB005D872340E1, - 0877D5750D6F21C5231687CA, - 1BBE03BB0D71FEEEA440682B, - 7D85530D76756C33795ECCE9, - 013E8938EE1C6B4F63016B55, - 93006D32B18174D9FE0A5E9E, - 41070806F82EC9C6D1C67689, - 9349E14552FEA0371553E808, - 27356F5E93CEA4D472D83D8E, - 2AD64F53E12B20011B7A0DB7, - 8BD38C2507C0F8E28930A4F8, - 59597FA0A88A08937801D198, - AE7F7F0D959C2E3CF5989C88, - 27C3C51DF2519B519B76E2EE, - 7B34E897026857C84399A09C, - CB32D4EE59D5CA9DB12F944D, - 3442FA257104DC3F43E7F870, - 203AC66FFB20EAD2E7A594BD, - C9F1015CA457A61082398E34, - E00781B15E47C9CB9E94869D, - 7C06BD13BF7E0097EB0A8D08, - DA868174D4D2059AC1BE7E71, - 25B1AC1A6767AAD9E9515A18, - 7CF036906034FABB44D2108F, - DB5CAB7BC2973ABFF0867BCB, - D5D2FD212300E7D49ED74823, - 87A18C425F53C2098B1D42FE ); name = "audio_file_formats"; sourceTree = ""; }; - A319A40925DF075E2C31C2FC = { isa = PBXGroup; children = ( - 7AE5295A472723B26537FAEC, - 51287E236C749092458BA2DD, - 4C3258A1978AF3D357D196C6, - FBB2EEF0E5EC5EB6F89E9066, - AE9C08108699C71A289462B7, - 74AD63909D3EE09D63256A76, - 67A8F408B1EC63407C9241B2, - 5D6E837F124C347B3C1CAE23, - E1EA83B7EF928DC88D069AEC, - 1511366CAD437989DAA30CF2, - EA630BFFF638BBBC8FDC0018, - D86718CE7E5DEF2071AC3D17, - 76BB7F75A7F9930ED5A0CDB6, - 9A8053936C35A19B9E98623A, - 9CB1126A9FBFF1D6D6469AF9, - C63D6EC0555C13C1B79A6AAD, - E2A56C23BF2BB466BB273E3E, - BE5DB55285441D501FED3C00, - 5403C2A4DEE7B9B3B34235F8, - 0F70C4D118AC7625B4C42CD4, - 3988438157D4B75177703F8A, - 6AC857F51FD805D7BD3EF712 ); name = "audio_sources"; sourceTree = ""; }; - BF8F3D00CE4E97468E8BBC55 = { isa = PBXGroup; children = ( - 6841D6AC927D02113F3AEBD4, - E668D9C7FF084E59405A2A9E, - C7DB1BB9AF7FE0A2AA38D767, - 95CA8EE24AFBB1F2F29A5394, - EAFD034BB1721BFBF9A3795E, - EFAFC937377A21E9AC0F9776 ); name = devices; sourceTree = ""; }; - 53C441C8EEF2860715CC6599 = { isa = PBXGroup; children = ( - 5DB9D903D24646B0C2356A5D, - EBA6B46F7B3C11CA3744A4D0, - A1D687AE613A8B61EB63923D, - 812620B53BE820D26A63B65D, - 11C1A96A35A2F03F8C34BD43, - E68EB4BC75216B5B56E3F937, - EE2259D9768027C2C001EEAD, - 2C55CE1674244DB199C3033F ); name = dsp; sourceTree = ""; }; - 99B60B012D5CCF0BD861011D = { isa = PBXGroup; children = ( - B457515938E7141D5E79B671, - 0604C2E17F0E0DFEFDA19F8D, - 891E0B1AD09C0EA44297E0F2, - EBACA038DBB50817BE80E8C5, - C376B06C58C5D3C972583BBB, - 0731C60911E6985F51325484, - 062F7ACF5282C5B2D4BF5EE1, - DF3833AF6E38E55218FDF23F, - C627F9E9EC160055D65D81CB, - 0D3A77572C7256CE4C115FD7, - A22A0F77C15B1E4A8F2EB42A, - 78D29BB5C76CCF7C21EC0DAF, - DD3886D45B5988B4DAC2D049, - 01712FF0A160032FA1DAA8C2, - 899BD7E18BE1EF7CDF53784C ); name = midi; sourceTree = ""; }; - 844109733F09B5915AF75797 = { isa = PBXGroup; children = ( - 7B88F6B8E3A10CEAD9B0EE88 ); name = AU; sourceTree = ""; }; - FAA6189E385BD13EFEFE2E08 = { isa = PBXGroup; children = ( - 1101E8CB676FDEEF0A89D921, - F222E5825D83E711C9F1B789, - CEAA2B84462EF0B5026EAB0A, - 9A3151864FB90A6A4BCCAE9B, - BCE37F0D994C0ADF2CCFF796, - F52ECCD6C02108A2D7F672F5, - 833C3F205F05BA4ADC883E53 ); name = RTAS; sourceTree = ""; }; - EBF4EE8E84A562DE2EBAE6BB = { isa = PBXGroup; children = ( - 69C4FF0DD888BA25477561C8, - 37E1FC756833849B8C7C1215 ); name = VST; sourceTree = ""; }; - 0F0D49D13522C94A0F37D4AB = { isa = PBXGroup; children = ( - 2741189DF800566462E24A14, - FAC43251D74E5140740BEF60 ); name = Standalone; sourceTree = ""; }; - 2805C9C796CD7D77C2D662BF = { isa = PBXGroup; children = ( - 844109733F09B5915AF75797, - FAA6189E385BD13EFEFE2E08, - EBF4EE8E84A562DE2EBAE6BB, - 0F0D49D13522C94A0F37D4AB, - 2E96F55074F4EB74171EE6B6, - 13F64389F0E25731A98E92CD, - 7CDC2FA849B7ED73A2638A11 ); name = "plugin_client"; sourceTree = ""; }; - B1F82C796B56FCD97D211D8E = { isa = PBXGroup; children = ( - D76BDCCF9E1A1F26A8F578F0, - 50FAF92038EBD0127900AAA1, - 2073E1A497363200233CD34E, - F800E47459B2FE9DEF56F312, - B4291F2CEEC78CFEDEFC360E, - FCBB1DC14311D099809B21F7, - 723EBD80931754F4DD77DD53, - 2EBF36FAAF019B6F811D1C84 ); name = formats; sourceTree = ""; }; - 7AA82894558E047D7D5111E1 = { isa = PBXGroup; children = ( - B1F82C796B56FCD97D211D8E, - 1C8211DFB558D740EF4B173A, - 28534632DF76A1EA837BD0D7, - DA4820727D6DDC75561A262C, - A6415104D1E3E5CE7031C0C1, - E5BA7B8913271E935A1DA487, - 3110B983ACE956D6A24F8C8C, - A3FE51C7DD706F536273AB0E, - B6E20AE45813C0CA9B1014DD, - 4AE3A448D79602BE793BB5AA, - AF47BC3796A74CC15A192E8B, - 3D170AC8FD8E403C54E08F9D, - 9C5C0BCB2A298160025B15FC, - 08C65C3EB60FE8BFA252E3EF ); name = "plugin_host"; sourceTree = ""; }; - 231431F8B23F01DC6ECD4214 = { isa = PBXGroup; children = ( - 4CF107951746567DB63880A3, - AB554593165FE8C8B40F4447, - 3F260C24341E58745AC5BE79, - BC2A50B0B01128E394E9DE9C, - EC0F8FAA7EACE0D275064D60, - D141C024A3F5A6748B0E9ED7, - 19C9509EC7DD00DA7443DEFC, - ABDE16ABC1784B0FD3887A8F, - 08EBC2152F45FB2B839FCCC1, - 350428D4D70AAB88B2B84790, - 096CF2243648F17E1BF5421B, - CAD3312170E5DBE8AA8348BA ); name = processors; sourceTree = ""; }; - DC641C77950A335A20FD4532 = { isa = PBXGroup; children = ( - ED5966B95F865C586A3CE08F, - 6C6C1C360138D9BD4B27588B, - 35668D8EEA19957C6C9AC83A, - 9E6C206F95245BCDE38FB2B5 ); name = synthesisers; sourceTree = ""; }; - F2B0E44A08E127FD31184241 = { isa = PBXGroup; children = ( - 2038F3EDCC94040C77D7620C, - A319A40925DF075E2C31C2FC, - BF8F3D00CE4E97468E8BBC55, - 53C441C8EEF2860715CC6599, - 99B60B012D5CCF0BD861011D, - 2805C9C796CD7D77C2D662BF, - 7AA82894558E047D7D5111E1, - 231431F8B23F01DC6ECD4214, - DC641C77950A335A20FD4532 ); name = audio; sourceTree = ""; }; - 1CC2889DB696E12FC34E3F50 = { isa = PBXGroup; children = ( - 4F22276689685D839BD252EA, - 9584B84F23A4251755D49213, - 839BE8047CF2F8EBE43ED34F, - EDF52FDF87ACD33FE933142C, - F77C9170829579FABA5679AD, - 34C402EF9ADCAD34FB657D43, - 7DA9AC75A4D9227C8FC4B2F7, - 2767E1D082874D301D5D5F43, - 9289A1E6B141F24C57FF0927, - 70E5409425A76782B6188B31, - BB4A73064B0FC74ECCA19116, - C1913C90ED7BE51E823887CD, - 9BD379D2F7995BFE0B3E5369, - C8F0F54CA3D913E7B8D559CF, - D7612CE51ED4F9D3F960F922, - F95BC2FA7861CFF968D661ED, - 2F5FD1DEFAE549553A8BE3B1, - 989E03031D341649B4A296F5, - 1809284DD05B56309D7EA24F, - 69F58BF234EDF6328F624E0A, - 5D27EE211D9BFF6A58C4DC42, - 7CABDD863B47D8ADC900A4D8, - 4DF9D333038A442870668D31, - A81B4FC81A75E21E5B96E506 ); name = containers; sourceTree = ""; }; - 1AF37A533ABDD889670F9349 = { isa = PBXGroup; children = ( - D66C00E06B06EAD3B5257DD6, - C8441B7B3E4CCD4A257B4BFE, - 92ACFFCCCD1C85A0F8C6F80F, - 4555F03DBD059EEDECEF9F85, - 63F44EC0485FCA050814967E, - DF6CAC67C0F2D379BDA03062, - 1159C6BB0D33EE8E1A96B083, - 8292AE37F99FCC1E5BF63A28, - CFAECB6551F48A1695DEC243, - B4137E4612C1D161894D0D27, - 0AD73B8EA0D60D9927B36624, - F51969AF328D2C7D52D7436D, - C25D6136DF9CE441D6EB4C42, - CA66415F6EAA172B83755954, - 18B170E96511BBA1019C66F8, - 45D14EF360BDA1F5692E583D, - 956A1C30D5FE98DBB154204D, - 8D2DE1F3CB15D003C90042E7, - 872020C1EC3997ED744BF1BD, - CEF91E0C9CBB3EBFF9500FDA, - 297B664E9AB86DFE7DCAFF22 ); name = core; sourceTree = ""; }; - 2B74AFA66B37B748487152F4 = { isa = PBXGroup; children = ( - E3C548295935D26121D5D823, - 7A4B0E6FD686BCF0B8CC771E, - EAFD8FAF365DFB32DC42D0E7, - 6E4345FEEB1DC732A16134A4, - E9E692847C14AD33CD5FB40B, - 22612DBDC6C689B605CC6B48, - 7AE9331938549244E27A5D0E, - 16335266AFB4D19F25410E1D, - 4CBD301A08E9C3762F861FC3, - 02CD7BA1750DE36237369F78 ); name = cryptography; sourceTree = ""; }; - 89F308FD85F378E278C98884 = { isa = PBXGroup; children = ( - 31D985CB8646B78460E9D5A7, - 09F7685D1EFF472ECB1F5EF1, - 4EF8BD4BF46C4BCB39F96609, - 5EB7BD94A754E88D076D777A, - 1617348BBF5D103619D76911, - 44DB44953945417F76199479, - D04B6E43A037F985434B2F5A, - B80F8CD026033ACCCE11A1A4, - 5F454A6B5A82ECE2396C5716, - B2D08C8EEE3E22026533D2EA, - AE68ECB6E063BD8D4984C0B3, - 4B935D7360C9F166C80A158D, - 843A7B398E9411F0AF28D65D, - 57DD8EEE88C0D366E0354478, - 80633D64E9EFA1433454669B, - 9CF077D3ED7B7B56F351AAF6, - 7A1219C6560BDBE2E170D2A9, - E594F70DC2F292FF1EF65CB6, - BE17B7279B4BF40E51C12F47, - E2D07ED5E1A4A460E0DEF59C, - 2EBDE3FF4894D72C310C9F84, - 1F2CFBF13ADCA05C0DC2D7D4, - C51E9973A6FAB635081B9FDC, - C818B558D6D5B62A80621281, - 32C0312A5D246D41AAD98A11 ); name = events; sourceTree = ""; }; - 2DB55F83F4310F0C4E4E03AA = { isa = PBXGroup; children = ( - 18EE6576A9ED098632CE5155, - EB182DC4124FEFFFC87D12C4, - 8B1C747E63EEF036AD9AF3D8, - ECA97019B42083AD879B5B97, - 1C3D15546065C1A9AA5AA0C6, - B2032A24364695450A5E6A76, - BA415BD77DF4B2F4760D1387, - B72C0FB8DDC0F1102DF42943, - 6930E651AEE97FD47E185EC9, - 96FD3A02BA915E460520A0B7, - E927E4A58A84B21AA6B38A44, - F2212B7F42E26C3DD86800F2, - 09AE2C7E2573204A7A35452B, - B394145555DCB9E0FAA5522C, - 9846D4523B3425BBB04107EE, - 455176F8EDBA7A9DCEAA1367, - F750738F398054AB38250780, - DFF08DC68372AEE17EAA9CC7 ); name = buttons; sourceTree = ""; }; - 17B11D96CDB313ED60D8CFE0 = { isa = PBXGroup; children = ( - A3CB18F915377AC3FFA2E5F4, - B28C2EBD0846A09DAEDDFF4E, - 04F48B09426293224576DA9A, - DF6B4E787E39CD446ED2EEEE, - C992FDA4396430392CFAD150, - 346CC505FAFEE9451040108D, - 3384A91143018ED9346E4118 ); name = "code_editor"; sourceTree = ""; }; - BCB2FFE7C2A4084A267F57F2 = { isa = PBXGroup; children = ( - ADC16C18C8237A7F8E35E37A, - D8EB3EA456D9FCC211CD1ED5, - 0D3FA24FF38399E0EDA80860, - CA3454A9B6F80A2F4735C37E, - 7330A9643F50DE8BEACDBB61, - C0CC0FA84A4F7AA76C1611CB, - 1BC6C010045A06BDB4C684F6, - 3FFCAECECC0D469A010F7AF1, - 71B6CE03D6DB07BB293C8206, - 1DB68310EA4D6180FF948AA0, - 3CE16163A43A6E67428385EE, - E698677EEC8E88CAFF542764, - 6BB68B37C7B0BB4DA8326647, - 1EA844F7CC5377A14B0FD21C, - 76E073B2A3F59A3ACD20CC87, - 8BA30F0AFF5EA0E1A0203ACB, - A4E66D702028A22D8157241C, - CB6BF5E15522D8A272032AE9, - 53EB02EEDF5E7971EAB9E795, - 82FEB35063C3559D2F46AA6F, - 37E48B8F8AD2BC448E5935C7, - A77096E86054F70AC0A3B69E, - 981BACFF7892B83828313D8E, - D317D4B5BA40A5754EE56F47, - 8400CA0D3C2AB7A60A7329FB, - BC209F6862D5923B8F9E3080, - B0D261D42091AAD1560A0D63 ); name = controls; sourceTree = ""; }; - 2FE3729520998304E4B05FBA = { isa = PBXGroup; children = ( - B60FE8BFA252E3EF2D60B77A, - 79ABAD7BB654030EF29B8B9C, - D3B56583D4F60069296DB959, - 3A4ABC7E24F155A8CAF027B3, - B1DEB4E0BBFE7E2D052165BD, - F9FEE6DAB2B2752AC13D7286, - 85F0A0454489E4AF1F80AC83, - 102BAE57AAA43A7685FCBD9A, - F631A108CB5015BFA2E25E00, - 730CAA344708954DE271072C, - 295793C7AA1A57DC4BBCBBC4, - D54308F25AEE3110A166F2BE, - 3AF50EADB5B2C973E0C8EE9F, - 9A9D8C524A070162517620E5, - CD6C610A843822A7FA53E9D7, - CA1B41922D8094982F967DBD, - E9E66775B2F13ACD0B751E69, - B689E250203DE38D6D4F39F9, - 29DFAA512171B967D687A945, - 0AB8288D92FDFA00F30FB8DE, - A418FC3BDDBF1CE9F2903490, - 0EAD906B617A1A17305CB9F4, - 949854EDE6B5B16CEFB6108F, - F39059E72B927A700010851B, - 8A67B45A2BA1D19D1AC43315, - ECDD0F8397F3EE4E7FA7ACCC ); name = filebrowser; sourceTree = ""; }; - 558A664D5D1ECEC607F4775D = { isa = PBXGroup; children = ( - 912C419859C9C56BC96AA6FB, - 717295136FD426125079F78C, - 5ABC6616473BA4791AA8101E, - F61C34EE417006881D0869F4, - 29A79478AE8567250972ED43, - FB080C47434A8FAB73B8F486, - 7F5A271EAB78C7CF8B2341DE, - 92EDE6EA48F94DC5A0BCB24A, - A00C6593BFBFA76043BC0C06, - 02982EB6A81020D3D421AED3, - F1A33029252D29A6ADF171B0, - 15C6FD019B274AA51B4E2D76, - B1E8FF009812F29C2620E6BB, - FAEEA3536AD17B2667A1BB94, - D64DD9F41E4598606855DFCF, - 7356F5E93CEA4D472D83D8E5 ); name = keyboard; sourceTree = ""; }; - D75AAB3AB61247E962C00692 = { isa = PBXGroup; children = ( - 921B616E2229AEB6390D2B57, - FE1072B5FB77E8FEE1BEBDFE, - 07191E1A9805FA6E6F253FF6, - 2EC173A08676F6E592A7B347, - 45E5EE9E0173683D721FABDA, - 2D3A362DD3833B9E70B10FD3, - F8FCCCE06D31FEF697FCD80D, - 44CDA79090B115C3B62A2168, - A6AD7357F905309D1B461EB7, - E9242E8425497D889C764C66, - FF046140CCF1EDB0DFF80178, - B6A223FB5B4A9388C83D6FC7, - A95F42C5CB0C2E5052B31568, - 600B2FDBBBE812784CB49A69, - A31221E2A50CCE9DF06B5F4B, - CB54AC3D311C44A1F3B463A5, - 3D8B0E86C98E2EE49AE868C8, - 238965266F88730956D776DB, - B116FEC4D544DB8E38CB571E, - 797C94BB7F42CBBAACCFFB87, - F1F65C9E7394E04E073A57A4, - F64E8284F142600B9F519B07, - 993C90B10202DA78FA31CC58, - 8C0FFF811E06D162050CAB14, - 079CFB5DEF6F2B71E2910A22, - D5F5282BE0F43A5E16824749, - 143F36BCDE7A65EBA33900ED, - 093E54DECB8191CA74D79176, - F2C653BA4552E6838DFA4F87, - C42D9251031A81B5CF2C843B, - D41423657626ACA672A9DED9, - 811149E18993F029165D330D ); name = layout; sourceTree = ""; }; - EAE72EDE682D52DF77747660 = { isa = PBXGroup; children = ( - FD004BDDCEDB7E324983F70C, - 7B991020107EC0D54965BCA2, - B92ACF027E63D1C788DEC893, - 3C739F61EE232C75546D4DCF ); name = lookandfeel; sourceTree = ""; }; - 870DE7235866DA3B81B683B8 = { isa = PBXGroup; children = ( - 218D7D73C086866E587FFD01, - BB93D3C283731C0B25B7AAAE, - 1DDE0A8E4C5857715D9B5FAE, - 502B3625329816EA6330465F, - 6AACD2FD239E39F87B666C6F, - A563BC883D801CF5956DC4BC ); name = menus; sourceTree = ""; }; - 4F37E36BA5E052B3BD4B87AD = { isa = PBXGroup; children = ( - 9E4B3BAB9BDB06B60D28DF48, - BCDD702ED33BADF3FC19384C, - 3D74B30C63465C32E26D8E33, - D4993649A93B73052C8045EF, - 31EE71EA61B4ED293481EB97, - A08313B5F112579D130373BF, - E1CA0B04EDE60771B81B9700, - 944BC51C440C167C5B2A23E3, - 136109B3076DDA7B2E01CF90, - 067D84F9291770240D1AB5B4, - 50C02B44D0CB18898F575B1E, - 441257DD380138C03568FCBD, - 07CF9AF337779EB486AC92BF, - 2886656DF7ACC9DDC888827F, - 0C28F27F9D1CE6CD65185760, - 89AA49DD2A63D80E90A56768 ); name = mouse; sourceTree = ""; }; - 362862B72D7FF7997C44CECF = { isa = PBXGroup; children = ( - 82DFF1BD3665DC32672FCCE8, - 5B6CD1833A98F9844B7E3FF4, - D39C0B853C3EBBBD11E7C71E, - 657546D70AB7B2709619E07A, - D31704DAB806B6AF3ED52DC7, - 574EC603B2B1189687851319, - 243EF1A31A779413BC2D5B98, - 72EFFDE39C7255D50F926944, - 36BB6DDF702EC9B3DAC851FF, - A3B6342C6207D452F6AD985C, - 9DA988F1D7CE29E0DFED7EF0, - C1A3232DDB617A20D9C26526, - 072D77C3834B1B3FB77F277B, - 749CA35420339A25BA4E500F ); name = positioning; sourceTree = ""; }; - 0F03F34FC3542EF0CF8B31E6 = { isa = PBXGroup; children = ( - 1C3FFBA02AE51EDD72A6250B, - B422688E380911F3C21E3F04, - C45E7E6B6E45DEFBF80940DD, - C1F662CED371C843E4EE03B2, - ECCBF2452804ECB2D5B4BC50, - C6B318D6930A05FF86AD97DA, - E2C948680009D1744CEDBC25, - 5B9E9460EAA932889DDC4873, - 0984A4BA00D6AAFB463657F4, - 02685CE4575D6E9B8CCC7738, - 3451124EC2809C9BB591DF93, - B568DEC2B352281BC63B33CD, - 84311C1F5A8ACC8DF4D6FF34, - 3641ABC17D67038746897FA7 ); name = properties; sourceTree = ""; }; - 5C03BF1C4CF3DEE1E0D6A3A1 = { isa = PBXGroup; children = ( - E748C93240CDD61473B0107F, - DED871B1C7458B15DE7C9234, - 26E787FFC68224BF8EB5A458, - 11F1658A055C45FE824FD2DB, - 4DFF179AFD87D34C7E23B1E5, - 4C3C3AFC3D97C1378B7D7435, - C25DFA2F2B673EB0146412BB, - 0A20E7E561633610A76A34AB, - CD9F817B7EF0DA080668A3A8, - 4BF7A01BCE61A5068CA13D8F, - 9C1D5CDA61FB51F657DA8B22, - 7DB8CFB77EA690ACF54C63B4, - 3C8C1AAF32DFECB89EB83271, - 127FC743FE67E6EEF2531BD5, - 4387C6496C7079FB0032B99D, - 1317F0BE5EC80371F744967B, - 826CC87E9E280F46B6D62B64, - A34C0E63D41CFF5E55FD1D9E, - 6BE989C709D2D1D017548447, - 529CB909220344AD55944372, - A9DB12F944D9DC336AD0A78B, - CC04F253CB70B20B774801A9, - D9847FECA6801E9A61007D50, - 740D1808DB934123F05A1598 ); name = special; sourceTree = ""; }; - 48D41BA310DED74E900A5AB0 = { isa = PBXGroup; children = ( - A5AAF4475138358F33D4904A, - 72C4FDDDB8602591DD4F7B3B, - 8AEF18EE9B12D4677F96B709, - 8F54431CD3A672B1EB8335BE, - 2FFDC7636EFC2D7F74590A31, - 12C66C90F3192AFFD6BCEDB6, - 929FEA5458430B7AE23BBB46, - C286C779DD52C29F86E3DBE9, - 090907E4FE95EE2B11C1A0E1, - 6E522DF13EC47755234A5D57, - 3FC6FC331B4E104D1DC223D6, - 2E4A5F7128313C23AD0356F7, - 207CDD87107EAC8ED17DD601, - 87E57C8F3448D615271CD9F6, - 7C06FF93D655B9987000ECA9, - D7772BC5E4E455AE2916A87D, - 2FC449D291A603E26E938F52, - 6C33842C52B61407CACCA858, - 6165F485E931EF9F69D2145F, - A24990B395323FBAC0BEFB5A, - C7C882D550E3B72FA5EFA88A ); name = windows; sourceTree = ""; }; - 92D807F41C69EA70B3D78B08 = { isa = PBXGroup; children = ( - D0D9267E200BD462361810F7, - 17A21B31FD41D00A4088FADF, - E13F33E386E1A0D5FC546521, - A0D6308567AAA50D1163D9D3, - 621B3A4B154182F69DDE2989, - A1F58C1A972425C2B43DD1B3, - 2FFF9AFE4BD9437CE096E52B, - 41C8C324F13ADA3423FC3B0F, - 2DB55F83F4310F0C4E4E03AA, - 17B11D96CDB313ED60D8CFE0, - BCB2FFE7C2A4084A267F57F2, - 2FE3729520998304E4B05FBA, - 558A664D5D1ECEC607F4775D, - D75AAB3AB61247E962C00692, - EAE72EDE682D52DF77747660, - 870DE7235866DA3B81B683B8, - 4F37E36BA5E052B3BD4B87AD, - 362862B72D7FF7997C44CECF, - 0F03F34FC3542EF0CF8B31E6, - 5C03BF1C4CF3DEE1E0D6A3A1, - 48D41BA310DED74E900A5AB0 ); name = components; sourceTree = ""; }; - 4FB94A8F4982BFC449BCDF15 = { isa = PBXGroup; children = ( - EF18D0073BE50E572ADD9A1C, - 8F6F9E1FD31E1A6268CFD3F9, - D36EFC4421056277BA87387E, - 3AE0BD116486BCE37F0D994C, - 41AF663E626B8F6D319B9966, - C913994AAA448C9F22ACF100, - 112017AA0A061CF080DBD504 ); name = colour; sourceTree = ""; }; - 5C291A35207CB6C58F653E05 = { isa = PBXGroup; children = ( - 3EC800323255128D69539BAE, - BD52C1CCEAF6FEC311B9FDA1, - B7251E779500BA77F5522CC7, - 1F0DB4B2825AF638183B50D6, - EF50EEDCAB08F842AB8DE6DA, - 6320F9BAFA094B5C0C828C58, - 2E03ADF975A126C1F2F7B667, - 36268DD78D00323D391ECAAB, - D6B4FED1F1D9FB82C6424438, - ED3ED8389001D55FBDCF1087, - 5792CC17E9DFB966371CBEE1, - 835CC2A1E67E7B19E41F8FBD, - A7A8BE6B30C70701A10B5BD5, - FF052647D2EFA985D05C8E83, - 2B90FAFBC65FB79A5D74E816 ); name = contexts; sourceTree = ""; }; - 097AEBBD16544F0BEEE32245 = { isa = PBXGroup; children = ( - 504730C9B9F60192C2577979, - B6A249ADEC5400011AA671D9, - 85B7BCACB40E02815844F71D, - 00B5FB5ABF4F13EC5D28E34D, - A54BC72C899A2AF82E1E37F8, - 849E645981CA10B8D5576462, - 582DCC2F948F1DEA0D450B0D, - 17EBDF689C731DA257B243C9, - E0694CD7C814AA99E5A84799, - 0FA9E378EBD7EE63EF72124F, - 62967D33232C5A86D88084B4, - 2FBD6F49349E7CC8FC2051EA, - C17613C202D8E1C366F21D3C, - 1FA43B2E4244CD74B551DAD6, - 2BFC199D03DEEC329D6A7CB1 ); name = drawables; sourceTree = ""; }; - 6D6492A7E3B70A5E76AFB49B = { isa = PBXGroup; children = ( - 32EA297812F1C88B42099501, - 85D4043F9E25047E07496DAC, - CB649686575473223C859482, - FD1FA4ABB4226372235643E4, - 18DB9BD10F140F132A3279C3 ); name = effects; sourceTree = ""; }; - 58FE42C578BFFD1F8F545B39 = { isa = PBXGroup; children = ( - BA17B023595ECD8166A231D1, - 6B4E90767D784246EC4E1944, - 78068AA59A5DCFCCAAEA79D0, - 0401EA0E883CCAAAC6960A27, - 61D06B694603F608CDA0703B, - 8117D400F45F1DF157634824, - 91CB423DBC5F3CBEDD9CF2EF, - 4284BA7A26C7F6DEB00B4366, - AF66A9951377E2D04C54CADD, - 932024E0F2A2CC22B7657691 ); name = fonts; sourceTree = ""; }; - BF4679D9201C5AAE6751536B = { isa = PBXGroup; children = ( - 2ED8CC539A9D9BE611F67A9A, - 5CD42FFF9F1A509D117BD0CB, - C18F342C087F69D141B3FAF5, - 4011751B9EFCA7B9345D7D7C, - 29BC53FEE9BC27F44534C909, - 795E2BD2D39A3A6E36C26CBF, - 312F208B501E0D7764C6B613, - ADB84942A96B6B9A0F5D7590, - 9D3F1BAB1D48DDECB9F35916, - C2700BB57B9EED7BFE975564, - 132E3C38B4F0C6229EDF7000, - F8C44FF03700F6140950F373, - 1B170F70AF8AA0A39074F671, - 8B7D7435287A20CB2D8E3704 ); name = geometry; sourceTree = ""; }; - D71FD838B3FD1536FCA839A4 = { isa = PBXGroup; children = ( - 0F1C5770B363EF7DF64A876A, - 6619D27E74F623B1E8CE8F71, - EAF0F2EAB230F7539B91A7FB ); name = "image_file_formats"; sourceTree = ""; }; - 36A6F90D0C87EA1D8FBE9EC0 = { isa = PBXGroup; children = ( - D71FD838B3FD1536FCA839A4, - 0337723C9D607B82CF8AA682, - 7904C2A3C52959748C46D54F, - D1BBA8F348C6DA2852A68221, - 94D3EBE6E0D9AFE555226A88, - 16CAB09D19F1A7379506310A, - 67F4F9E1F6B9B4D1C1A668E5, - 35A9146C03FC33B577817E9E, - 6E4DF7338364956EF42C4493, - BC2326E1A85025E700B1DE3D ); name = imaging; sourceTree = ""; }; - 1BC496671A99D62A223BB364 = { isa = PBXGroup; children = ( - 4FB94A8F4982BFC449BCDF15, - 5C291A35207CB6C58F653E05, - 097AEBBD16544F0BEEE32245, - 6D6492A7E3B70A5E76AFB49B, - 58FE42C578BFFD1F8F545B39, - BF4679D9201C5AAE6751536B, - 36A6F90D0C87EA1D8FBE9EC0 ); name = graphics; sourceTree = ""; }; - A11081920ACF526B1320CA42 = { isa = PBXGroup; children = ( - 92D807F41C69EA70B3D78B08, - 1BC496671A99D62A223BB364 ); name = gui; sourceTree = ""; }; - 3C4DE044AE46D5AE2388C827 = { isa = PBXGroup; children = ( - 3FD3FA96955DD648494E76A4, - 974C3A59CC78DB4302B3552A, - 692A95B19D9C32094A1E07B9, - DC51AF61DC4B345E5E4153E3, - 058702E8697667AEA38254C1, - 090490A1C3B0002DFAD78C7B, - 6FFB38088C11BAE68368A3E7, - 4EEF0B0BB4C3D1956B04122B, - 59B2FFF817679AEA84375E1B, - 49BF2B02A6D7B4438FC24839, - 00B348FA35A7F691AEF84FBA, - D9B3C04F8EB4228DD59002E7, - 42DA88264F768BAACD0414A3, - 17C3AF03FF7AE88AE0C73311, - 75D6F1C676E178DEA8B86849, - 4035C867821E9B5887AA25FB, - 4D005659935C7DE99C2C01E2 ); name = files; sourceTree = ""; }; - 13FBF71BD76A08C8971C6351 = { isa = PBXGroup; children = ( - EFA58F646B69B227AEF14140, - 7241B187AA9B0217838B6052, - 06B06C420341B005DFF951D2, - 286206E754AC14DEAF88FD43, - AD7A1C2C82EE714EBDD52EFC, - 21215569A0DCB6ACADD32401 ); name = network; sourceTree = ""; }; - 177636E4EEEBBB139F934897 = { isa = PBXGroup; children = ( - D4211E697F43821CDBCE4F24, - 7D593A29CAB138BD9AE950BA, - BE5DCD603F7E21A1F66CDF33, - 304FD4FD5771F00C8EA46C10, - AE363A1FE2F403F7CE2FDF7F, - 770082A38CF6071E5CFA563D, - A10A63E2098A85B5CA9265B1, - 8932FA0AA37E1E04CBA55B23, - AC183DCFAF18C9CEB88EEB1E, - 3F60563DEC7941B88163A50E, - BB059F528EC362F86E4B4278, - 39C0783ED515AAA82F9CA37F, - BD4388D88F2F02195AC73AD1, - B3F5E7A708350F72E7C77153, - DFE9A08C4AC8E1809018B5F4, - BBE79494A818EF83F52A4C7B, - 5F27172FD963C1A748AA625A, - AE5A7EC70F288E7EA682081D, - 6F7CA1B3AD09C76271FED3D6 ); name = streams; sourceTree = ""; }; - 0C54591C1E8594B59F4701FE = { isa = PBXGroup; children = ( - 3C4DE044AE46D5AE2388C827, - 13FBF71BD76A08C8971C6351, - 177636E4EEEBBB139F934897 ); name = io; sourceTree = ""; }; - F5A63AD86C7C0A9A2C33D74D = { isa = PBXGroup; children = ( - 7A039686F4F852E26936CA53, - 161894D0D279595D88F470A6, - 868E43A4BB7015579789E4F8, - 8E0874D93125C2DC34255EDB, - 7C2A4084A267F57F2E27F3F7, - D99C977ACCD09262F06F6624, - A978BD4031CAE24FB0FE26E1, - 1A656E62C071C54D28343AC2 ); name = maths; sourceTree = ""; }; - 9518033FC989E104DDB02E8A = { isa = PBXGroup; children = ( - 252632F3F97DF57C0781BEAD, - 8FB80383DF3BAD7227DF465A, - FE76B46873DE20DFDC5A94BE, - 28C4C81039B42A399F5B7320, - 341631A7E86BF1C0E49093C6, - AD655AA04981173716022D8D, - F1D085B5F12E814BF1D5C395, - 58654C2630387C4A336A5BFB, - 524A70C9F23954F8F2A3F99B, - E05812E3CC31875A202D6B30, - 224C989BF83B6EA867814BFF ); name = memory; sourceTree = ""; }; - DDB94A7300C3D1F2E9E51C47 = { isa = PBXGroup; children = ( - 213F0A7BF38AF6AB34414A45, - 21B2342B75097AB93CFF7E97, - 2C48BB1A286C6A63174E5798 ); name = common; sourceTree = ""; }; - 1004A23965A4DB0FCC441ED3 = { isa = PBXGroup; children = ( - 7A51D8B81F390A4CABF25C73, - 76DB94CC776536F5D05B9445, - AA698DD5A82F91CF84A29666, - FABA493FEE07E6373DD8EB41, - 595EBA8A689DA899986314D8, - EACFC12E665283EB7926E9EC, - BAE5CE629DF9D286293E616F, - D4C499CB25F043FE667BC5E1, - 4366712140FBEBEDBCBDCE9B, - E0A2C24581917DD090186333, - E61B485B10F8D4A3986953CD, - 3F3D429025A92B6F0FB6F8EF, - 275F2210628D9E9968B1B258, - 5DEA687D261C59CBABB782E9, - 5593DEC14D551C38CCB50D70, - B8E47498C7C6D5ECF41F0EAB, - 9DC2C10B16A645EEB82220D8 ); name = linux; sourceTree = ""; }; - 13513EE40AD6BAB30E26C88B = { isa = PBXGroup; children = ( - EE5F18DF1DED7617C4A41FF3, - B2BCE9DDC8F0F54CA3D913E7, - 5249EFBE3B22E6FC1A7B6D42, - A257B76FCE9D594EAD41414C, - 8280AA34B23B4D366711A9E7, - C9561A66310DAD5EEB4A9462, - B62991F8AEE7327BA8A5070F, - 013F753639A6350C8DC602AD, - 6B46AB1931E43DAFB278D23D, - 72524FE185FF48DC1F954341, - BF5307F364AC9250D8625168, - AA4823F2F2A78C43D7A039D0, - 87A5A064CC3CD55BA5D7617D, - 641638A0466CEC1BDEAFB476, - 7DB37383434F45D8A7B674C3, - CB16B2438EDCC10C499645E6, - BEB35C6173793C1CB7AB6311, - BA58B49B820A47F6F55CDACB, - 930E58E13FC92BF70AC20EEF, - 2F1812B26076D9CC1495D452, - 9113CDD122D2790E147A8CF5, - EE56999A85AF18015C540183, - 189F69E0B926C73B654D6951, - B9E16F4636FF8C0A1FC8BEFB, - AE9A7A0775FA806126A74E16, - 4F5D1AA83981FBCD33CE234F, - E6A7BFB0FCD17A9B133CDFA4, - FE6E3F911679B0D7547577A3, - 8BCE60CBC91DBAAB089958A1, - 3F11593DC3A168A52FCC2DD9, - FC2C82760E717788B5A6E691, - AB0F3F5A622CBB251F64945A, - AD495FA1991295C722B46843 ); name = mac; sourceTree = ""; }; - 64DE2D4534D79E74C40A0DEE = { isa = PBXGroup; children = ( - 42059626955C547DA6AD3196, - 8F383A785B4876198C5B0194, - F3B50EE3939E9F16D13C3C7C, - 9C4D1018ECC0BA07346453EF, - 3A37CD82212075940421CE4F, - B296F736C0CD6AC15BE6424B, - 7F3EF672D07ECE3E13AAF267, - 249959E338D7750E56A9F2F8, - 58B70C726D186B4E770300BC, - DCD09B6EF4A4A109DE01F152, - 7527A5E8F4F39581159D3E5B, - 1DBF9DAAD0690CB2CA4E9960, - E9B203E963EB1AB566061AC1, - BA561E64C6400CFB1DE013F6, - 061B492EABD6B1C995D581A8, - 50159A5B7A552A6C1EB557F3, - E7625D7A06CBC11F40A56A70, - CDA5FCC51F6C1E84D7DC3274, - B14735381ADB00741166E330, - 09AE0882D58BE1715219556A, - 0EB41C0AB478EE02D8C851F9, - FBE07C5CC622A5D36BDAB9E1, - B07C853EB60D8D8691BC1B4B, - 5D32C8856093B33438AEB758, - 8758E6857070D7E5406FDE3F, - 8E8BE2F1C182E418BBA6903C ); name = windows; sourceTree = ""; }; - FBE56423C0482E49EF317C85 = { isa = PBXGroup; children = ( - 03B9D3D9042E85BDD691325E, - 13C661B79E1E9508512A6B21, - F2F68E50F42BD0F124E89E2C, - 59C46E289F86C80D4341EAA3, - FA82460758BDCB2DCCE1EAAA, - CE06EEED7426AA45C27B629C, - F439E6C4B2D2AF19645252C0, - 1D74C9567283836ECC70E48B, - 40216CE846A54CE706131A23, - E646726910F110DC34DD1662, - 9AF9F1C0D766D4F894E4A7B0, - 902C32F471DA6C435E80372B, - A404CD721E2A0F0CAE9326C5, - 32B7C3609BDA01AA09740139, - CEF7210E311274F1DFAB6882, - 755C440534C0EB494572B3F3, - EE855319AF344A05C92580C7, - FCD02A40985242A8A6648311 ); name = android; sourceTree = ""; }; - B3E58752D519C56B78A95ACE = { isa = PBXGroup; children = ( - DDB94A7300C3D1F2E9E51C47, - 1004A23965A4DB0FCC441ED3, - 13513EE40AD6BAB30E26C88B, - 64DE2D4534D79E74C40A0DEE, - FBE56423C0482E49EF317C85 ); name = native; sourceTree = ""; }; - C6B52BCD0CB1B809D6DE555A = { isa = PBXGroup; children = ( - 76E2084D2148068F9138A816, - 33F16EE4F38C9B76E7FAEF78, - 72F5ED2E8B945988C37EA9CF, - 663746215E9BA6C761172B85, - C3FD9D93626F80A45F9B6DDE, - 4007410FACA2F865FD8EF769, - 8273A206FB309671284959DD, - BF888BC540B64D5C61E46A34, - 644FD6155385BC3AA270FB5D, - CB092FB152F43900272F8E43, - 4A97C8D2FF6454DDD3AF4BE5, - 2AA21CDC91EA122266EBD780, - 35DA3E75DDB03BB35794289B, - B507B4A8712A54D7A8C03223, - 1EE2A763E06AF4951024950F, - 23252E4C97AEFAE0C5EEAA77, - D4FED84C92ADC4B2C41A4275, - 81B36E7C56DF1A777AA04F71, - E5458BE2F33DBBF5AF834BB6, - 0EC7DE81A516F4130AC59557, - C972C24A7D2FC817362E1FD7, - 5715BC14D93D61D71206FCB2, - B4575FEE10C67D45C9532540, - 95F21C2733BD5932372E4157, - 4EF8C44FF03700F6140950F3 ); name = text; sourceTree = ""; }; - 723AC5B999F1EC8F4A101AAF = { isa = PBXGroup; children = ( - 40282E23D43D86D122CA5C54, - EC240B4379FB70C8A8AC2855, - 5508D42FCF7A1C8A8CD78BF0, - 90E4999A78655A238AF42BC0, - 8E78623B2D21CFE68DEC0483, - 9E622C38E4BD511B6ABBF7AA, - 6734838B47EF0D9ACEE571CD, - F00BDEF5CE2B281CBE2E89A2, - C5F20B02D7843F3C5ABEDFD4, - 1FD1C9A3D2DB64C825FDAC8B, - 4D60F7F748CF6702D1E45960, - EFE26D4E1E2B92828DBA3A99, - EF06213027EA3F7C54EE0F18, - C25E5F90524645D684C674CB, - 60F21CB42270ACE2241544A8, - ED84C92ADC4B2C41A4275F92, - 3268C8DBAB23CF503BF30935 ); name = threads; sourceTree = ""; }; - 281D6856FAC3B07634AD1C32 = { isa = PBXGroup; children = ( - B4435D42216365FA97651272, - CE216F2485CD5EFEA91554F5, - 599F5C47BB9B5898E0E88CF3, - 9620E4769876FC01ECE885D1, - 4BE2727CCD2CD7603402C8FE, - 7FDACEA80794451691A12703, - A618FC3255ECE14EC9259E6B, - A2D6317BEEC77A62E8F834AF, - 7F1AC20BE8A18CA6BB7403EC, - FA833EFA9E93C7DBE6624676, - EECE464606AE845BFC4B941B, - A59A5DCFCCAAEA79D03C2B27, - 3C9E6597968358B57374502C, - ADE5F12AA5AD969E2C7002B3, - 75700D13513346310CEAC30D, - AAC585C4648559DD713F28FE ); name = utilities; sourceTree = ""; }; - 992526B83B6AA618A4FAECEB = { isa = PBXGroup; children = ( - D443FD24B52106986FC8A531, - F2B0E44A08E127FD31184241, - 1CC2889DB696E12FC34E3F50, - 1AF37A533ABDD889670F9349, - 2B74AFA66B37B748487152F4, - 89F308FD85F378E278C98884, - A11081920ACF526B1320CA42, - 0C54591C1E8594B59F4701FE, - F5A63AD86C7C0A9A2C33D74D, - 9518033FC989E104DDB02E8A, - B3E58752D519C56B78A95ACE, - C6B52BCD0CB1B809D6DE555A, - 723AC5B999F1EC8F4A101AAF, - 281D6856FAC3B07634AD1C32, - 2FD5C998952BE08F8ED3F262, - 01778F26212AECCBF2452804 ); name = Juce; sourceTree = ""; }; - 1076A9F8D71BFFF9E9975FB6 = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; - 23256FCDBD84A2E259E40908 = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; - 3E3A3D491CB40D2943E95E64 = { isa = PBXGroup; children = ( - 389351359BA78C682E1931A6 ); name = Products; sourceTree = ""; }; - 25F381A264FFB3735F124DCC = { isa = PBXGroup; children = ( - 992526B83B6AA618A4FAECEB, - 1076A9F8D71BFFF9E9975FB6, - 23256FCDBD84A2E259E40908, - 3E3A3D491CB40D2943E95E64 ); name = Source; sourceTree = ""; }; - 0344046290267DB74DECDC05 = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = Info.plist; - DSTROOT = ../../bin; - SYMROOT = ../../bin; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEPLOYMENT_LOCATION = YES; - ONLY_ACTIVE_ARCH = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_DEBUG=1", - "DEBUG=1", - "JUCE_ObjCExtraSuffix=JSlRKlNBb5", - "JUCER_XCODE_IPHONE_5BC26AE3=1"); }; name = Debug; }; - 9DE19CD5BB8E12A153385ADD = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = Info.plist; - DSTROOT = ../../bin; - SYMROOT = ../../bin; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEPLOYMENT_LOCATION = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_NDEBUG=1", - "NDEBUG=1", - "JUCE_ObjCExtraSuffix=JSlRKlNBb5", - "JUCER_XCODE_IPHONE_5BC26AE3=1"); }; name = Release; }; - 8E935B9E7F2982A06CD7EF99 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "jucedebug"; }; name = Debug; }; - 71190EFA58D0942581B5F1AD = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "juce"; }; name = Release; }; - 3A1CB6B5ECF4A79CDE35CC66 = { isa = XCConfigurationList; buildConfigurations = ( - 8E935B9E7F2982A06CD7EF99, - 71190EFA58D0942581B5F1AD ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - D14EC3F0DC5861E37D35E15A = { isa = XCConfigurationList; buildConfigurations = ( - 0344046290267DB74DECDC05, - 9DE19CD5BB8E12A153385ADD ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 8914D147048B9EE245989ACB = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0F4BA87762766B98D5B58AD0, - 50933337E6C3CC5B82540F8B, - 04CB2DA89A71A183CEFEB7C0, - CD59C8E60146B04575CD61E6, - 76890501626BFFF310A94F15, - 46151070FA7D3426EC35280F, - 983FCD60625A60993546F850, - 416D6F00E88DC74879B4DF2B, - 9C709BC2F4F0EE60BF52FACA, - 992F46189ABF711A047186A4, - 5C312E6678456C8293633E0F, - FB21B7E6A7CE55D3C0E3C37E, - C1147D03F1F4D697CC30DD22, - C5CFF5508299C26380465290, - 0ACCAC5ABDE686B0CA42BFED, - 2171BD82DA3A6744260CDE58, - 3C22C15ACEEF0454171D231B, - 6D421F7B7EE3A149389653C2, - 4ED0A649C320BA53718501CE, - 5D3EC9BA6BA37694CB371ABB, - 4CF5FB501CB800D4485B08DB, - 3747D91BE3C6A2E641BB133D, - 4CFEE72495007A62F78C1B8E, - BF7E18A49525915A0E1928C5, - 6DC6DEEE8A1A6092830A79C8, - 2862E190ECA33D2CE1458B51, - 0791EB173E6A9F959E692AA2, - 3B64EF7F57EAC5C51460059D, - 16D537EB6D3BFAB3AAB54B11, - 0C22446F12486AD139A640CB, - 95CF50482DC7139FCB40EB1C, - D66B0BC466522CD4C5F1335B, - F20E960CAA933102A0F0225C, - 9CDC242CC037F1D00BFD6157, - FB0C4D926F00644C6435F0B4, - 3AA8CE85F8CEA9D4B8063E52, - DDD4E27CA174F32412F71093, - DC89A29962945F69CE38658B, - 78E7EF1759BA0AACCCE37533, - 573BF08B2CACCC317F3D7603, - 8376B6E3DB141DDF5EFF6327, - B579C891B16F4B219CD751B5, - 43FA6F0FD4DDEBA6427E730D, - BAB3164372A6C31A1A7DA58F, - D71FEEEA440682B04E024BB7, - B331EE2C23176373F2D52C1E, - 79D8E372BA77018BDA956D92, - 3688819F98EFF0AABDD79029, - 84F9FCAE9DF003DC6FC3C941, - E1046147432EB115A68D6C43, - 5CEE2D7E55DA99C1D310CDC2, - B154245927BCB4F87ABEAF17, - 52ADF1419B058963EE32B7C3, - 31D36C32211754E793B9FF81, - 2D46CF2B0350A442E08EC355, - D1407BB28C169F5E1CAC3CC7, - 07E6E11A658930554FF0C56A, - E8DFABC1603D55B97429A8E4, - 1F905F44E5FA23A2D5CCDA0A, - 4AB5E55BDF79028F82F83D8E, - 9D2D1BA65C27BDA1F7C44769, - 43B3119E2F1B559263AE956C, - 4A7952C0A4EEE13296EEED5E, - A230949FF8848D5E923F9083, - 11162E9812CFB0E738A7E2E6, - C682BEA7DB70FDC7C6BA2D6E, - 6A53DA58B55E2DE7241BF2C8, - 0FF71870483AC46D5B7AC5B0, - FA01B3EABA192AE041D4FE4D, - 43047D78351C2D7047F4F81E, - 5BF44F954E56B7C2DD15EAEA, - B14EB5F3829CA26DA906D5C0, - D75943C2812EA68CA74D9FDA, - 6DEA630BFFF638BBBC8FDC00, - 708060ED04ADF4E4FB8E2171, - 12E3CC31875A202D6B30F778, - CF51988743ED2CD823DFE0B5, - 4AAFC135B170CF02A40F0D51, - 659D9CD58B6914EB420E6AEC, - 55737E2F1817DE642AA7DA05, - 6D2C50B0A69855A7F8C062E7, - 70EE7A1273945B62B013DB43, - 9DF800566462E24A14246EAE, - 89F0DA39878F8A41E60B8C67, - 12E1174518BE1063E506CE5C, - EC0B67A801316FBA35A04356, - 86EDB250B9F5C8FF3045ADEB, - 8F7CC7DDA1E07A392CAD82A3, - 621B7B0B518E63E69122C13E, - 97982824572C18827047D92A, - 927E7250FCE62E838599DF83, - 9AE6891C35CE161CB1707B4B, - 06994A713C38F415C4E8A009, - 98F737B7459895BFCDC7965E, - 7033A0968B1C81A821CCC296, - 14E5A383C70731C60911E698, - 3A10CF09C41F8F55B7529E68, - 5482BFF6CAD3B6CDFB09FBA1, - FC3299637EACD8B5CBEC391F, - 5C245C1A77B96A1425323A1C, - 05DFD3AF416CA6FDDDDC4C74, - 78DEB64D3F38269C62EB1C7F, - DA5DA96B9D1A26342D9278B6, - CA49EF43B1478B146ADBBF62, - FE6F6A4946B7E4F6C9F44C4A, - 28254F1E6E686CF6F29AE56A, - 9EA7FEF4CAD2BF46DD3596DA, - D1400B3D9D07FA9E8BAA21CB, - 716823F3B5437A20FCADA50E, - 7CAB8DEBF6B93C845AEF11E5, - BBE24BE654237ACD381A97E4, - 6F38AFBC749040844076FD4F, - B35BFCD19569A9F91A3CCCF5, - 7C7B33BC2E2F245C8AFC9879, - 110285CA29B28DDC018D2BF0, - ECF05C68A4DF71A10F8E8BA4, - 50CE14D31986BA1BC81B0869, - E421EC41CB492F58BF1D9C4E, - E3CDB77EF18430879925E6A3, - 55E5B76FB1649B60DBE16B89, - 6D1A45ED50BAFAE4F4E403AC, - 70D519927F38B21BE572201A, - E4EFC5F8828526CE4518F1E6, - 835F7FDCAD027B4E96AB407C, - D027C0131892DA25CE716DDE, - A65EBA33900ED91BE522DBF7, - 0D91D36C2195315FE534F304, - A1E82F70796B8611D7323247, - BC1856E0B20406DDCE5EBF94, - FF3A28F88174E10CB478931E, - C39AE37828718E9A45589A24, - 4400B0595B35F919291C1A01, - BB1DAC0CA8D7B3DEEDEE76C6, - 56F347211337C9229BA06AA7, - 75EAEC54BA3A8BD7F317C7E4, - 5FFFA4B8857D64FE36B4B125, - 1D406F33F6B9FE7F92A71438, - 806FF2617B7CC21609927A11, - 9AA76460DA7D34CE6A69E2B1, - 4E81BC4A50CF1883F529E152, - 8FBB6BF0C5406E1BA481CFEF, - F5F3F25D9F377128DC74D95B, - C64A2BF05224582134872415, - 0A9C9486A6B31F21B1472D2B, - ED9F9A6CB4F8BB7FEA5384B7, - DE0BAD16BD5A6568EB4D228B, - AF6FEC311B9FDA112CEEBE03, - 3795ECCE9D98F872F5BCAE64, - 723CFE5184B20B12ECABEB41, - DB6098F004F6D7F19605002E, - 757AC60B8BA481E592FFE6FF, - FC659F15D298558D9553B643, - C090ACD462D9431C8B64CAD1, - D894FBF1CF62C5F126213616, - 3D80F7AE3D65EE0BB607F252, - 2F33C392A0DD205A865955DE, - 36615B7CB2BE96B624C4ADC0, - 4F2AAD8318402F8C23A9EA54, - E6971F06B78AE76C35E1A19C, - 6629D535AE1ABE35A0D53C69, - DD4599D0A8117B025B477DE1, - E064E329741F36C329989203, - 61E659ADBF9D832ED8F24540, - 9379C833B875207E5DFC5A3F, - F1A6C2E3226F87860BFC4EBC, - 144872E56AED1981C0973B24, - 95648DF5676EBEF57009D09A, - 2FE59D80851A0A392EF2F923, - 621D2E6CDA267030405166C2, - 90347B7C32ACE8A11FC1B708, - FAC87D81FE5168E37645A113, - E5BB4B5EBFE206E09D0E6E10, - 1906C642BF6CA67821512855, - 6F41A81F269BCBB912C6AFBC, - 7BB45CEB3B0913F98FC817F5, - F41D6061AD873C619D7436FB, - 1FC0972EFBE39C7CDEB73A3D, - E63E64BFF5FDCEF5B53AE304, - E162F83B5F038092E2C70FC0, - 710BF477DE534CF18BD68959, - E5DA150E966B948C4CB4EFDB, - E96B477EB51FC152AC2EA6BD, - CF36EF39EEAB7A4744C5D310, - 372B6FF28C49018F5191C517, - D9AAB4AE220010CD526C87D2, - C732ADB05901619B14F1D6BB, - 075D5995E41FDD670ED35E17, - BBE02E8719411C8A7D43A401, - 35E3B9684ED968BAC0BC8021, - 736AC4A9DA6515B92644FA02, - DFFBADCBC9C7E31B391BA560, - A24A946371D566E02BCC95A5, - D390CCB01BD9BD132F04E0A6, - 26E2FB6533B5700FA9780E00, - AF5593DEC14D551C38CCB50D, - 0B830401EA0E883CCAAAC696, - 3897B36CC1D89C5755CE1B90, - C55B00378E784DE4B428E934, - 82A9E0388C9BF3A698DCEF69, - 7F6749BFCF2F134468825D45, - 277CF246D5EE48868E38E625, - 4D285D9D3F5955F2FD574D04, - 30F9B53BD00228406F6477DF, - 759633D5CDB35874FD37DD7F, - E0F309D93E9A7F0CC71C4503, - F246AADF8E531BC2244A1D38, - F78940DAEB8BE98A9AA4B0BE, - 00FE118356919D0BA97AE853, - 18D8A96CCD34E41A5E162AD5, - CEB8A9B9A37EBBA79A6478D4, - D6D48B2CC53FAE2BD126B0DE, - C384A89F786FDE8426F657D5, - 3D324F656EEF8F1FB2B437AC, - 645AF66C048A4815F5A8ECDD, - 38EFE824E76B3BB99824C265, - E23C5C51305DC7CE30E4DAB7, - 60E1742796432D042C59B9B3, - B92F53BABB6A9AC8348B001E, - EBC3AA015D24C62FA0307F51, - 803FFCA3DAC0C004A80143B4, - F0556B3AD9D388177E26B90D, - 0558FFF11AED944C6B3E5FB5, - CF73FAC91E319C464F07C966, - B6D3EDA0F2E3516F3922F23F, - E7C9FAA5F8A4AEDAD8A8CC1D, - 084C9F2D4F78134CB1EFE676, - 4DAD08CD3A688747C9CA237B, - 60FE8BFA252E3EF2D60B77AD, - C592CC923C5495467EF05D48, - E12096E92D3D43DD7926E063, - F4567E6C9ABFB13FF24797DE, - 0B0996F97D926609C23E5F90, - FB5900FB9E071EDC2542B846, - EDE605169F0AF038FE5097B3, - D78C3DA6505CE8CC3F17C070, - B23EE989379EB2F075D6F587, - ED7C62DE10250FCC07CF17B2, - 1535D49C24E8A9FA5F6DCF6E, - BBCA4C01CEF1EDA75625D6DC, - 136FB9588C834E6F4A1EEBFB, - 274415D1C0AE9BF56FAAE791, - CBAD975785BD26A0DA9417B6, - 2A8F78D412AC7EC0C2998A1A, - 2DD969525DEF4AD408E9BB59, - 059B694C912BE81023D5240D, - 4387EB80C5795FACBE753A7F, - B2C41D39730EB3AC75D55949, - F045E8F977C00016F6EBB1B7, - B89FE5AB44DDEBCC050F8D7A, - 2EA320797BD7D2137F133681, - 1008A8A446B9BCADBB853056, - 0FB1AED6E5AB5CEA95E70950, - 103A3B11DFE35E9088ECE933, - DAC7AB8D9EA70D99A1C1287E, - B3D08D9E24CC369E4838E6FF, - 15932C8039A59B0431FBB93E, - 3BBC410C79D2F53D32ED7466, - 88A4D0443DFD6BA1A1B32AB9, - 06F1BEB9AB97F33305B8F816, - 6CB4FA2797FBEA5C4C342EED, - 150C16E65ADC7E3359C88510, - 9C547F4DC4FC50F9C3382ACE, - 5D1B2A14239B0351261D832E, - 0AFD6B2B694302A62C7C9DD1, - 3CE21931FC5A59ED7C23144B, - DB7E8E984F9BEF4C84B887B1, - 07645D91AFD4F8512ECD48ED, - D132232A4A404A7C08D10928, - 83B488D64AB9828CFFBC55A9, - 8305C5E01476E99FBB1A0315, - FF613B604C2333F4A4ACEDDA, - CECE3D66B19693E41850C30D, - DF419EBD05F13A0D2073D47A, - C9FB7884928BF0D6140AF881, - 5C9628DB3E0C0BA8809AE45D, - 724DA2BCA5ABC5772604C3B4, - 035B1F7B1505ABF24455690E, - 3C71EA297D7418FEBB52F9DD, - 7A86E411B55E15DA7AF1FE67, - BD86381924AE45021246ABA3, - 306AB64E97A05B800349E7E2, - E7A5418175B23C794421441C, - 51F5844EAE455D51BDB17228, - C99F35ABEC13F58C27C1D303, - 3D9B5EDBECAA680B0A067F5C, - 724B03672FC7862B671969BC, - 8B31099030792C554BD51211, - D04EEEC7EAE7C806E95ED41C, - 7EA440527972D6B7322EC307, - CB9FE1DA1AFE5FBA9FF06061, - 26454A5DB5BAFD7901F17DA7, - F41B46F970BA78762DCE67D1, - B7A8CF6F889840BED05C8C27, - 3EBF23F390FC0227260CF7CB, - 1906FDEEDAE61C88A59BC271, - F51142C2CF336FC4A4FAACC6, - 1021132FAC7870AC18C040DE, - 05C8FA821C64B69BFF8FAF2C, - 5E330E219B2D2944BCE95174, - 275FBC09BE58E708A73B88C1, - 6DA99BA218FB45568258841C, - 32F1C95EDEE7722797B8CEE8, - 029A0E8B44DC17211722677D, - 4B4E17467BC41E2166549998, - 9686F29C29D1C26E353DE68A, - 79B4C2F1C0CF592ACE8093C0, - 88A87D28B3809665F28DC16E, - 6BDBEFD97E643E5BB27637FF, - BC3C22F5350ED7433D303A04, - 0B41EC4D7839F8CBCB8F9A0D, - B420CD4B589C08EAFA6E3DA4, - D4A05D7CA67B6F0527C9BD81, - 0D7547577A31512EDCEDC42C, - E2FDC7D3E3DC4C1423FA0C5B, - A46B0025A68136ED993E0D85, - B99678E919BF547A3A3F5D6E, - 5B714CDD0082419BFED7D2D4, - 2DD498313DA488A5063C4C1B, - 5B33FFE120A47EF42CBC05E4, - 552D45FB250C62F86CD02A57, - 0E8E9829E95E32163F45482D, - 6801797B247CB3A6890C0AB0, - B0B82AB2D9B0950F67B11BEA, - 379B4A89E5403B57A2009E76, - 6ED121D4FEE575408B9612AB, - 9ADE436BC62FB84E297C1CA0, - 03D534E5B18011C3E03CDD40, - 06E2ED69E9FAC199D559F276, - 9801CCC32F01818B39CFD88E, - FE553DDF4F83DABF13DF4A2B, - 68DB48B0EC9E5E37C6B5281C, - 96E9017FBE104E9EADC586B1, - BA6C6EF4C88D49C640DA7BF6, - 0B124D9CE361014F815A5958, - C701E3FCB168A3B4A31C4242, - 04F6D85CCF26A7F6DE589876, - 62912A2DA2F01212517938E7, - 36D770FCDAC86084A495B96E, - DA2A4714F1A6957A4F2B8D48, - CE9A64287FCEF00DD2BA6AEE, - 2AC6F3BFAAA21E21076A9F8D, - B8DD4DB0BD1A6B38BBF92413, - 1C0B1362E81C8B073BF0DCEC, - 63BEC07A51CB8E516B38ECD4, - C8F81E843F446868FAD88197, - 50D91A2EC0ABF894E612D936, - 82568CF438EF4C950E4A42DF, - B2E9D0C534DDE9F96921A054, - C8D06AE9C68A675A87DC9C99, - FE2999972FE3D6E251DA6653, - 8B2193898D3465B5995EE98A, - 4FB3EE200AEA14C7218D7034, - 81E79D9217773BF0E39F7812, - 2A360CDF2B5A46B282CEA2C4, - 01FD07AB480226E84D52F591, - D8B9941A1375579D6CE7C1C4, - 0DE731ED3EC994B9227C2741, - A124FE5709D9324B5BAFFE53, - A84A5CA4654AE87192A6A096, - 55EDB4D9B702B469DB4655C3 ); runOnlyForDeploymentPostprocessing = 0; }; - 01555BA382FAED280FF5F58A = { isa = PBXNativeTarget; buildConfigurationList = D14EC3F0DC5861E37D35E15A; buildPhases = ( - 8914D147048B9EE245989ACB ); buildRules = ( ); dependencies = ( ); name = Juce; productName = Juce; productReference = 389351359BA78C682E1931A6; productType = "com.apple.product-type.library.static"; }; - FCFFEDFC83101B196BFA2AE2 = { isa = PBXProject; buildConfigurationList = 3A1CB6B5ECF4A79CDE35CC66; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = 25F381A264FFB3735F124DCC; projectDirPath = ""; projectRoot = ""; targets = ( 01555BA382FAED280FF5F58A ); }; - }; - rootObject = FCFFEDFC83101B196BFA2AE2; -} diff --git a/Juce.jucer b/Juce.jucer deleted file mode 100644 index 368cfaa2ff..0000000000 --- a/Juce.jucer +++ /dev/null @@ -1,1640 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amalgamation/juce_amalgamated_template.cpp b/amalgamation/juce_amalgamated_template.cpp index 0e22e190ab..b85d4203e8 100644 --- a/amalgamation/juce_amalgamated_template.cpp +++ b/amalgamation/juce_amalgamated_template.cpp @@ -24,12 +24,15 @@ */ /* - This monolithic file contains the entire Juce source tree! - - To build an app which uses Juce, all you need to do is to add this - file to your project, and include juce.h in your own cpp files. - + PLEASE NOTE! This file is just here to help transition old code to the newer + modularised layout - but it will be removed at some point in the future, so + you should update your projects to use the newer design as soon as possible. */ +#ifdef _MSC_VER + #pragma message ("The amalgamated files are now deprecated - please include juce modules directly, or preferably let the introjucer handle the inclusion of source code in your project.") +#else + #warning "The amalgamated files are now deprecated - please include juce modules directly, or preferably let the introjucer handle the inclusion of source code in your project." +#endif #ifdef __JUCE_JUCEHEADER__ /* When you add the amalgamated cpp file to your project, you mustn't include it in @@ -38,9 +41,6 @@ #error #endif -#include "../src/core/juce_TargetPlatform.h" // FORCE_AMALGAMATOR_INCLUDE -#include "../juce_Config.h" // FORCE_AMALGAMATOR_INCLUDE - #ifndef JUCE_BUILD_CORE #define JUCE_BUILD_CORE 1 #endif @@ -57,368 +57,35 @@ #if JUCE_ONLY_BUILD_CORE_LIBRARY #undef JUCE_BUILD_MISC #undef JUCE_BUILD_GUI + #undef JUCE_BUILD_NATIVE #endif -#ifndef JUCE_NAMESPACE - #define JUCE_NAMESPACE juce -#endif +#define JUCE_AMALGAMATED_INCLUDE 1 -//============================================================================== -#if JUCE_BUILD_NATIVE || JUCE_BUILD_CORE || (JUCE_BUILD_MISC && (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_AU)) - #if JUCE_WINDOWS - #include "../src/native/windows/juce_win32_NativeIncludes.h" - #elif JUCE_LINUX - #include "../src/native/linux/juce_linux_NativeIncludes.h" - #elif JUCE_MAC || JUCE_IOS - #include "../src/native/mac/juce_mac_NativeIncludes.h" - #elif JUCE_ANDROID - #include "../src/native/android/juce_android_NativeIncludes.h" - #else - #error "Unknown platform!" - #endif -#endif - -//============================================================================== -#define DONT_SET_USING_JUCE_NAMESPACE 1 -#undef max -#undef min -#define NO_DUMMY_DECL - -#define JUCE_AMALGAMATED_TEMPLATE 1 - -#if JUCE_BUILD_NATIVE - #include "../juce_amalgamated.h" // FORCE_AMALGAMATOR_INCLUDE -#endif - -#if (defined(_MSC_VER) && (_MSC_VER <= 1200)) - #pragma warning (disable: 4309 4305) -#endif - -#if JUCE_MAC && JUCE_32BIT && JUCE_SUPPORT_CARBON && JUCE_BUILD_NATIVE && ! JUCE_ONLY_BUILD_CORE_LIBRARY - BEGIN_JUCE_NAMESPACE - #include "../src/native/mac/juce_mac_CarbonViewWrapperComponent.h" - END_JUCE_NAMESPACE -#endif - -//============================================================================== #if JUCE_BUILD_CORE - #include "../src/core/juce_FileLogger.cpp" - #include "../src/core/juce_Logger.cpp" - #include "../src/maths/juce_Random.cpp" - #include "../src/core/juce_RelativeTime.cpp" - #include "../src/core/juce_SystemStats.cpp" - #include "../src/core/juce_Result.cpp" - #include "../src/core/juce_Time.cpp" - #include "../src/containers/juce_AbstractFifo.cpp" - #include "../src/maths/juce_BigInteger.cpp" - #include "../src/memory/juce_MemoryBlock.cpp" - #include "../src/containers/juce_PropertySet.cpp" - #include "../src/text/juce_Identifier.cpp" - #include "../src/containers/juce_Variant.cpp" - #include "../src/containers/juce_NamedValueSet.cpp" - #include "../src/containers/juce_DynamicObject.cpp" - #include "../src/maths/juce_Expression.cpp" - #include "../src/cryptography/juce_BlowFish.cpp" - #include "../src/cryptography/juce_MD5.cpp" - #include "../src/cryptography/juce_SHA256.cpp" - #include "../src/cryptography/juce_Primes.cpp" - #include "../src/cryptography/juce_RSAKey.cpp" - #include "../src/io/streams/juce_InputStream.cpp" - #include "../src/io/streams/juce_OutputStream.cpp" - #include "../src/io/files/juce_DirectoryIterator.cpp" - #include "../src/io/files/juce_File.cpp" - #include "../src/io/files/juce_FileInputStream.cpp" - #include "../src/io/files/juce_FileOutputStream.cpp" - #include "../src/io/files/juce_FileSearchPath.cpp" - #include "../src/io/files/juce_NamedPipe.cpp" - #include "../src/io/files/juce_TemporaryFile.cpp" - #include "../src/io/network/juce_Socket.cpp" - #include "../src/io/network/juce_URL.cpp" - #include "../src/io/network/juce_MACAddress.cpp" - #include "../src/io/streams/juce_BufferedInputStream.cpp" - #include "../src/io/streams/juce_FileInputSource.cpp" - #include "../src/io/streams/juce_MemoryInputStream.cpp" - #include "../src/io/streams/juce_MemoryOutputStream.cpp" - #include "../src/io/streams/juce_SubregionStream.cpp" - #include "../src/core/juce_PerformanceCounter.cpp" - #include "../src/core/juce_Uuid.cpp" - #include "../src/io/files/juce_ZipFile.cpp" - #include "../src/text/juce_CharacterFunctions.cpp" - #include "../src/text/juce_LocalisedStrings.cpp" - #include "../src/text/juce_String.cpp" - #include "../src/text/juce_StringArray.cpp" - #include "../src/text/juce_StringPairArray.cpp" - #include "../src/text/juce_StringPool.cpp" - #include "../src/text/juce_XmlDocument.cpp" - #include "../src/text/juce_XmlElement.cpp" - #include "../src/text/juce_JSON.cpp" - #include "../src/threads/juce_ReadWriteLock.cpp" - #include "../src/threads/juce_Thread.cpp" - #include "../src/threads/juce_ThreadPool.cpp" - #include "../src/threads/juce_TimeSliceThread.cpp" + #include "../modules/juce_core/juce_core.cpp" #endif #if JUCE_BUILD_MISC - #include "../src/containers/juce_ValueTree.cpp" - #include "../src/containers/juce_Value.cpp" - #include "../src/application/juce_Application.cpp" - #include "../src/application/juce_ApplicationCommandInfo.cpp" - #include "../src/application/juce_ApplicationCommandManager.cpp" - #include "../src/application/juce_ApplicationCommandTarget.cpp" - #include "../src/application/juce_ApplicationProperties.cpp" - #include "../src/utilities/juce_PropertiesFile.cpp" - #include "../src/utilities/juce_FileBasedDocument.cpp" - #include "../src/utilities/juce_RecentlyOpenedFilesList.cpp" - #include "../src/utilities/juce_UndoManager.cpp" - #include "../src/utilities/juce_UnitTest.cpp" - #include "../src/utilities/juce_DeletedAtShutdown.cpp" - #include "../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_AudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_AudioFormatReader.cpp" - #include "../src/audio/audio_file_formats/juce_AudioFormatWriter.cpp" - #include "../src/audio/audio_file_formats/juce_AudioFormatManager.cpp" - #include "../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp" - #include "../src/audio/audio_file_formats/juce_AudioThumbnail.cpp" - #include "../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp" - #include "../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_WavAudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_AudioCDReader.cpp" - #include "../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp" - #include "../src/audio/audio_sources/juce_AudioSourcePlayer.cpp" - #include "../src/audio/audio_sources/juce_AudioTransportSource.cpp" - #include "../src/audio/audio_sources/juce_BufferingAudioSource.cpp" - #include "../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp" - #include "../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp" - #include "../src/audio/audio_sources/juce_ReverbAudioSource.cpp" - #include "../src/audio/audio_sources/juce_MixerAudioSource.cpp" - #include "../src/audio/audio_sources/juce_ResamplingAudioSource.cpp" - #include "../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp" - #include "../src/audio/devices/juce_AudioDeviceManager.cpp" - #include "../src/audio/devices/juce_AudioIODevice.cpp" - #include "../src/audio/devices/juce_AudioIODeviceType.cpp" - #include "../src/audio/dsp/juce_AudioDataConverters.cpp" - #include "../src/audio/dsp/juce_AudioSampleBuffer.cpp" - #include "../src/audio/dsp/juce_IIRFilter.cpp" - #include "../src/audio/midi/juce_MidiOutput.cpp" - #include "../src/audio/midi/juce_MidiBuffer.cpp" - #include "../src/audio/midi/juce_MidiFile.cpp" - #include "../src/audio/midi/juce_MidiKeyboardState.cpp" - #include "../src/audio/midi/juce_MidiMessage.cpp" - #include "../src/audio/midi/juce_MidiMessageCollector.cpp" - #include "../src/audio/midi/juce_MidiMessageSequence.cpp" - #include "../src/audio/plugin_host/juce_AudioPluginFormat.cpp" - #include "../src/audio/plugin_host/juce_AudioPluginFormatManager.cpp" - #include "../src/audio/plugin_host/juce_KnownPluginList.cpp" - #include "../src/audio/plugin_host/juce_PluginDescription.cpp" - #include "../src/audio/plugin_host/juce_PluginDirectoryScanner.cpp" - #include "../src/audio/plugin_host/juce_PluginListComponent.cpp" - #include "../src/audio/plugin_host/formats/juce_AudioUnitPluginFormat.mm" - #include "../src/audio/plugin_host/formats/juce_VSTPluginFormat.mm" - #include "../src/audio/processors/juce_AudioProcessor.cpp" - #include "../src/audio/processors/juce_AudioProcessorEditor.cpp" - #include "../src/audio/processors/juce_AudioProcessorGraph.cpp" - #include "../src/audio/processors/juce_AudioProcessorPlayer.cpp" - #include "../src/audio/processors/juce_GenericAudioProcessorEditor.cpp" - #include "../src/audio/synthesisers/juce_Sampler.cpp" - #include "../src/audio/synthesisers/juce_Synthesiser.cpp" - #include "../src/events/juce_ActionBroadcaster.cpp" - #include "../src/events/juce_AsyncUpdater.cpp" - #include "../src/events/juce_ChangeBroadcaster.cpp" - #include "../src/events/juce_InterprocessConnection.cpp" - #include "../src/events/juce_InterprocessConnectionServer.cpp" - #include "../src/events/juce_Message.cpp" - #include "../src/events/juce_MessageListener.cpp" - #include "../src/events/juce_MessageManager.cpp" - #include "../src/events/juce_MultiTimer.cpp" - #include "../src/events/juce_Timer.cpp" + #include "../modules/juce_cryptography/juce_cryptography.cpp" + #include "../modules/juce_data_structures/juce_data_structures.cpp" + #include "../modules/juce_events/juce_events.cpp" + #include "../modules/juce_graphics/juce_graphics.cpp" +#endif + +#if JUCE_BUILD_NATIVE + #include "../modules/juce_video/juce_video.cpp" + #if JUCE_OPENGL + #include "../modules/juce_opengl/juce_opengl.cpp" + #endif + #include "../modules/juce_audio_basics/juce_audio_basics.cpp" + #include "../modules/juce_audio_formats/juce_audio_formats.cpp" + #include "../modules/juce_audio_processors/juce_audio_processors.cpp" + #include "../modules/juce_audio_devices/juce_audio_devices.cpp" #endif #if JUCE_BUILD_GUI - #include "../src/gui/components/juce_Component.cpp" - #include "../src/gui/components/juce_ComponentListener.cpp" - #include "../src/gui/components/juce_Desktop.cpp" - #include "../src/gui/components/juce_ModalComponentManager.cpp" - #include "../src/gui/components/buttons/juce_ArrowButton.cpp" - #include "../src/gui/components/buttons/juce_Button.cpp" - #include "../src/gui/components/buttons/juce_DrawableButton.cpp" - #include "../src/gui/components/buttons/juce_HyperlinkButton.cpp" - #include "../src/gui/components/buttons/juce_ImageButton.cpp" - #include "../src/gui/components/buttons/juce_ShapeButton.cpp" - #include "../src/gui/components/buttons/juce_TextButton.cpp" - #include "../src/gui/components/buttons/juce_ToggleButton.cpp" - #include "../src/gui/components/buttons/juce_ToolbarButton.cpp" - #include "../src/gui/components/code_editor/juce_CodeDocument.cpp" - #include "../src/gui/components/code_editor/juce_CodeEditorComponent.cpp" - #include "../src/gui/components/code_editor/juce_CPlusPlusCodeTokeniser.cpp" - #include "../src/gui/components/controls/juce_ComboBox.cpp" - #include "../src/gui/components/controls/juce_ImageComponent.cpp" - #include "../src/gui/components/controls/juce_Label.cpp" - #include "../src/gui/components/controls/juce_ListBox.cpp" - #include "../src/gui/components/controls/juce_ProgressBar.cpp" - #include "../src/gui/components/controls/juce_Slider.cpp" - #include "../src/gui/components/controls/juce_TableHeaderComponent.cpp" - #include "../src/gui/components/controls/juce_TableListBox.cpp" - #include "../src/gui/components/controls/juce_TextEditor.cpp" - #include "../src/gui/components/controls/juce_Toolbar.cpp" - #include "../src/gui/components/controls/juce_ToolbarItemComponent.cpp" - #include "../src/gui/components/controls/juce_ToolbarItemPalette.cpp" - #include "../src/gui/components/controls/juce_TreeView.cpp" - #include "../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp" - #include "../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp" - #include "../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp" - #include "../src/gui/components/filebrowser/juce_FileChooser.cpp" - #include "../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp" - #include "../src/gui/components/filebrowser/juce_FileFilter.cpp" - #include "../src/gui/components/filebrowser/juce_FileListComponent.cpp" - #include "../src/gui/components/filebrowser/juce_FilenameComponent.cpp" - #include "../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp" - #include "../src/gui/components/filebrowser/juce_FileTreeComponent.cpp" - #include "../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp" - #include "../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp" - #include "../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp" - #include "../src/gui/components/keyboard/juce_KeyListener.cpp" - #include "../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp" - #include "../src/gui/components/keyboard/juce_KeyPress.cpp" - #include "../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp" - #include "../src/gui/components/keyboard/juce_ModifierKeys.cpp" - #include "../src/gui/components/keyboard/juce_CaretComponent.cpp" - #include "../src/gui/components/layout/juce_ComponentAnimator.cpp" - #include "../src/gui/components/layout/juce_ComponentBuilder.cpp" - #include "../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp" - #include "../src/gui/components/layout/juce_ComponentMovementWatcher.cpp" - #include "../src/gui/components/layout/juce_GroupComponent.cpp" - #include "../src/gui/components/layout/juce_MultiDocumentPanel.cpp" - #include "../src/gui/components/layout/juce_ResizableBorderComponent.cpp" - #include "../src/gui/components/layout/juce_ResizableCornerComponent.cpp" - #include "../src/gui/components/layout/juce_ResizableEdgeComponent.cpp" - #include "../src/gui/components/layout/juce_ScrollBar.cpp" - #include "../src/gui/components/layout/juce_StretchableLayoutManager.cpp" - #include "../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp" - #include "../src/gui/components/layout/juce_StretchableObjectResizer.cpp" - #include "../src/gui/components/layout/juce_TabbedButtonBar.cpp" - #include "../src/gui/components/layout/juce_TabbedComponent.cpp" - #include "../src/gui/components/layout/juce_Viewport.cpp" - #include "../src/gui/components/lookandfeel/juce_LookAndFeel.cpp" - #include "../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp" - #include "../src/gui/components/menus/juce_MenuBarComponent.cpp" - #include "../src/gui/components/menus/juce_MenuBarModel.cpp" - #include "../src/gui/components/menus/juce_PopupMenu.cpp" - #include "../src/gui/components/mouse/juce_ComponentDragger.cpp" - #include "../src/gui/components/mouse/juce_DragAndDropContainer.cpp" - #include "../src/gui/components/mouse/juce_MouseCursor.cpp" - #include "../src/gui/components/mouse/juce_MouseEvent.cpp" - #include "../src/gui/components/mouse/juce_MouseInputSource.cpp" - #include "../src/gui/components/mouse/juce_MouseListener.cpp" - #include "../src/gui/components/properties/juce_BooleanPropertyComponent.cpp" - #include "../src/gui/components/properties/juce_ButtonPropertyComponent.cpp" - #include "../src/gui/components/properties/juce_ChoicePropertyComponent.cpp" - #include "../src/gui/components/properties/juce_PropertyComponent.cpp" - #include "../src/gui/components/properties/juce_PropertyPanel.cpp" - #include "../src/gui/components/properties/juce_SliderPropertyComponent.cpp" - #include "../src/gui/components/properties/juce_TextPropertyComponent.cpp" - #include "../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp" - #include "../src/gui/components/special/juce_BubbleComponent.cpp" - #include "../src/gui/components/special/juce_BubbleMessageComponent.cpp" - #include "../src/gui/components/special/juce_ColourSelector.cpp" - #include "../src/gui/components/special/juce_DropShadower.cpp" - #include "../src/gui/components/special/juce_MidiKeyboardComponent.cpp" - #include "../src/gui/components/special/juce_OpenGLComponent.cpp" - #include "../src/gui/components/special/juce_PreferencesPanel.cpp" - #include "../src/gui/components/special/juce_SystemTrayIconComponent.cpp" - #include "../src/gui/components/windows/juce_AlertWindow.cpp" - #include "../src/gui/components/windows/juce_CallOutBox.cpp" - #include "../src/gui/components/windows/juce_ComponentPeer.cpp" - #include "../src/gui/components/windows/juce_DialogWindow.cpp" - #include "../src/gui/components/windows/juce_DocumentWindow.cpp" - #include "../src/gui/components/windows/juce_ResizableWindow.cpp" - #include "../src/gui/components/windows/juce_SplashScreen.cpp" - #include "../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp" - #include "../src/gui/components/windows/juce_TooltipWindow.cpp" - #include "../src/gui/components/windows/juce_TopLevelWindow.cpp" - #include "../src/gui/components/positioning/juce_MarkerList.cpp" - #include "../src/gui/components/positioning/juce_RelativeCoordinate.cpp" - #include "../src/gui/components/positioning/juce_RelativePoint.cpp" - #include "../src/gui/components/positioning/juce_RelativeRectangle.cpp" - #include "../src/gui/components/positioning/juce_RelativePointPath.cpp" - #include "../src/gui/components/positioning/juce_RelativeParallelogram.cpp" - #include "../src/gui/components/positioning/juce_RelativeCoordinatePositioner.cpp" -#endif - -#if JUCE_BUILD_MISC // (put these in misc to balance the file sizes and avoid problems in iphone build) - #include "../src/gui/graphics/colour/juce_Colour.cpp" - #include "../src/gui/graphics/colour/juce_ColourGradient.cpp" - #include "../src/gui/graphics/colour/juce_Colours.cpp" - #include "../src/gui/graphics/contexts/juce_EdgeTable.cpp" - #include "../src/gui/graphics/contexts/juce_FillType.cpp" - #include "../src/gui/graphics/contexts/juce_GraphicsContext.cpp" - #include "../src/gui/graphics/contexts/juce_Justification.cpp" - #include "../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp" - #include "../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp" - #include "../src/gui/graphics/contexts/juce_RectanglePlacement.cpp" - #include "../src/gui/graphics/drawables/juce_Drawable.cpp" - #include "../src/gui/graphics/drawables/juce_DrawableShape.cpp" - #include "../src/gui/graphics/drawables/juce_DrawableComposite.cpp" - #include "../src/gui/graphics/drawables/juce_DrawableImage.cpp" - #include "../src/gui/graphics/drawables/juce_DrawablePath.cpp" - #include "../src/gui/graphics/drawables/juce_DrawableRectangle.cpp" - #include "../src/gui/graphics/drawables/juce_DrawableText.cpp" - #include "../src/gui/graphics/drawables/juce_SVGParser.cpp" - #include "../src/gui/graphics/effects/juce_DropShadowEffect.cpp" - #include "../src/gui/graphics/effects/juce_GlowEffect.cpp" - #include "../src/gui/graphics/fonts/juce_Font.cpp" - #include "../src/gui/graphics/fonts/juce_GlyphArrangement.cpp" - #include "../src/gui/graphics/fonts/juce_TextLayout.cpp" - #include "../src/gui/graphics/fonts/juce_Typeface.cpp" - #include "../src/gui/graphics/fonts/juce_CustomTypeface.cpp" - #include "../src/gui/graphics/geometry/juce_AffineTransform.cpp" - #include "../src/gui/graphics/geometry/juce_Path.cpp" - #include "../src/gui/graphics/geometry/juce_PathIterator.cpp" - #include "../src/gui/graphics/geometry/juce_PathStrokeType.cpp" - #include "../src/gui/graphics/geometry/juce_RectangleList.cpp" - #include "../src/gui/graphics/imaging/juce_Image.cpp" - #include "../src/gui/graphics/imaging/juce_ImageCache.cpp" - #include "../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp" - #include "../src/gui/graphics/imaging/juce_ImageFileFormat.cpp" - #include "../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp" -#endif - -//============================================================================== -// some files include lots of library code, so leave them to the end to avoid cluttering -// up the build for the clean files. -#if JUCE_BUILD_CORE - #include "../src/io/streams/juce_GZIPCompressorOutputStream.cpp" - #include "../src/io/streams/juce_GZIPDecompressorInputStream.cpp" -#endif - -#if JUCE_BUILD_NATIVE && ! JUCE_ONLY_BUILD_CORE_LIBRARY - #include "../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp" - #include "../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp" -#endif - -#if JUCE_BUILD_CORE && ! JUCE_ONLY_BUILD_CORE_LIBRARY // do these in the core section to help balance the sizes - #include "../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp" - #include "../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp" -#endif - -//============================================================================== -#if JUCE_BUILD_NATIVE - - // Non-public headers that are needed by more than one platform must be included - // before the platform-specific sections.. - BEGIN_JUCE_NAMESPACE - #if ! JUCE_ONLY_BUILD_CORE_LIBRARY - #include "../src/native/common/juce_MidiDataConcatenator.h" - #endif - END_JUCE_NAMESPACE - - #if JUCE_WINDOWS - #include "../src/native/windows/juce_win32_NativeCode.cpp" - #elif JUCE_LINUX - #include "../src/native/linux/juce_linux_NativeCode.cpp" - #elif JUCE_MAC || JUCE_IOS - #include "../src/native/mac/juce_mac_NativeCode.mm" - #elif JUCE_ANDROID - #include "../src/native/android/juce_android_NativeCode.cpp" - #endif + #include "../modules/juce_gui_basics/juce_gui_basics.cpp" + #include "../modules/juce_gui_extra/juce_gui_extra.cpp" + #include "../modules/juce_gui_audio/juce_gui_audio.cpp" #endif diff --git a/bin/ReadMe.txt b/bin/ReadMe.txt deleted file mode 100644 index 632c91e14c..0000000000 --- a/bin/ReadMe.txt +++ /dev/null @@ -1 +0,0 @@ -This folder is where the compiled libs and intermediate files get stored... diff --git a/extras/Introjucer/Builds/Linux/Makefile b/extras/Introjucer/Builds/Linux/Makefile index 3e70d93421..d8e365a29b 100644 --- a/extras/Introjucer/Builds/Linux/Makefile +++ b/extras/Introjucer/Builds/Linux/Makefile @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! ifndef CONFIG CONFIG=Debug @@ -51,6 +51,7 @@ OBJECTS := \ $(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \ $(OBJDIR)/jucer_SourceCodeEditor_461f5487.o \ $(OBJDIR)/jucer_GroupInformationComponent_631ccf01.o \ + $(OBJDIR)/jucer_Module_3f7666a5.o \ $(OBJDIR)/jucer_NewFileWizard_b8a19ef8.o \ $(OBJDIR)/jucer_NewProjectWizard_7a15bf5d.o \ $(OBJDIR)/jucer_Project_c131864a.o \ @@ -67,10 +68,14 @@ OBJECTS := \ $(OBJDIR)/jucer_MiscUtilities_25b68c82.o \ $(OBJDIR)/jucer_StoredSettings_26078d2c.o \ $(OBJDIR)/BinaryData_ce4232d4.o \ - $(OBJDIR)/JuceLibraryCode1_682c927f.o \ - $(OBJDIR)/JuceLibraryCode2_683aaa00.o \ - $(OBJDIR)/JuceLibraryCode3_6848c181.o \ - $(OBJDIR)/JuceLibraryCode4_6856d902.o \ + $(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ + $(OBJDIR)/juce_cryptography_wrapper_8b556353.o \ + $(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o \ + $(OBJDIR)/juce_events_wrapper_a8dc8280.o \ + $(OBJDIR)/juce_graphics_wrapper_a0e77172.o \ + $(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o \ + $(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o \ .PHONY: clean @@ -127,6 +132,11 @@ $(OBJDIR)/jucer_GroupInformationComponent_631ccf01.o: ../../Source/Project/jucer @echo "Compiling jucer_GroupInformationComponent.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" +$(OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling jucer_Module.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + $(OBJDIR)/jucer_NewFileWizard_b8a19ef8.o: ../../Source/Project/jucer_NewFileWizard.cpp -@mkdir -p $(OBJDIR) @echo "Compiling jucer_NewFileWizard.cpp" @@ -207,24 +217,44 @@ $(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp @echo "Compiling BinaryData.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode1_682c927f.o: ../../JuceLibraryCode/JuceLibraryCode1.cpp +$(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o: ../../JuceLibraryCode/juce_audio_basics_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode1.cpp" + @echo "Compiling juce_audio_basics_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode2_683aaa00.o: ../../JuceLibraryCode/JuceLibraryCode2.cpp +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode2.cpp" + @echo "Compiling juce_core_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode3_6848c181.o: ../../JuceLibraryCode/JuceLibraryCode3.cpp +$(OBJDIR)/juce_cryptography_wrapper_8b556353.o: ../../JuceLibraryCode/juce_cryptography_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode3.cpp" + @echo "Compiling juce_cryptography_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode4_6856d902.o: ../../JuceLibraryCode/JuceLibraryCode4.cpp +$(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o: ../../JuceLibraryCode/juce_data_structures_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode4.cpp" + @echo "Compiling juce_data_structures_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_wrapper_a8dc8280.o: ../../JuceLibraryCode/juce_events_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_wrapper_a0e77172.o: ../../JuceLibraryCode/juce_graphics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o: ../../JuceLibraryCode/juce_gui_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o: ../../JuceLibraryCode/juce_gui_extra_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/Introjucer/Builds/MacOSX/Icon.icns b/extras/Introjucer/Builds/MacOSX/Icon.icns index 7763077cfb955f531f4e66a85568f41f7c75ce89..a1d2ba8423941483ac31efaf090732faf70ae952 100644 GIT binary patch literal 81944 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%0DPVM z6awn|M>X%zcjS}@Dk&AE?YejB?fp8Z#|GWF0L~@AIt@eOTXh{cX4(tqZPBjW-yMH? z+L%GzS|^4zuIs9s9*KMX4@3Yf&=JXPd*x1;wdi8GJG=1)7v7pNerT_@DNX$9yE)xZ z1|I)VasFRyqlaP{-qlZN-{&>|)XWmpE;S2(~DysIq0=sIBZT@O{fAzX9! zl-v8|SSoOA6k!z+p#)AOF4_-C6&1$NU-Nb8l&% z8jTXT8){D!3P^!k^%|o9t8?EGlV&aW#riHc{W<@MnG=Tf>6jK9+|Z+#3OvdH3(yi; z<@6glY1X3^v?OtD`MjAEhxhH2-ZZokB;O|SbsRtou>db3DYHwz5tC*<@ZO&{J>}~^ zJp0}QGbfJdo0B1{-)@wAg?@5?UV!KyDF-ld#(ggzE3Ylke*O1-GbRl0m(wb-`0777 z4Ak7C2+oTG$mu(L{Iogq^2(=)F0Pw9XWIB-ec8Pqs~-!S9mCx9w_pKQfMNixI`_#P zd*|H`t}KsBd}i^3ci%Z?XrE3Qi4p!@B~*V}Fn~P|z(7PoddFJ^-!Wy@{fiFYtV3Wr z{OO)7tkKFmmGbIZtjpax+Wg7mj}O_?&4IM)dFA z9u?ren0;}qf1MIk11|3MeL`bXv%2)n9W!X01BiGU)b+)9!iTspW^tk{vN0T0Z}QyQfXOeNeBC8A(w= z*a0ASVO;N|xOZ~r32M*-A`;Ttckh=wX3C5?55BNuPiePdT-v?t`3L9Bm^?bSU$=H? z@e%$F>S6~(8Fryqw!X+62(3HaGGN5GDKqCh_|(EuZ3H>J@$CiZeahJ31A2AJOo<8g z^^%)lY!B)Ho(MAz{7XF%wz}c;?w_j*XvyArL^by>1|GXz(T9RK>ka~Q};+Gc8yZ;{9d!MfD z)0;(y`l{V0g>PT-CkqWc8wEtfrDSAd1S7^yo;Lg52jeXc%^7b4!a`KGcPX2me zSN{5CuRb|{?gRJEo;GRBh(Ue2wa-YA8<5Jr`^GXhod$CIRU}5xzH6U>!$(h;I(^nX z_ul`&Lk~YZciy~tkFeo&?!yl~^uYc1-ZN|Z)Cr@959r;Mz3UsWZf5t9J^~DYn~>b= zdHV#(5p=nw|IiVm$4{Di*YugQX5W4HJ#%Ec=bpP~&z?DB`dw2ejUPQ?$Zfs4v_tQa zh7D*XW83x>L;*Md)${hn7PRE_tWMqg^dCHIILrJbBWjiQ~tQ z9X)E~u)+QNbnldv-i&kiu2=32c(llB1lR-@o7AFJ+fH43_U_w%z@WiHb909cXB(C~ zbm-tg18(cvyJy!_#M~7!NCii3fUW0+-M2v@*n1ll9TOWHr?=SHnCK|% z!3_z*4qUH#6}$cQIu5u2*bTdny&7=uvA=&nKwuDCU_gMsKldOv@WKvcw+i3>TQCBB z_jN5d_d3{m?de&+zL(zW*Z1_SSJ$HswqO_Rz*eZMz*ox#a7S!D$KG>S*IKpQ^j51D zH=#RY3%X-vZU0u&;25f58#*?@J37{|G`z*uckKGE#NF>|0P+>1U_*bh>7UAI;Pe~* EAODerLjV8( literal 81944 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 diff --git a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj index 848939637d..f0f0623b6d 100644 --- a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj +++ b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ A7C05B907BBCB4288FBC6428 = { isa = PBXBuildFile; fileRef = 194F6B951CBC3E8F897FB646; }; 6B48E4B12BB56C2254F293DF = { isa = PBXBuildFile; fileRef = ABDE2EC87B925F50BA071DB2; }; 7A7859C8F2DFDC8D80FE0F0E = { isa = PBXBuildFile; fileRef = 1B88189689F13B2A9FAEC6C8; }; + 047186A4F90C1600CD492AD7 = { isa = PBXBuildFile; fileRef = 4379C88478B06D5F3C009ED7; }; 5BD727176204D71F2E0F42CC = { isa = PBXBuildFile; fileRef = 5789E1F7A30240B839EF936D; }; DA3D1949878344EAE971E9CF = { isa = PBXBuildFile; fileRef = 7FF9D1A9157D58AEC555D558; }; 086FC650CA4A39161F5DC34A = { isa = PBXBuildFile; fileRef = 1D7AE967F4874BD12DFB964D; }; @@ -43,10 +44,14 @@ 0F780301B225C3022C346CD4 = { isa = PBXBuildFile; fileRef = 95587D99F55802DE5AA2EE5D; }; 59B173809CEC75EC0C74D1CF = { isa = PBXBuildFile; fileRef = 62DCA8C33F575DDA296DC682; }; 69CA42E334E4BA09E4FE8B65 = { isa = PBXBuildFile; fileRef = D02830A908A07FD46F7387DA; }; - 0C3A85F58C34FA91D16664EB = { isa = PBXBuildFile; fileRef = 933DADF4F3906510EA714CC0; }; - 08C0959668FFC1A90B4BA8E6 = { isa = PBXBuildFile; fileRef = DD6476FF0F8BE833CD54C01F; }; - 1457A52734BA97A13610ECF1 = { isa = PBXBuildFile; fileRef = 268B4FFB1C675B679138545F; }; - 20EDB5C810855EB960F520FC = { isa = PBXBuildFile; fileRef = 60A217F62952DE8A752BD79F; }; + 8E715E0E966939643B2D1746 = { isa = PBXBuildFile; fileRef = 35AB2C38F34238FAC3E36284; }; + 0F3F2686ECC4E6364B776A82 = { isa = PBXBuildFile; fileRef = 9537F236180A455139A92127; }; + 75FD1C0661D69FC021F0952D = { isa = PBXBuildFile; fileRef = 3E9413AD8884A906757BB19E; }; + C0884071631177D4A0065933 = { isa = PBXBuildFile; fileRef = 8F02AD5DC1D2669541B1E594; }; + 998A1810370730DCBBA2F006 = { isa = PBXBuildFile; fileRef = 262A2F23A1F6635650A472F6; }; + 7A62EF7F61639801B0897033 = { isa = PBXBuildFile; fileRef = EFAFED13866260C3C52C8738; }; + 5CE130B62941A38CCBF86439 = { isa = PBXBuildFile; fileRef = C12A5E0EBBB0916C01CFC589; }; + 53AF027D9F46E9ABB9CA27C4 = { isa = PBXBuildFile; fileRef = F59081D5F66B4CBDF0F51A23; }; 55A5264E336AEDD1495796F5 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 43A5218D223AA21E0A55D986 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; 046FA2877C08618339161EE2 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -79,8 +84,12 @@ CC2337E5F0207DA53F021F9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenDocumentManager.h"; path = "../../Source/Application/jucer_OpenDocumentManager.h"; sourceTree = "SOURCE_ROOT"; }; ABDE2EC87B925F50BA071DB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SourceCodeEditor.cpp"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; DDBF5BEEBBD9314DDF866F29 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SourceCodeEditor.h"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 9CE5506AC23BBBEEF67A0485 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginModule.h"; path = "../../Source/Project/jucer_AudioPluginModule.h"; sourceTree = "SOURCE_ROOT"; }; 1B88189689F13B2A9FAEC6C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_GroupInformationComponent.cpp"; path = "../../Source/Project/jucer_GroupInformationComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9B3084628EA1494464E99F5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupInformationComponent.h"; path = "../../Source/Project/jucer_GroupInformationComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B3DFC73CF5BDE3E1A3BDE8C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JuceLibraryModule.h"; path = "../../Source/Project/jucer_JuceLibraryModule.h"; sourceTree = "SOURCE_ROOT"; }; + 4379C88478B06D5F3C009ED7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Module.cpp"; path = "../../Source/Project/jucer_Module.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5FC3C5777BCB1D0684134969 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Module.h"; path = "../../Source/Project/jucer_Module.h"; sourceTree = "SOURCE_ROOT"; }; 5789E1F7A30240B839EF936D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewFileWizard.cpp"; path = "../../Source/Project/jucer_NewFileWizard.cpp"; sourceTree = "SOURCE_ROOT"; }; 0685E1C942E1D2447CADB783 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewFileWizard.h"; path = "../../Source/Project/jucer_NewFileWizard.h"; sourceTree = "SOURCE_ROOT"; }; 7FF9D1A9157D58AEC555D558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewProjectWizard.cpp"; path = "../../Source/Project/jucer_NewProjectWizard.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -133,14 +142,662 @@ B4F88060202011416CB3278B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_WindowTemplate.cpp"; path = "../../Source/BinaryData/jucer_WindowTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; 1C26D9DA0B2D0FF8F2CEC721 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_WindowTemplate.h"; path = "../../Source/BinaryData/jucer_WindowTemplate.h"; sourceTree = "SOURCE_ROOT"; }; 31B5EB3CEA43BE4B473DCC85 = { isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/BinaryData/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; + EB58C8B32506D8069CA434F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5BAF17B61DDDEBB4E755627 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 11B106E9AE394F6174BC5DD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04205B0990208F82D5424ED0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + AD713FFDF08460F87A7E8A19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2948EA9482983984F2DC5857 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + EB17F637E7B579EE533378B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + F2048BAAB0DB55C5530428B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + 5ED4397EE973B01B63A66FFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8AA6890D65E86D7016AFDFF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + A2011A35DCB56C73154ED0A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + C32816C7603EDD06EAEFFFE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + B61D43F3681C0CF32784D772 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0AAA4381B5CEB16B2AB01A81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 2755641C347995E5D26955EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + 45338CA520209E00FAAFAE9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00EEB900895B4FA253CD2D9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 188AC11DF00874E56BE490AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + B0E1FBC724BDA04B30BE27BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 3DE83D02907E5C120CB0837C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9048D0644140D34C0BEDF623 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 4E5559D8D30A48ABBB3E624F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 547CA3EC46F4879104906DA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 7DD7B435FAFB69D0D690420C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 255C56B21D2DBFF1C9AC88CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 67CD914DF9A2B3ECB39C16EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 60E9F175207DE1D34998A27B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 74D2C2C01DBC339B8D237444 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 4CB371ABB2B334FB05172125 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 99B30AA241FBBB6CDA642A15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 10FE76F48D71A43108DC3A63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + F50950265F528143E7321E19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 4BF63E71E9B4CB90558BFDB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CDFB781567C4F2B73CFD1CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 6FD48E942DCF34E501D534EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + E50CF83B7BD1166F1D5F416D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + 251279E5EC0B9A844029AE93 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + ADB3E6B05A29B4D243810A85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + B60D31571AA53C4D1320FE3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF691B616F9D42BF5D01A142 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + B20E80B597254090490A1C3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 6A4A4BC3F9A997F34C8E9B34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 57878F5765A6134C9DF3A78E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 08BE9075932AD35F59C85BAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + C01550CF9BD4673C6A43BB84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + A201F6EE63BC96C267FB5ECD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 98E21640F22189694CFC1F7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + DACF5F69C344693E46A100E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83B059D0D1743D49D43672A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + F79F483383C8E18F35F0A46D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 0266CF365FCECDCA2FF6E5C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A9217B5E5D59719DA7D5915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + C39D4EA60939766A2E18CC04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 27C3360EFB80D8D8C09E9D0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 5CB1555BF542462A08EEF939 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C67C18A50AC6752C71C7BAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 090B12C7547349FE16AEFF2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 909975E1E86387C70DF86E56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + A1D1084D7C2B9911DDF9DA94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D09C3035697D8804E818AC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + BD61D5776DFAC105F801EBFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 715A860E2CBF3E633CBF220D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 6073B841D4FFA8113E68BB10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 1C9F30CFFD5DFC9F607C8846 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB30D59B4CBA7081D072E4CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 794918016712974020C154BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + ECC6092CB42E2D9CBA9621C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 10E378FEDFEC7879BA7C606F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 93799ED04BB98CCEAF759EC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 4CC061CCBF94D76F6D70EDFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + D913CA7E167BFD3AD13A7B77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + B80CEC7142D263B4F53D65C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CD65A6B15B85D36A072DF48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 9E974AE75D650C0700C2A1D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 057BC01CD18A03860925F2E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + A9C1446948CF743C8FB22BC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + CD2BF79B9847D191BA231746 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + F44F552968F2B1A4250A2B16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 257327C2A80AAA02C06A91D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D93890B6E2CB2A836F55693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + A39BB5417A71C672B41A3724 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 6869F9BEC23715B2D2027585 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 7935697C2DEBD781D40E78F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 403D47BC2A6DF96EFFFA336A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + C1A83A1BE31A0E07829E62F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 95CF50482DC7139FCB40EB1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 6ED3E4653561FE436C9ABA96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 96776C5A1267032AB7A8759C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4FFB1B0B32560A60BF39875D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + AD4929047E881FB6AE79DE27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + A8E6F3496689C6578CB68592 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EEB1EB1802F58C72B46686D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 6A7384DD3891A3E016C34C1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 3A1B5E4DB6F0063E14C245AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 51B3157142E1F78BE4969D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + D447FE7491721A276DC58C38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 9D0D1743D49D43672A59B12C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 060C6BA42B5BBCCF9EA2AD59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 8D360C280EB85BFAB82E3CDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 936E60B5AE6F5FDD6136E64E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + AD57BF478502EEEA2C0E4E15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 08B0F215D18600CBF4B3588C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + FEBCB906D99B7EBC6C917B66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23994F64DE7F0680047E63D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 4CC049C46BF9DA87541FB1BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + FAE7517D0E756A43CA1890F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 7ED29A92D66BB61D1D00A2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + BFC7C93119D5C7068A54DA02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 1E0DF42364A39ABEC95DAC62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 942F14AB759E305FC361617C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 8F57D3C1DA4AACDAA36AECF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0E9FAFE03B88DFDB43ED6CFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + BCB42DABB118F6ECA83E531F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BC38006534478BD6B0F50AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + EE6D6D6151AD21B28C5E2DE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 05E4F2BA6BB11B7BBA904226 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 623DFD37C551CCEBEF3C3208 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + 33F08DB43EC01C410FE295AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26BF0C6BC972C3B595405FEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 0E9A5EA1FC7EB6F706033271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 09965B6E9A96454A73683C07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + E8A665BE2F5BD2F3F5F51CC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4F2CDDA320D4B4F64A9F879 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + B614FFAC128E440C23A60A08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9AF97808479FF7217740D4CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 300748CDFCE9B04D71DB3E73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D1D585288342779EF607C37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E54E69218486BC5BF2DAEF9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 36597D3D10558560E16D0AEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E437B18EFF38A0A6B20F3717 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DFD8FF809AC006A02916AEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + 89A1E03A142EE7716AAE5CFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + 39D64F16478BF99B35E1378D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D1A401865F0BCBB6789D9E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 7912DC263FB6A0A892154D93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 973B9692727D7A052334EC86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 59564CD0A5534CF3E6FE9AF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A1978AF3D357D196C637DA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 758CC2204B42335A3E822D21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 415C23BC6AC9C374F0D2204F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + D4938BEA1A0A1D506C3CF893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 12332163A294379C88478B06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 04B6910E9F22219D9B58CCDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A2ABAB1E322B5BAF86D0D4DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 7966F7DCB261AB66B121F759 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEEB74777419D287FDC95E5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + E1532855B677E5C0467E9941 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + E8378E23859A63BEB1D67ADC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF4261C2F180AA5B65BD57A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0B028DA1E1271288703B27C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + CEF529E66E38FD70C217F681 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 2594FF2B2682C1019D399428 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A92B86B147015CDAF3C19BF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4F4799AC170B4AC821F18172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 195648DF5676EBEF57009D09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + DE0A9DD02F46EA85F7391D56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E47980E03ABCBB1B3B2C450 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 5F47813DF320EEC5A2BA0657 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + A82EA62C422A6480DBE8B542 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + 3F62B672F1C4D75B983811BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFE36A9E3800981087731599 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + E660581D9757AC60B8BA481E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 08BE25FBB8CFFBBFA81A8C3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 40739BAFA3459063FE5F20A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + D29B7D9FF3BE376B536F2B84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 420DF64B60B856EBED284C9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 44D6639F30AAA6F5F4B9BFCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF39806B5ECA3E740A255DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 0E5C118BE5E1DCBBB48BEBED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F1488894F5910E948458C3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + C54665C8FF47F82EF4D48BF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + FCBB061FC20763103E321FF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 9A3B406687383E7B174DE8C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 783F3C22B68B3922D9CCD470 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 2CD4154655763E0BCB4E05C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF9A96A89694A81F66B1C98F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 62204148857CE32394137C07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4DF2B8F9D2B8AA544717FDC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 944BF8F884F45546644614A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24BEB291E34FB71A6022FD2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + A35B0E6D7B6DAB69D027508D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7FB9D36ED1759C3837FF78E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + C6F6D551E6671A4816EFE65A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2845735B8173DFC6F1E6F3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + F0B6FA41F1EFC3C551C83A04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + C2C9D1986848FAC819259893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B54B53438A53E8550F1ADC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + BB3F9837CFF56DBC479035E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8C2641638A0466CEC1BDEAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 043F75C297B26289CF25CB48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7C1CBDF3758F6D621BB03C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D29323C7417C3AD98C66A41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + B767F2A47A763C59C6ED8E5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2A644DB07467DA16EE6B075 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + C550EC1643814AAB0973A510 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + C433AE6B78F9BFE1B6962234 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7AAA513C4F4E34010FDBE273 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 7E26C8A1715A4D6B8B9D62D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 63FD003154EB9FD318DEEDC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + CBD5D322BE191D4968302EDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 4BD30AF9F1E689F8EE651E36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 2A448743AD17DA6ECEB6B634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + D5D6F95C4D5DEC4DA0314C66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + E2C9FBCE60D17BAEC41882EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + FAA3DADA49E7D4AD7C2012FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 0D8A23ACCB1E8E3D6DA34204 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + A6DD469474D999AEF7D0E683 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0780EB027E497F5ADC3A18E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76512720330ABB9A6D05BE60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1825F983892815A996D9D911 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 191D5592FE0CA19A24DA89B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B8A8C1C128D6BCFB4BF7781 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 8630169EA4E32B1B45018D64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + AEBA4896B686B5A6E01A3522 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 066A17E4605981393B7ED366 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5128CE788F9FE9B9B4B9C962 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 0D3D6C7D5AF5A70D745A5920 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8E85B6B790B05A45826800BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; + EC01CB982BFEBFC4DE98273C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; + A05B6545B41AA7B901713E95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + AA8101E8E119F0E75C83DB42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; + 61C0CE6FDD5F9A004A73EB7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; + 6D1464E296FE3F1EBF551C45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8D8873D66A989E9B9140EEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; + 22C2B0CBFCE76EAD43700108 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + FA71FC249235B7A120EF8C04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; }; + 932DE91C03A14C674A42460F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; + 55DBDB8777FBF1A76A715519 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F3A680CE354EE42349266FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + D1F2C072AF8BA72ACD485B58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + A7C150AC7F7071378FF0AFB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + F1C981CA376A6661D1EBD9B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + C92EEAC5C770891624526B07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + E0ED5F6A90682A5707C8E7C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + BDFA819E4AF09DE1A893505B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + 375E3E08B6AB1947A7CEB82F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 4F251770A327D0C3D3D711A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C85A7F124E9F944DA376C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + 387C4F5F6F1FC90E55E917F6 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 7D8556BD5128937AD57C7643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + F21288F37B8ADB998310B246 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13A5A1CC3461D9FC0391E4F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + CEC61F0221777154E61850B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + A42130D38E0E3B718F35E9E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 7BAD3503215DAA4646A23D5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1206FCB26113D88E6745C14A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + 81C201F81C27BB0AC0F98D2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03DC602FE252AB96188A7EB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 6DF23F04DECEA9A327EF58AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + E074F5C4C29505793DFC7C47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 7223F6FEC2A690ED1A4A39C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF19C8E981CBFAF5444EF7E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 1143AC1DA255572BA843B3AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC08B7617B77A61255C56B21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + BD61AEEA42605BF584C641DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A2BFBA4EB2F0C78740B3327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + A8F696CAFD028726943ED5FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7574757AD1C91061BC6ED49C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 562F5536293EB22037789957 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + 2B1F2DD43FB9C233D2BB69C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 743C274F4F8AED5FDB81615A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + D99098B1EAE175DAF20CA4E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA06CBD7C2C1BEC7F9A10B2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 6A1DB045673889F727F3EF37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 4E75EB04A7E1691AFCCEAA7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 92A4FE91ECDB35708D52646A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB1133E2AADDEFCD3B2D8D4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 1D6479F15F6739575D52CDF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF735305EE131ACA07F67E19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + E7CAB3C8035628BEC93073A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 84ADE113C60934C2D847900B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 52425B57A8EF3D17E9ECE314 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 865D03FEC621A858424B9FE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + A33024091865D89FF13D7587 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 92E86A50B51D9915DA7F1DF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 77405F13B7849847B427D7EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + FB4CA5CC996F15F3ED6EAA0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CF52E3C6BAF4FBD6178F89C = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 7D5AF33CD463B3819B710740 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + BE8B70EB6D398F8B892E738D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24C5FCBF2066E2F37387459F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82B18FC7EF9236A50BA399ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + 080FEC1FEC394FA50B49BBE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + D80EB381A7409C0ECAF528F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + B89F93EB09900ADDF1CBD4C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C1365FC545E7F45BBB4C58E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 580D3D79A609C3795D4B1D37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 127056574EE6FD5C31112CBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + 351A0BE5075ECCDCAFC1A95D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 659BBD29AD0E6CB40B7C5A8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CB01093F18BB132F1E6879C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 391FAA60F15652F36158359F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 42765C3062E844825BD60DB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2AEAAA670582E9BAF7DA865E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + A6AE03C77394EFD3EF19B0DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + DA714BB6197323A392A165BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 393179419CB3DDE8C2711382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 074845595086937154BCB5E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 9CFAEF0BCB9FC51C84211432 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 17E4583BD71E361DFCE6A84B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + FD5434A7371B4EA22266C515 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 52863E6ACF0670B2BE289B6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + 838B7FE65135DBCD8A2D3F42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89F8CB7ADE4FC1E91FAD88F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 61F0C2C255F9044A16EE71B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + C9341D80CC6825CB6D250B13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 688B24D14D8BB853562C1DE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C75738FF3B404BB8A270308 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + D7EC9C93B982F206609A6049 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 922C4B08A32235F91B94342B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 5BB5FD236631A4DF69845563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + D16083EF9EA370E5409425A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 7BBA955E2AB9702D8ECA8614 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + AB7499244A0F93637CB9523D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CA12082FD33E0F933A7475B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + CF3747A1139F1BA50E385AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82F1014486AD8B0C3152FF91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 18B56A2B9848CAEE2919AADC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 967E8E1B800DF2C47440D1B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + C8EA7B0879FCD6C4A58F32EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 01040420E5F1ECEBD8E113CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + D5472FEB0AF87202E56C328F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1C71C138277C3787D86718C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 70EFC901D65D51A60FE11EB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + 328FA4CF214CED52428CD8CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + E6775958767990137C868889 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9676A1DCEEA4E17E22F93DD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + B9E6461AF743BBC263EE305C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13A1B337F2133DBA6D125F81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 555BD0FBDD21224D4BF6B1B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + B275A389CD59637AAB88D86A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 599660634243EF1A31A77941 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6DA47D027F2934F687226538 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 25885F55948BAAA928C4BCE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 766FAC1D88F2EA7F04930624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 3B9757797468C2083440F20E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + D16A4BBE09B36B63E9499E5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + DFAA8928C55474BE900A7062 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + A1F5A67D04D1C97252B49D10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 5F7C634672E57476FCBC6BB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 12C7A4D86B1A60B56E5A6107 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 1D48DE47D214F0EED8222F30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 082AAD7BFB960588D2D36BB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB00DC3EA8445E3F20BDFFB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + E59AF3D7127B984D952291AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 880B1703C91850918C834C03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + C101DD4E92EEDF38B7E0D04B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 919265B2E6FE6FE2FCDFE19D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D6E9C50585415E210088F31D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 8431732C566EC6122A23E5EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18C714E6A89FDCBB0FC50955 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 434B132162DF0859BF634A1F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 9AF9F622FE9C0508842C5D9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 5618B958A1DAA66710CF993E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 087E46E041BB9BD03C891136 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 636EC942208C19211818EEAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + 8905DFE144285B1F2538B5BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DC3A3C3CE3063F57E3129A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 9ACD5616E1A0CF49C25BB45D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3392EEAEB79019283AD94C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + CC3FE02354632F361F0C2C25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0B3DD3F9A01E2001E362B91C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + 35FFC8B4BFFF24D1E513836F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 48682450497D129F69685CCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 4E376AD19489D45D5F456FB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + DCA6E5D6E4B37AA4BFEB5A37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 497F686102F75EA279331405 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 4A0DD3C934437272E8DA223E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B4604FC8FFA75D41101DA368 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 22D198DE5FAE0EDFB54919AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB413A0C638987A730D436DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + F68FFCF3EE32A111EF816D88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C46E436D1B9538DB8487F0D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 74881E83BD69C5B7B5CA18AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEAE851FF35192D8C84A47B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 39F80BE08D501FF3FE819A1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6317A2B3C9C85C2FAC861573 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 8EE8FE91699AD36D0451DB20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + 8EBA731D7F6B726C8A006213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + 8DF47F8C682F745AB71A91A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 93A15BE57FA0A5CA2CF142CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8EC5457DE5A9710C70DB532F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23CEB08B55145F9918672D05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 5B07162372966BA74D275716 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB8B6A34D5EC8F6373876B41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + B775780CE870F2F60291663F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E4ADB4678BFCDAF9E0AB7B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + 90FCFB7595F28A41E9BB6719 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D099EE852B125B983D2DB0C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + DEB4A7186D6C516703A1B9E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + ECC6745F6D17A13B6C6186E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 0A7F9DB318D80E2316866E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 7C1B68815EA0564CBB5EEA44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13A2FE7669290CC841D1F8AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + C7C61817685D766214741888 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D01C68950F9CF873E2BA08F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2E676543C71B5D2047C424D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + 384242EAFF3DF3BB324A8E9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 92587B9339AE29FEA039707C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C0D640EDEA77FB5B7AB8868 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + CBE376AE8461AEDCAD897C8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6542E2E48A3F3F57E2A77175 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + F50BC9D447D8C21068ACAE1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + 094E7147AEC5AB08CBD8C849 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + DCBF392C2A41318BB3C928A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FD2BE7E2643F5E6362D926E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 28F8DEC29DAF970259B2E164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8228B94DA6E0C609BE8A682F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + EA5B874D28FFA3354FA2A322 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 78B6C5FD9FF502ADEBD0CA46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 63A672AB39F22B41EBA5EA06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C6A7A2B4A215CB153F0DC31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + F15685EEB0407468B4645D51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 81E047E569E90D7C1CD92C34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 50F99B30D623DADE2A33682D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + E166DEA3E8461982A2C7F0F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + E10620CC85F66C09964CC9C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 022E0185ED60E5F89E275779 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26BC753E950924B5490EDC0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + F953B1DF96117FCA0D52DD48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83EF11E4D2F8D985BDE26FC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + C9C8A8123009513539B78448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0056D0859A2399C410699325 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 4D45CF93852DFA8F49D37010 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC554C82FB7D987884A3D0B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 593DDFEB1673F12CF49DF857 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 37F98037377C8C02BD967F0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 3DAE4F31178CEFE754FC69F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2E47E71998AB72F3FD7F455 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 550794050193EB16CAC8BBC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + 23EBE017EB9F439EBD0C7867 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0683C3FEEDEEEE392CB0338F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 023AEFF5441C76C17E457D0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE7D720924575F04C25886B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 45F28D6AFB29D29A5B4A302C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 161DFB130C5D374BB0EE940B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 20267DA09B5AC298D24D2340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF5764BDC5DEA76020D0BC2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + B4E2FE2F4B19C0ED72EE6D73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F8F320611614CD8F48D8DDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 77AFFE293EB49B5089202F5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + D742A95E22DB318B25C920D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + 3424E41D55153F6EB4221563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + B315CD35748AD7A6C81B409B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 5E7FA3A5BED031BE92EF5113 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + E40771030F2A92CF375A61FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + B6B83AE8CB7504B5DE73B145 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + B07D3F67263E0ED350723BC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 28A66F37AC0B88ED195EE458 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + C2F8093248DB3AB492D2AFB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + EA3746E294B6F24D0FCC5147 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + E17E2DDD2921126AA56182E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + FCCB0D91972D64F15EC62E80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7421B648634960847425D815 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7D4229BD2EACD961A4480CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + DED1B878D4204155BF3BC1F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + DC398875017EAB6F52FC779F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9FCC44F711C49E805225417 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 61825BBDAB4749A473B1FACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4394E3CE8C740772FD5C9989 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 02261B2991EDD05175401062 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A901E1C47497F42BE80FDE12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 07ED03DBC3203F0FFCA92197 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69FDCE9D3C05EE637FFC3230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + 3740B5FF5C0F2C640FFC26E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + C43C0AC4D061DE1E15C94FF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + C598369653DB9A7B02082B08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2035054ECBE52893E5F8246F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + 2AC956BA111EE264477C1D8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5AAF81C4CF273B8DF3FDB1C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + A1845D02074EF4D3F36CB635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6F156889F9CE2ABAF1F8207B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 0017EECE089D21F90AF99181 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BBCA7FFD1DE92D807F41C69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8A43667FC627EA440527972D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00042FF8F391521F340A068D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 65D26EA1509E7226B6880A1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A9828D6AD5664080FEC1FEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + D47887B822442F0D4AA4C00F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + E6AC207CF9F1F3B2A6CC376E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 4ABDE2D5D5281B88815E18C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9ADF461BA2C1EF85859AC60A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 58657F12701FBB235C874CBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1E4E7ACB0F61AD24E0305CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + BF07730B27FE7C57B967E661 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F5EA4E2F00D9BDE1AFED190 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + FA650BBE2C64AC90F5AF51CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC8021713F58133C596C1920 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + 3E75DDB03BB35794289B1287 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24FD40A802FCEDFDE7B2FFEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + CDB52FB0B7B62AA34D6178D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CBD3F2F2F94D8E138128D41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + 18FB5B091361F1955D32D62A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + C241867754839AAF62DAD01C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + ABEC8E1835104572B55E7826 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6707CA168CA763425BFCC45C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + 153457DD96FB32EAD7B8C6B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + CD81B607540D3C8CA8BE3ABF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 84793248F1EC45AC4F29F35A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + F92A4FC36C3CAAE98F83CD34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + 9B2605182531CBF23A5A7F2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BDD2A96B45E78E430717A15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + 882BCB002E8680B4E9D0CBAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + FEF6F896BECACBD728993DA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 0F0D3B4C5D336012935D65CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5CD9130C0F3D51A53C5530DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + 37D5AE7022685E131B4BE298 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + EBC8B8712A036CE779918BCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 8257B69C32B06C28A0D50461 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + E833C7DDA34B934AB37527CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 0636D633523A90FABE2CCF8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7DF23119D46CDD69CD027D7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 4F23FD08755A1CC86211528D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 295AF7C201872B2F8BCE38C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 9B7B8946036E7B99E6CDA3C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + F6671AF6BB2E9FB93CA9A157 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 6FFA2557A16F83AF374AF98C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + B73FF544CBB68632658E07AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 16AC023EFFEA076CE299D82C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 62B9CA182F07EDEA6857738B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + EF4C7CABDD863B47D8ADC900 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B71262A8F78D412AC7EC0C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + F8C753280A77F0DFF1499AEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6C9AA2887124753707250E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0666EA86CAD5FB338A8756CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 164FA43127A046B8CFAF60FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F42E2568A475F9379ED8A206 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 287BEDA48952E0881FC3D728 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2E833D5727A3A0C722E5F96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CF7E7DD4524341DFD5B492EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8D05E47A5DF4EBC47C3112F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DA47BCD08A9B69B7C4E4D195 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 70EEEAA752B3F1115115E64F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + D34A35A13DA49E578845B994 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C9E5CE25F359AB1053A59B45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4EDF64832F35877FF87BAD08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E0349CAB983754D2B4C3C3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 098E1986C6E96DE833E13010 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F3D1C7621C36898440749227 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + CAEA8838AEF77D8952D87B65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6E6F718DA26302B429B55980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + AAB7FD1623FAF3D26E9427DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3659E44A2D3890F607C9FF94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + FF7387B4B9E836C92D8FACB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6D29B7D9FF3BE376B536F2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FC3C045B487369A0B8DA5DB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + E86A6E4AF4888E03EAF76109 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C11FD01F7B61BAE27B56367 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + A8CBEB01173C6277C2A5E298 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DD9E1F5E619F3E4806B7988 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 6034EC166DE3B757AD334397 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 297368D4941A44F57D6415E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + B11ED58C49E9870DF6C82F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE127ADDCF51608FFF422FF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8BA385FC4D0450088489EC7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F20D5A547A45FDF33B815DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 66F93168169EF9AA756CB038 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ADAD7D1804416A2F06267849 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3AB8F21C852DB764E586085 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D6EBF78B6C49267E47BD557B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D404918F3D24BA8E7F8657A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E1044152125C0C73E871A04B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74EE1CB95FC39B140E1F7956 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3C06BDE8A1C4DD248548A263 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9FF69108C644110CE4E46DCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + AD3343972533668B2C4ADB39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + 834A2DD533C5C7E690CA5909 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D28D5A83B6F5441ED1FA8FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 9D6E42EAD5CA86FF9E8AD014 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BFB8C66F3052ED5BC6ED74D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + E3E0C80441BCE0416358285C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B8F4927CC31B77F1EF37C6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 99331AF44DFF179AFD87D34C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3B74B205EC1997DD0CD82467 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 7AC996CD73FEEFABC795F069 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + DBC7A0A9A25BCBA7910553F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4EFB8CFC3A7547E7F5513279 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4660185AF5B2DB091794A8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + FE8BEDFB7F60207634B4CFC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA3A1CAD3C19B90C62639098 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 2B7361E8C5611DAB2B7812E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + E2E4925CE971F6F858F4E516 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB692B5C13CCAB85B7EF9804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + F87B666C6FC4B29F83B517EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 8AD961464E02BD51E87E7C0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 1C61A2632B279572FD4060CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB2187D1A90844AAD0F3F50E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A69A721634A2C02A8E7EAC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C64EC7859D53B8EBA5FE0D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 005F27D2EED6EAF27F688559 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 02C33755D7C0C886CE8215FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 1A8204BF7F4D318B31F3EEBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + AA509DFAC94FB1B32DF7195D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 679B4D9A352D8B6A410F9A5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + B96E42C0725DCA5BEEED5957 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEC231E451E62B60A8EE7910 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + B71691BE50B1866DF162E01D = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + D518DAC7462137E915BEF49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 7F785A5A1D96E2FA7CE5378A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 781ACB5741F9E3B5E8C3360A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 898F56F0F53F7A2A4515580E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 8BF7F6794F8ED979E5DE76B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5601F9874B63F344983FE83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C73F2CD0F640FC42E9C891C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 688A9FE035530DC736A87F59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFEC967604381FD5C5CEFC28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + FCD3E4590BB210710CC3F6B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + E72CB1F9E1707244B9AF7D85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + CE145BBC1FE4C5D8937A162D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 821C51BF9DDAF567C2C3033E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2D7539953F2FC51C6E7F8328 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BA2B1B476CA6752A4213CB78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A5A71C5AE293C5A0E24F65B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 1FE02126AF21B2217A995643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 493C6A76A7C3914865FA66E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71F3A8C174D9291818B130D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9F0BE81A44358362DAF98EBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 524FF02AD6374637002CB034 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 0B4379FB70C8A8AC28552C8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 010F37D606E8575CFF70D6CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D910CE4A4FDDA8AAC362DEFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC77863A4EA194527497E7F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 2D6ABDB0BD212EC9C466AD65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72275793C023ED9377653751 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + 7491A5F56745046541021FFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + BEA607E50FEAA0BDB12067E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 2759CED446CE5AD29BE8B3BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9AA0D5109BDD29AC76DF815 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 51FDDB9CF2F9BE8F1BB0645B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BCC25E4CE5C04262959D7E87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B44FEC862443EDD2F4D5CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 06FF25BC9EAB8A98040010F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 19622A15FE44AA58506BC5EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B87F8953CEF2926D38BD5AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4A2D6F3C11913F0009D3EF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + 485BEE68BDCCF068DFC7CF66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6BB94A66D6150320991E5869 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + C41A9B43EE81495AAEF7DB73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + FCEA9D6132E4FE99FA30D59F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C7724B1B85D9E18A7D4E980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F531270492E90082BFC6A5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BAEDFC06517E2CF4EBB22CD = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 174CB2DCE5C02BBF0483010D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + 33D992EBBC415E391E321E21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; C86084A495B96EA215958914 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; D02830A908A07FD46F7387DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; A6A79D303B85B7C9D673ECD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; + 35AB2C38F34238FAC3E36284 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 9537F236180A455139A92127 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 3E9413AD8884A906757BB19E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography_wrapper.mm"; path = "../../JuceLibraryCode/juce_cryptography_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 8F02AD5DC1D2669541B1E594 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 262A2F23A1F6635650A472F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + EFAFED13866260C3C52C8738 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + C12A5E0EBBB0916C01CFC589 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + F59081D5F66B4CBDF0F51A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; 8FEC5B519774920289A1FD73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 933DADF4F3906510EA714CC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - DD6476FF0F8BE833CD54C01F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - 268B4FFB1C675B679138545F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 60A217F62952DE8A752BD79F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; 65EDE353CFC4C222043C80AB = { isa = PBXGroup; children = ( 2CB488FB81118B62A06AA82B, 6B373B89AA84EBE5964C7452, @@ -161,8 +818,12 @@ ABDE2EC87B925F50BA071DB2, DDBF5BEEBBD9314DDF866F29 ); name = "Code Editor"; sourceTree = ""; }; 38883F6AABCF4D47FC02B11F = { isa = PBXGroup; children = ( + 9CE5506AC23BBBEEF67A0485, 1B88189689F13B2A9FAEC6C8, 9B3084628EA1494464E99F5C, + B3DFC73CF5BDE3E1A3BDE8C3, + 4379C88478B06D5F3C009ED7, + 5FC3C5777BCB1D0684134969, 5789E1F7A30240B839EF936D, 0685E1C942E1D2447CADB783, 7FF9D1A9157D58AEC555D558, @@ -223,15 +884,808 @@ 38883F6AABCF4D47FC02B11F, EB77B261C62447EE22D136DD, 2436CB32D02E7E3293665601 ); name = "The Introjucer"; sourceTree = ""; }; + 3891C9A3A7DCBA95B187EAB0 = { isa = PBXGroup; children = ( + EB58C8B32506D8069CA434F5, + F5BAF17B61DDDEBB4E755627, + 11B106E9AE394F6174BC5DD9, + 04205B0990208F82D5424ED0 ); name = buffers; sourceTree = ""; }; + 3841028F736356AF5E57AAF6 = { isa = PBXGroup; children = ( + AD713FFDF08460F87A7E8A19, + 2948EA9482983984F2DC5857, + EB17F637E7B579EE533378B8, + F2048BAAB0DB55C5530428B1, + 5ED4397EE973B01B63A66FFA, + 8AA6890D65E86D7016AFDFF1, + A2011A35DCB56C73154ED0A0, + C32816C7603EDD06EAEFFFE3, + B61D43F3681C0CF32784D772, + 0AAA4381B5CEB16B2AB01A81 ); name = midi; sourceTree = ""; }; + 4ED8E4D8B784E58560CBBA78 = { isa = PBXGroup; children = ( + 2755641C347995E5D26955EB, + 45338CA520209E00FAAFAE9A, + 00EEB900895B4FA253CD2D9B, + 188AC11DF00874E56BE490AE ); name = effects; sourceTree = ""; }; + FCA9145D7E14445C4F26943F = { isa = PBXGroup; children = ( + B0E1FBC724BDA04B30BE27BB, + 3DE83D02907E5C120CB0837C, + 9048D0644140D34C0BEDF623, + 4E5559D8D30A48ABBB3E624F, + 547CA3EC46F4879104906DA7, + 7DD7B435FAFB69D0D690420C, + 255C56B21D2DBFF1C9AC88CC, + 67CD914DF9A2B3ECB39C16EB, + 60E9F175207DE1D34998A27B, + 74D2C2C01DBC339B8D237444, + 4CB371ABB2B334FB05172125, + 99B30AA241FBBB6CDA642A15, + 10FE76F48D71A43108DC3A63, + F50950265F528143E7321E19, + 4BF63E71E9B4CB90558BFDB1, + 2CDFB781567C4F2B73CFD1CF ); name = sources; sourceTree = ""; }; + C0081AE70E243505D0A12F2A = { isa = PBXGroup; children = ( + 6FD48E942DCF34E501D534EE, + E50CF83B7BD1166F1D5F416D ); name = synthesisers; sourceTree = ""; }; + 2236CCA6721140A551F78C66 = { isa = PBXGroup; children = ( + 3891C9A3A7DCBA95B187EAB0, + 3841028F736356AF5E57AAF6, + 4ED8E4D8B784E58560CBBA78, + FCA9145D7E14445C4F26943F, + C0081AE70E243505D0A12F2A, + 251279E5EC0B9A844029AE93, + ADB3E6B05A29B4D243810A85, + B60D31571AA53C4D1320FE3D ); name = "juce_audio_basics"; sourceTree = ""; }; + 80242E1E1D9538C20BB4B53C = { isa = PBXGroup; children = ( + EF691B616F9D42BF5D01A142, + B20E80B597254090490A1C3B, + 6A4A4BC3F9A997F34C8E9B34, + 57878F5765A6134C9DF3A78E, + 08BE9075932AD35F59C85BAD, + C01550CF9BD4673C6A43BB84, + A201F6EE63BC96C267FB5ECD, + 98E21640F22189694CFC1F7C, + DACF5F69C344693E46A100E4, + 83B059D0D1743D49D43672A5, + F79F483383C8E18F35F0A46D, + 0266CF365FCECDCA2FF6E5C7, + 1A9217B5E5D59719DA7D5915, + C39D4EA60939766A2E18CC04, + 27C3360EFB80D8D8C09E9D0A, + 5CB1555BF542462A08EEF939, + 8C67C18A50AC6752C71C7BAF, + 090B12C7547349FE16AEFF2C, + 909975E1E86387C70DF86E56 ); name = text; sourceTree = ""; }; + 4A9D53052A5191E0D6F461C9 = { isa = PBXGroup; children = ( + A1D1084D7C2B9911DDF9DA94, + 5D09C3035697D8804E818AC9, + BD61D5776DFAC105F801EBFB, + 715A860E2CBF3E633CBF220D, + 6073B841D4FFA8113E68BB10, + 1C9F30CFFD5DFC9F607C8846, + BB30D59B4CBA7081D072E4CC, + 794918016712974020C154BC ); name = maths; sourceTree = ""; }; + 1BBC4856971F2C691BF1D9BE = { isa = PBXGroup; children = ( + ECC6092CB42E2D9CBA9621C6, + 10E378FEDFEC7879BA7C606F, + 93799ED04BB98CCEAF759EC2, + 4CC061CCBF94D76F6D70EDFC, + D913CA7E167BFD3AD13A7B77, + B80CEC7142D263B4F53D65C9, + 7CD65A6B15B85D36A072DF48, + 9E974AE75D650C0700C2A1D8, + 057BC01CD18A03860925F2E3, + A9C1446948CF743C8FB22BC0, + CD2BF79B9847D191BA231746, + F44F552968F2B1A4250A2B16 ); name = memory; sourceTree = ""; }; + 0C1D57D51FC9AD65D0E7BABA = { isa = PBXGroup; children = ( + 257327C2A80AAA02C06A91D1, + 2D93890B6E2CB2A836F55693, + A39BB5417A71C672B41A3724, + 6869F9BEC23715B2D2027585, + 7935697C2DEBD781D40E78F6, + 403D47BC2A6DF96EFFFA336A, + C1A83A1BE31A0E07829E62F7, + 95CF50482DC7139FCB40EB1C, + 6ED3E4653561FE436C9ABA96, + 96776C5A1267032AB7A8759C, + 4FFB1B0B32560A60BF39875D, + AD4929047E881FB6AE79DE27, + A8E6F3496689C6578CB68592, + 8EEB1EB1802F58C72B46686D, + 6A7384DD3891A3E016C34C1C, + 3A1B5E4DB6F0063E14C245AE, + 51B3157142E1F78BE4969D34, + D447FE7491721A276DC58C38, + 9D0D1743D49D43672A59B12C, + 060C6BA42B5BBCCF9EA2AD59 ); name = containers; sourceTree = ""; }; + 2C3262AC916A51359D03A579 = { isa = PBXGroup; children = ( + 8D360C280EB85BFAB82E3CDB, + 936E60B5AE6F5FDD6136E64E, + AD57BF478502EEEA2C0E4E15, + 08B0F215D18600CBF4B3588C, + FEBCB906D99B7EBC6C917B66, + 23994F64DE7F0680047E63D8, + 4CC049C46BF9DA87541FB1BF, + FAE7517D0E756A43CA1890F8, + 7ED29A92D66BB61D1D00A2AD, + BFC7C93119D5C7068A54DA02, + 1E0DF42364A39ABEC95DAC62, + 942F14AB759E305FC361617C, + 8F57D3C1DA4AACDAA36AECF7, + 0E9FAFE03B88DFDB43ED6CFD, + BCB42DABB118F6ECA83E531F, + 0BC38006534478BD6B0F50AF, + EE6D6D6151AD21B28C5E2DE9 ); name = threads; sourceTree = ""; }; + D760356EF10F94FC65052D86 = { isa = PBXGroup; children = ( + 05E4F2BA6BB11B7BBA904226, + 623DFD37C551CCEBEF3C3208, + 33F08DB43EC01C410FE295AE, + 26BF0C6BC972C3B595405FEF, + 0E9A5EA1FC7EB6F706033271, + 09965B6E9A96454A73683C07 ); name = time; sourceTree = ""; }; + 72B3882C6D2BE59DFEAFD108 = { isa = PBXGroup; children = ( + E8A665BE2F5BD2F3F5F51CC5, + F4F2CDDA320D4B4F64A9F879, + B614FFAC128E440C23A60A08, + 9AF97808479FF7217740D4CF, + 300748CDFCE9B04D71DB3E73, + 3D1D585288342779EF607C37, + E54E69218486BC5BF2DAEF9A, + 36597D3D10558560E16D0AEC, + E437B18EFF38A0A6B20F3717, + 3DFD8FF809AC006A02916AEF, + 89A1E03A142EE7716AAE5CFB, + 39D64F16478BF99B35E1378D, + 0D1A401865F0BCBB6789D9E9 ); name = files; sourceTree = ""; }; + 0A215A1B2C2402F6A47AF802 = { isa = PBXGroup; children = ( + 7912DC263FB6A0A892154D93, + 973B9692727D7A052334EC86, + 59564CD0A5534CF3E6FE9AF0, + 8A1978AF3D357D196C637DA1, + 758CC2204B42335A3E822D21, + 415C23BC6AC9C374F0D2204F, + D4938BEA1A0A1D506C3CF893, + 12332163A294379C88478B06 ); name = network; sourceTree = ""; }; + 003B139BB3FC03F13917A945 = { isa = PBXGroup; children = ( + 04B6910E9F22219D9B58CCDB, + A2ABAB1E322B5BAF86D0D4DB, + 7966F7DCB261AB66B121F759, + EEEB74777419D287FDC95E5C, + E1532855B677E5C0467E9941, + E8378E23859A63BEB1D67ADC, + AF4261C2F180AA5B65BD57A3, + 0B028DA1E1271288703B27C8, + CEF529E66E38FD70C217F681, + 2594FF2B2682C1019D399428, + A92B86B147015CDAF3C19BF8, + 4F4799AC170B4AC821F18172, + 195648DF5676EBEF57009D09, + DE0A9DD02F46EA85F7391D56, + 7E47980E03ABCBB1B3B2C450 ); name = streams; sourceTree = ""; }; + 2C5F0A446946535B2BF8EA87 = { isa = PBXGroup; children = ( + 5F47813DF320EEC5A2BA0657, + A82EA62C422A6480DBE8B542, + 3F62B672F1C4D75B983811BB, + AFE36A9E3800981087731599 ); name = logging; sourceTree = ""; }; + 594F93C86F116EDAF892BC28 = { isa = PBXGroup; children = ( + E660581D9757AC60B8BA481E, + 08BE25FBB8CFFBBFA81A8C3D, + 40739BAFA3459063FE5F20A6, + D29B7D9FF3BE376B536F2B84, + 420DF64B60B856EBED284C9F ); name = system; sourceTree = ""; }; + 86D693965964628DDEBE6687 = { isa = PBXGroup; children = ( + 44D6639F30AAA6F5F4B9BFCF, + FF39806B5ECA3E740A255DD6, + 0E5C118BE5E1DCBBB48BEBED, + 2F1488894F5910E948458C3C ); name = xml; sourceTree = ""; }; + 887D285B1DBA1FA4247CC13B = { isa = PBXGroup; children = ( + C54665C8FF47F82EF4D48BF9, + FCBB061FC20763103E321FF4 ); name = json; sourceTree = ""; }; + B8AB5E7F20645CCCB8CD0A95 = { isa = PBXGroup; children = ( + 9A3B406687383E7B174DE8C4, + 783F3C22B68B3922D9CCD470, + 2CD4154655763E0BCB4E05C0, + CF9A96A89694A81F66B1C98F, + 62204148857CE32394137C07, + 4DF2B8F9D2B8AA544717FDC0 ); name = zip; sourceTree = ""; }; + 36E09572E522B6A0709BD1A2 = { isa = PBXGroup; children = ( + 944BF8F884F45546644614A4, + 24BEB291E34FB71A6022FD2B ); name = "unit_tests"; sourceTree = ""; }; + C69596E05C3760523A2064DF = { isa = PBXGroup; children = ( + A35B0E6D7B6DAB69D027508D, + B7FB9D36ED1759C3837FF78E, + C6F6D551E6671A4816EFE65A, + B2845735B8173DFC6F1E6F3B, + F0B6FA41F1EFC3C551C83A04 ); name = misc; sourceTree = ""; }; + C4AEE8D5F187CC1CC363465D = { isa = PBXGroup; children = ( + C2C9D1986848FAC819259893, + 4B54B53438A53E8550F1ADC6, + BB3F9837CFF56DBC479035E0, + C8C2641638A0466CEC1BDEAF, + 043F75C297B26289CF25CB48, + B7C1CBDF3758F6D621BB03C5, + 5D29323C7417C3AD98C66A41, + B767F2A47A763C59C6ED8E5A, + B2A644DB07467DA16EE6B075, + C550EC1643814AAB0973A510, + C433AE6B78F9BFE1B6962234, + 7AAA513C4F4E34010FDBE273, + 7E26C8A1715A4D6B8B9D62D5, + 63FD003154EB9FD318DEEDC3, + CBD5D322BE191D4968302EDF, + 4BD30AF9F1E689F8EE651E36, + 2A448743AD17DA6ECEB6B634, + D5D6F95C4D5DEC4DA0314C66, + E2C9FBCE60D17BAEC41882EB, + FAA3DADA49E7D4AD7C2012FB, + 0D8A23ACCB1E8E3D6DA34204, + A6DD469474D999AEF7D0E683, + 0780EB027E497F5ADC3A18E5, + 76512720330ABB9A6D05BE60, + 1825F983892815A996D9D911, + 191D5592FE0CA19A24DA89B4 ); name = native; sourceTree = ""; }; + 33D986B20E738CE9477E3073 = { isa = PBXGroup; children = ( + 80242E1E1D9538C20BB4B53C, + 4A9D53052A5191E0D6F461C9, + 1BBC4856971F2C691BF1D9BE, + 0C1D57D51FC9AD65D0E7BABA, + 2C3262AC916A51359D03A579, + D760356EF10F94FC65052D86, + 72B3882C6D2BE59DFEAFD108, + 0A215A1B2C2402F6A47AF802, + 003B139BB3FC03F13917A945, + 2C5F0A446946535B2BF8EA87, + 594F93C86F116EDAF892BC28, + 86D693965964628DDEBE6687, + 887D285B1DBA1FA4247CC13B, + B8AB5E7F20645CCCB8CD0A95, + 36E09572E522B6A0709BD1A2, + C69596E05C3760523A2064DF, + C4AEE8D5F187CC1CC363465D, + 5B8A8C1C128D6BCFB4BF7781, + 8630169EA4E32B1B45018D64, + AEBA4896B686B5A6E01A3522 ); name = "juce_core"; sourceTree = ""; }; + CEE87DE72E5314B876FF4F90 = { isa = PBXGroup; children = ( + 066A17E4605981393B7ED366, + 5128CE788F9FE9B9B4B9C962, + 0D3D6C7D5AF5A70D745A5920, + 8E85B6B790B05A45826800BC, + EC01CB982BFEBFC4DE98273C, + A05B6545B41AA7B901713E95 ); name = encryption; sourceTree = ""; }; + D1CE77A4E642B29A5A77A54E = { isa = PBXGroup; children = ( + AA8101E8E119F0E75C83DB42, + 61C0CE6FDD5F9A004A73EB7C, + 6D1464E296FE3F1EBF551C45, + C8D8873D66A989E9B9140EEC ); name = hashing; sourceTree = ""; }; + 458013993C056D9D36FA4017 = { isa = PBXGroup; children = ( + CEE87DE72E5314B876FF4F90, + D1CE77A4E642B29A5A77A54E, + 22C2B0CBFCE76EAD43700108, + FA71FC249235B7A120EF8C04, + 932DE91C03A14C674A42460F ); name = "juce_cryptography"; sourceTree = ""; }; + 759DCBADDF9FFEBE6C666333 = { isa = PBXGroup; children = ( + 55DBDB8777FBF1A76A715519, + 4F3A680CE354EE42349266FA, + D1F2C072AF8BA72ACD485B58, + A7C150AC7F7071378FF0AFB3 ); name = values; sourceTree = ""; }; + FDDC1DCD9B5FC439195E9E80 = { isa = PBXGroup; children = ( + F1C981CA376A6661D1EBD9B0, + C92EEAC5C770891624526B07, + E0ED5F6A90682A5707C8E7C7 ); name = undomanager; sourceTree = ""; }; + DB99A8672A4EE39790FFF232 = { isa = PBXGroup; children = ( + BDFA819E4AF09DE1A893505B, + 375E3E08B6AB1947A7CEB82F, + 4F251770A327D0C3D3D711A8, + 4C85A7F124E9F944DA376C7B ); name = "app_properties"; sourceTree = ""; }; + 188FED12B3C683E6AF2F1BFA = { isa = PBXGroup; children = ( + 759DCBADDF9FFEBE6C666333, + FDDC1DCD9B5FC439195E9E80, + DB99A8672A4EE39790FFF232, + 387C4F5F6F1FC90E55E917F6, + 7D8556BD5128937AD57C7643, + F21288F37B8ADB998310B246 ); name = "juce_data_structures"; sourceTree = ""; }; + EF5CC579D3ED1088C36004E8 = { isa = PBXGroup; children = ( + 13A5A1CC3461D9FC0391E4F4, + CEC61F0221777154E61850B9, + A42130D38E0E3B718F35E9E1, + 7BAD3503215DAA4646A23D5D, + 1206FCB26113D88E6745C14A, + 81C201F81C27BB0AC0F98D2D, + 03DC602FE252AB96188A7EB1, + 6DF23F04DECEA9A327EF58AA, + E074F5C4C29505793DFC7C47, + 7223F6FEC2A690ED1A4A39C5, + EF19C8E981CBFAF5444EF7E8 ); name = messages; sourceTree = ""; }; + 60C3BD0EDD1D8668EC62282A = { isa = PBXGroup; children = ( + 1143AC1DA255572BA843B3AB, + EC08B7617B77A61255C56B21, + BD61AEEA42605BF584C641DF, + 5A2BFBA4EB2F0C78740B3327 ); name = timers; sourceTree = ""; }; + 4C35938F44DCB2C4B1647092 = { isa = PBXGroup; children = ( + A8F696CAFD028726943ED5FB, + 7574757AD1C91061BC6ED49C, + 562F5536293EB22037789957, + 2B1F2DD43FB9C233D2BB69C5, + 743C274F4F8AED5FDB81615A, + D99098B1EAE175DAF20CA4E2, + EA06CBD7C2C1BEC7F9A10B2E, + 6A1DB045673889F727F3EF37, + 4E75EB04A7E1691AFCCEAA7F ); name = broadcasters; sourceTree = ""; }; + E59D69D389F0CBA4A0901119 = { isa = PBXGroup; children = ( + 92A4FE91ECDB35708D52646A, + DB1133E2AADDEFCD3B2D8D4D, + 1D6479F15F6739575D52CDF7, + DF735305EE131ACA07F67E19 ); name = interprocess; sourceTree = ""; }; + FB5100D0BCB7CEACC9CE23B1 = { isa = PBXGroup; children = ( + E7CAB3C8035628BEC93073A3, + 84ADE113C60934C2D847900B, + 52425B57A8EF3D17E9ECE314, + 865D03FEC621A858424B9FE0, + A33024091865D89FF13D7587, + 92E86A50B51D9915DA7F1DF2, + 77405F13B7849847B427D7EF, + FB4CA5CC996F15F3ED6EAA0B ); name = native; sourceTree = ""; }; + 979AAC066054C42E81BB77B5 = { isa = PBXGroup; children = ( + EF5CC579D3ED1088C36004E8, + 60C3BD0EDD1D8668EC62282A, + 4C35938F44DCB2C4B1647092, + E59D69D389F0CBA4A0901119, + FB5100D0BCB7CEACC9CE23B1, + 4CF52E3C6BAF4FBD6178F89C, + 7D5AF33CD463B3819B710740, + BE8B70EB6D398F8B892E738D ); name = "juce_events"; sourceTree = ""; }; + 6F0D317C610E3513C4DD30BF = { isa = PBXGroup; children = ( + 24C5FCBF2066E2F37387459F, + 82B18FC7EF9236A50BA399ED, + 080FEC1FEC394FA50B49BBE7, + D80EB381A7409C0ECAF528F9, + B89F93EB09900ADDF1CBD4C5, + 6C1365FC545E7F45BBB4C58E, + 580D3D79A609C3795D4B1D37, + 127056574EE6FD5C31112CBA, + 351A0BE5075ECCDCAFC1A95D ); name = colour; sourceTree = ""; }; + B1C57F3F4C5F206E6D2D1722 = { isa = PBXGroup; children = ( + 659BBD29AD0E6CB40B7C5A8D, + 2CB01093F18BB132F1E6879C, + 391FAA60F15652F36158359F, + 42765C3062E844825BD60DB4, + 2AEAAA670582E9BAF7DA865E, + A6AE03C77394EFD3EF19B0DC, + DA714BB6197323A392A165BD ); name = contexts; sourceTree = ""; }; + 214CFA9B006BAA2F9DA9F62C = { isa = PBXGroup; children = ( + 393179419CB3DDE8C2711382, + 074845595086937154BCB5E3, + 9CFAEF0BCB9FC51C84211432, + 17E4583BD71E361DFCE6A84B, + FD5434A7371B4EA22266C515, + 52863E6ACF0670B2BE289B6E, + 838B7FE65135DBCD8A2D3F42, + 89F8CB7ADE4FC1E91FAD88F3 ); name = images; sourceTree = ""; }; + 7BCAFF3C2010546D689DC10C = { isa = PBXGroup; children = ( + 61F0C2C255F9044A16EE71B9, + C9341D80CC6825CB6D250B13, + 688B24D14D8BB853562C1DE5 ); name = "image_formats"; sourceTree = ""; }; + FAB40B6F21DEACE9B3658349 = { isa = PBXGroup; children = ( + 1C75738FF3B404BB8A270308, + D7EC9C93B982F206609A6049, + 922C4B08A32235F91B94342B, + 5BB5FD236631A4DF69845563, + D16083EF9EA370E5409425A7, + 7BBA955E2AB9702D8ECA8614, + AB7499244A0F93637CB9523D, + 6CA12082FD33E0F933A7475B, + CF3747A1139F1BA50E385AE8, + 82F1014486AD8B0C3152FF91, + 18B56A2B9848CAEE2919AADC, + 967E8E1B800DF2C47440D1B8, + C8EA7B0879FCD6C4A58F32EB, + 01040420E5F1ECEBD8E113CB, + D5472FEB0AF87202E56C328F, + F1C71C138277C3787D86718C ); name = geometry; sourceTree = ""; }; + 9C0AB8288D92FDFA00F30FB8 = { isa = PBXGroup; children = ( + 70EFC901D65D51A60FE11EB7, + 328FA4CF214CED52428CD8CF, + E6775958767990137C868889, + 9676A1DCEEA4E17E22F93DD5 ); name = placement; sourceTree = ""; }; + EA802E0B43F19E09F151ACA0 = { isa = PBXGroup; children = ( + B9E6461AF743BBC263EE305C, + 13A1B337F2133DBA6D125F81, + 555BD0FBDD21224D4BF6B1B2, + B275A389CD59637AAB88D86A, + 599660634243EF1A31A77941, + 6DA47D027F2934F687226538, + 25885F55948BAAA928C4BCE6, + 766FAC1D88F2EA7F04930624, + 3B9757797468C2083440F20E, + D16A4BBE09B36B63E9499E5F ); name = fonts; sourceTree = ""; }; + 19449BE5F993336C3D2BC421 = { isa = PBXGroup; children = ( + DFAA8928C55474BE900A7062, + A1F5A67D04D1C97252B49D10, + 5F7C634672E57476FCBC6BB1, + 12C7A4D86B1A60B56E5A6107, + 1D48DE47D214F0EED8222F30 ); name = effects; sourceTree = ""; }; + 28C7DD61CA7C731A7392B3DF = { isa = PBXGroup; children = ( + 082AAD7BFB960588D2D36BB0, + EB00DC3EA8445E3F20BDFFB4, + E59AF3D7127B984D952291AB, + 880B1703C91850918C834C03, + C101DD4E92EEDF38B7E0D04B, + 919265B2E6FE6FE2FCDFE19D, + D6E9C50585415E210088F31D, + 8431732C566EC6122A23E5EC, + 18C714E6A89FDCBB0FC50955 ); name = native; sourceTree = ""; }; + 0EF9ACF73852D921D7C8D22A = { isa = PBXGroup; children = ( + 6F0D317C610E3513C4DD30BF, + B1C57F3F4C5F206E6D2D1722, + 214CFA9B006BAA2F9DA9F62C, + 7BCAFF3C2010546D689DC10C, + FAB40B6F21DEACE9B3658349, + 9C0AB8288D92FDFA00F30FB8, + EA802E0B43F19E09F151ACA0, + 19449BE5F993336C3D2BC421, + 28C7DD61CA7C731A7392B3DF, + 434B132162DF0859BF634A1F, + 9AF9F622FE9C0508842C5D9A, + 5618B958A1DAA66710CF993E ); name = "juce_graphics"; sourceTree = ""; }; + AEF52813D24A105AC5ABC8A6 = { isa = PBXGroup; children = ( + 087E46E041BB9BD03C891136, + 636EC942208C19211818EEAA, + 8905DFE144285B1F2538B5BB, + 3DC3A3C3CE3063F57E3129A8, + 9ACD5616E1A0CF49C25BB45D, + C3392EEAEB79019283AD94C4, + CC3FE02354632F361F0C2C25, + 0B3DD3F9A01E2001E362B91C ); name = components; sourceTree = ""; }; + 9314C746D4E92D72DA6AD735 = { isa = PBXGroup; children = ( + 35FFC8B4BFFF24D1E513836F, + 48682450497D129F69685CCF, + 4E376AD19489D45D5F456FB2, + DCA6E5D6E4B37AA4BFEB5A37, + 497F686102F75EA279331405, + 4A0DD3C934437272E8DA223E, + B4604FC8FFA75D41101DA368, + 22D198DE5FAE0EDFB54919AB, + CB413A0C638987A730D436DB, + F68FFCF3EE32A111EF816D88, + C46E436D1B9538DB8487F0D8, + 74881E83BD69C5B7B5CA18AD, + EEAE851FF35192D8C84A47B5, + 39F80BE08D501FF3FE819A1B, + 6317A2B3C9C85C2FAC861573, + 8EE8FE91699AD36D0451DB20, + 8EBA731D7F6B726C8A006213 ); name = mouse; sourceTree = ""; }; + 3941392CAEFDCCBFD3914412 = { isa = PBXGroup; children = ( + 8DF47F8C682F745AB71A91A2, + 93A15BE57FA0A5CA2CF142CB, + 8EC5457DE5A9710C70DB532F, + 23CEB08B55145F9918672D05, + 5B07162372966BA74D275716, + BB8B6A34D5EC8F6373876B41, + B775780CE870F2F60291663F, + 9E4ADB4678BFCDAF9E0AB7B3, + 90FCFB7595F28A41E9BB6719, + 3D099EE852B125B983D2DB0C, + DEB4A7186D6C516703A1B9E5, + ECC6745F6D17A13B6C6186E8, + 0A7F9DB318D80E2316866E31 ); name = keyboard; sourceTree = ""; }; + D55A1567F7EE07243CF610E8 = { isa = PBXGroup; children = ( + 7C1B68815EA0564CBB5EEA44, + 13A2FE7669290CC841D1F8AA, + C7C61817685D766214741888, + 5D01C68950F9CF873E2BA08F, + 2E676543C71B5D2047C424D0, + 384242EAFF3DF3BB324A8E9B, + 92587B9339AE29FEA039707C, + 0C0D640EDEA77FB5B7AB8868, + CBE376AE8461AEDCAD897C8C, + 6542E2E48A3F3F57E2A77175, + F50BC9D447D8C21068ACAE1B, + 094E7147AEC5AB08CBD8C849, + DCBF392C2A41318BB3C928A1, + FD2BE7E2643F5E6362D926E3, + 28F8DEC29DAF970259B2E164, + 8228B94DA6E0C609BE8A682F, + EA5B874D28FFA3354FA2A322, + 78B6C5FD9FF502ADEBD0CA46, + 63A672AB39F22B41EBA5EA06, + 5C6A7A2B4A215CB153F0DC31, + F15685EEB0407468B4645D51, + 81E047E569E90D7C1CD92C34, + 50F99B30D623DADE2A33682D, + E166DEA3E8461982A2C7F0F0, + E10620CC85F66C09964CC9C3, + 022E0185ED60E5F89E275779, + 26BC753E950924B5490EDC0A ); name = widgets; sourceTree = ""; }; + F8849A87501D62D3CA849DFE = { isa = PBXGroup; children = ( + F953B1DF96117FCA0D52DD48, + 83EF11E4D2F8D985BDE26FC8, + C9C8A8123009513539B78448, + 0056D0859A2399C410699325, + 4D45CF93852DFA8F49D37010, + DC554C82FB7D987884A3D0B3, + 593DDFEB1673F12CF49DF857, + 37F98037377C8C02BD967F0B, + 3DAE4F31178CEFE754FC69F0, + E2E47E71998AB72F3FD7F455, + 550794050193EB16CAC8BBC3, + 23EBE017EB9F439EBD0C7867, + 0683C3FEEDEEEE392CB0338F, + 023AEFF5441C76C17E457D0A, + DE7D720924575F04C25886B2, + 45F28D6AFB29D29A5B4A302C, + 161DFB130C5D374BB0EE940B, + 20267DA09B5AC298D24D2340, + FF5764BDC5DEA76020D0BC2F ); name = windows; sourceTree = ""; }; + 1818102ADE820EE94219420B = { isa = PBXGroup; children = ( + B4E2FE2F4B19C0ED72EE6D73, + 5F8F320611614CD8F48D8DDD, + 77AFFE293EB49B5089202F5C, + D742A95E22DB318B25C920D1, + 3424E41D55153F6EB4221563, + B315CD35748AD7A6C81B409B ); name = menus; sourceTree = ""; }; + A28977AB920B6CFC9380A160 = { isa = PBXGroup; children = ( + 5E7FA3A5BED031BE92EF5113, + E40771030F2A92CF375A61FF, + B6B83AE8CB7504B5DE73B145, + B07D3F67263E0ED350723BC8, + 28A66F37AC0B88ED195EE458, + C2F8093248DB3AB492D2AFB1, + EA3746E294B6F24D0FCC5147, + E17E2DDD2921126AA56182E0, + FCCB0D91972D64F15EC62E80, + 7421B648634960847425D815, + 7D4229BD2EACD961A4480CC7, + DED1B878D4204155BF3BC1F5, + DC398875017EAB6F52FC779F, + E9FCC44F711C49E805225417, + 61825BBDAB4749A473B1FACC, + 4394E3CE8C740772FD5C9989, + 02261B2991EDD05175401062, + A901E1C47497F42BE80FDE12, + 07ED03DBC3203F0FFCA92197, + 69FDCE9D3C05EE637FFC3230, + 3740B5FF5C0F2C640FFC26E0, + C43C0AC4D061DE1E15C94FF3, + C598369653DB9A7B02082B08, + 2035054ECBE52893E5F8246F, + 2AC956BA111EE264477C1D8C, + 5AAF81C4CF273B8DF3FDB1C5, + A1845D02074EF4D3F36CB635, + 6F156889F9CE2ABAF1F8207B, + 0017EECE089D21F90AF99181, + 7BBCA7FFD1DE92D807F41C69, + 8A43667FC627EA440527972D, + 00042FF8F391521F340A068D ); name = layout; sourceTree = ""; }; + 999AED11E547AABC5720AF00 = { isa = PBXGroup; children = ( + 65D26EA1509E7226B6880A1C, + 1A9828D6AD5664080FEC1FEC, + D47887B822442F0D4AA4C00F, + E6AC207CF9F1F3B2A6CC376E, + 4ABDE2D5D5281B88815E18C8, + 9ADF461BA2C1EF85859AC60A, + 58657F12701FBB235C874CBD, + B1E4E7ACB0F61AD24E0305CA, + BF07730B27FE7C57B967E661, + 3F5EA4E2F00D9BDE1AFED190, + FA650BBE2C64AC90F5AF51CA, + BC8021713F58133C596C1920, + 3E75DDB03BB35794289B1287, + 24FD40A802FCEDFDE7B2FFEB, + CDB52FB0B7B62AA34D6178D2, + 1CBD3F2F2F94D8E138128D41, + 18FB5B091361F1955D32D62A, + C241867754839AAF62DAD01C ); name = buttons; sourceTree = ""; }; + A1BDE66169525AE83CCE7FA1 = { isa = PBXGroup; children = ( + ABEC8E1835104572B55E7826, + 6707CA168CA763425BFCC45C, + 153457DD96FB32EAD7B8C6B4, + CD81B607540D3C8CA8BE3ABF, + 84793248F1EC45AC4F29F35A, + F92A4FC36C3CAAE98F83CD34, + 9B2605182531CBF23A5A7F2F, + 2BDD2A96B45E78E430717A15, + 882BCB002E8680B4E9D0CBAB, + FEF6F896BECACBD728993DA6, + 0F0D3B4C5D336012935D65CC, + 5CD9130C0F3D51A53C5530DA, + 37D5AE7022685E131B4BE298, + EBC8B8712A036CE779918BCE ); name = positioning; sourceTree = ""; }; + 1C0DC82E9AC52F397F560291 = { isa = PBXGroup; children = ( + 8257B69C32B06C28A0D50461, + E833C7DDA34B934AB37527CA, + 0636D633523A90FABE2CCF8F, + 7DF23119D46CDD69CD027D7C, + 4F23FD08755A1CC86211528D, + 295AF7C201872B2F8BCE38C3, + 9B7B8946036E7B99E6CDA3C2, + F6671AF6BB2E9FB93CA9A157, + 6FFA2557A16F83AF374AF98C, + B73FF544CBB68632658E07AC, + 16AC023EFFEA076CE299D82C, + 62B9CA182F07EDEA6857738B, + EF4C7CABDD863B47D8ADC900, + 5B71262A8F78D412AC7EC0C2, + F8C753280A77F0DFF1499AEA ); name = drawables; sourceTree = ""; }; + 70D5356005F5FDA3271F7DA8 = { isa = PBXGroup; children = ( + C6C9AA2887124753707250E2, + 0666EA86CAD5FB338A8756CC, + 164FA43127A046B8CFAF60FC, + F42E2568A475F9379ED8A206, + 287BEDA48952E0881FC3D728, + B2E833D5727A3A0C722E5F96, + CF7E7DD4524341DFD5B492EE, + 8D05E47A5DF4EBC47C3112F0, + DA47BCD08A9B69B7C4E4D195, + 70EEEAA752B3F1115115E64F, + D34A35A13DA49E578845B994, + C9E5CE25F359AB1053A59B45, + 4EDF64832F35877FF87BAD08, + 1E0349CAB983754D2B4C3C3F ); name = properties; sourceTree = ""; }; + CBD6727733FD6D94173B88E7 = { isa = PBXGroup; children = ( + 098E1986C6E96DE833E13010, + F3D1C7621C36898440749227 ); name = lookandfeel; sourceTree = ""; }; + B45AFB31EF44864E910226A0 = { isa = PBXGroup; children = ( + CAEA8838AEF77D8952D87B65, + 6E6F718DA26302B429B55980, + AAB7FD1623FAF3D26E9427DF, + 3659E44A2D3890F607C9FF94, + FF7387B4B9E836C92D8FACB6, + C6D29B7D9FF3BE376B536F2B, + FC3C045B487369A0B8DA5DB6, + E86A6E4AF4888E03EAF76109, + 8C11FD01F7B61BAE27B56367, + A8CBEB01173C6277C2A5E298, + 1DD9E1F5E619F3E4806B7988, + 6034EC166DE3B757AD334397, + 297368D4941A44F57D6415E8, + B11ED58C49E9870DF6C82F45, + FE127ADDCF51608FFF422FF0, + 8BA385FC4D0450088489EC7B, + 8F20D5A547A45FDF33B815DB, + 66F93168169EF9AA756CB038, + ADAD7D1804416A2F06267849, + D3AB8F21C852DB764E586085, + D6EBF78B6C49267E47BD557B, + D404918F3D24BA8E7F8657A4, + E1044152125C0C73E871A04B, + 74EE1CB95FC39B140E1F7956, + 3C06BDE8A1C4DD248548A263, + 9FF69108C644110CE4E46DCC ); name = filebrowser; sourceTree = ""; }; + CCDABEB65A00743818744A9A = { isa = PBXGroup; children = ( + AD3343972533668B2C4ADB39, + 834A2DD533C5C7E690CA5909, + 5D28D5A83B6F5441ED1FA8FE, + 9D6E42EAD5CA86FF9E8AD014, + 0BFB8C66F3052ED5BC6ED74D, + E3E0C80441BCE0416358285C, + 5B8F4927CC31B77F1EF37C6A, + 99331AF44DFF179AFD87D34C, + 3B74B205EC1997DD0CD82467 ); name = commands; sourceTree = ""; }; + 77FD0753155A36D2B28B962F = { isa = PBXGroup; children = ( + 7AC996CD73FEEFABC795F069, + DBC7A0A9A25BCBA7910553F9, + 4EFB8CFC3A7547E7F5513279, + E4660185AF5B2DB091794A8D ); name = misc; sourceTree = ""; }; + F04B6F163B25D6AB40B76D36 = { isa = PBXGroup; children = ( + FE8BEDFB7F60207634B4CFC4, + BA3A1CAD3C19B90C62639098, + 2B7361E8C5611DAB2B7812E7 ); name = application; sourceTree = ""; }; + 9CCF747CA4B0E1D164B7010C = { isa = PBXGroup; children = ( + E2E4925CE971F6F858F4E516, + DB692B5C13CCAB85B7EF9804, + F87B666C6FC4B29F83B517EA, + 8AD961464E02BD51E87E7C0F, + 1C61A2632B279572FD4060CB, + FB2187D1A90844AAD0F3F50E, + 3A69A721634A2C02A8E7EAC0, + 4C64EC7859D53B8EBA5FE0D4, + 005F27D2EED6EAF27F688559, + 02C33755D7C0C886CE8215FD, + 1A8204BF7F4D318B31F3EEBF, + AA509DFAC94FB1B32DF7195D, + 679B4D9A352D8B6A410F9A5D, + B96E42C0725DCA5BEEED5957, + EEC231E451E62B60A8EE7910 ); name = native; sourceTree = ""; }; + 6BDB61AFB7662074B5AAAD24 = { isa = PBXGroup; children = ( + AEF52813D24A105AC5ABC8A6, + 9314C746D4E92D72DA6AD735, + 3941392CAEFDCCBFD3914412, + D55A1567F7EE07243CF610E8, + F8849A87501D62D3CA849DFE, + 1818102ADE820EE94219420B, + A28977AB920B6CFC9380A160, + 999AED11E547AABC5720AF00, + A1BDE66169525AE83CCE7FA1, + 1C0DC82E9AC52F397F560291, + 70D5356005F5FDA3271F7DA8, + CBD6727733FD6D94173B88E7, + B45AFB31EF44864E910226A0, + CCDABEB65A00743818744A9A, + 77FD0753155A36D2B28B962F, + F04B6F163B25D6AB40B76D36, + 9CCF747CA4B0E1D164B7010C, + B71691BE50B1866DF162E01D, + D518DAC7462137E915BEF49E, + 7F785A5A1D96E2FA7CE5378A ); name = "juce_gui_basics"; sourceTree = ""; }; + 96760944139882DCEC6CA4AD = { isa = PBXGroup; children = ( + 781ACB5741F9E3B5E8C3360A, + 898F56F0F53F7A2A4515580E, + 8BF7F6794F8ED979E5DE76B3, + F5601F9874B63F344983FE83, + C73F2CD0F640FC42E9C891C8, + 688A9FE035530DC736A87F59, + FFEC967604381FD5C5CEFC28 ); name = "code_editor"; sourceTree = ""; }; + 19B7BC18E8C6FB06F7F6C172 = { isa = PBXGroup; children = ( + FCD3E4590BB210710CC3F6B7, + E72CB1F9E1707244B9AF7D85 ); name = documents; sourceTree = ""; }; + 3EE153C54478CA94BD3E71DA = { isa = PBXGroup; children = ( + CE145BBC1FE4C5D8937A162D, + 821C51BF9DDAF567C2C3033E, + 2D7539953F2FC51C6E7F8328 ); name = embedding; sourceTree = ""; }; + 9758A17CBC6D051C595329EA = { isa = PBXGroup; children = ( + BA2B1B476CA6752A4213CB78, + 7A5A71C5AE293C5A0E24F65B ); name = lookandfeel; sourceTree = ""; }; + A834BD29C255D5BDD21D08D0 = { isa = PBXGroup; children = ( + 1FE02126AF21B2217A995643, + 493C6A76A7C3914865FA66E5, + 71F3A8C174D9291818B130D4, + 9F0BE81A44358362DAF98EBA, + 524FF02AD6374637002CB034, + 0B4379FB70C8A8AC28552C8E, + 010F37D606E8575CFF70D6CE, + D910CE4A4FDDA8AAC362DEFB, + DC77863A4EA194527497E7F1, + 2D6ABDB0BD212EC9C466AD65, + 72275793C023ED9377653751, + 7491A5F56745046541021FFE, + BEA607E50FEAA0BDB12067E9, + 2759CED446CE5AD29BE8B3BB, + A9AA0D5109BDD29AC76DF815, + 51FDDB9CF2F9BE8F1BB0645B ); name = misc; sourceTree = ""; }; + F3F272E6AF7A0F8E321CDC7A = { isa = PBXGroup; children = ( + BCC25E4CE5C04262959D7E87, + 4B44FEC862443EDD2F4D5CAB, + 06FF25BC9EAB8A98040010F0, + 19622A15FE44AA58506BC5EB, + 9B87F8953CEF2926D38BD5AC, + A4A2D6F3C11913F0009D3EF6, + 485BEE68BDCCF068DFC7CF66, + 6BB94A66D6150320991E5869, + C41A9B43EE81495AAEF7DB73, + FCEA9D6132E4FE99FA30D59F, + 0C7724B1B85D9E18A7D4E980, + 0F531270492E90082BFC6A5D ); name = native; sourceTree = ""; }; + D5A36168865FE6744D8FC7EC = { isa = PBXGroup; children = ( + 96760944139882DCEC6CA4AD, + 19B7BC18E8C6FB06F7F6C172, + 3EE153C54478CA94BD3E71DA, + 9758A17CBC6D051C595329EA, + A834BD29C255D5BDD21D08D0, + F3F272E6AF7A0F8E321CDC7A, + 0BAEDFC06517E2CF4EBB22CD, + 174CB2DCE5C02BBF0483010D, + 33D992EBBC415E391E321E21 ); name = "juce_gui_extra"; sourceTree = ""; }; + CEE72D9CA28977AB920B6CFC = { isa = PBXGroup; children = ( + 2236CCA6721140A551F78C66, + 33D986B20E738CE9477E3073, + 458013993C056D9D36FA4017, + 188FED12B3C683E6AF2F1BFA, + 979AAC066054C42E81BB77B5, + 0EF9ACF73852D921D7C8D22A, + 6BDB61AFB7662074B5AAAD24, + D5A36168865FE6744D8FC7EC ); name = "Juce Modules"; sourceTree = ""; }; 265749F75DBA86EC3F19FE34 = { isa = PBXGroup; children = ( C86084A495B96EA215958914, D02830A908A07FD46F7387DA, A6A79D303B85B7C9D673ECD5, - 8FEC5B519774920289A1FD73, - 933DADF4F3906510EA714CC0, - DD6476FF0F8BE833CD54C01F, - 268B4FFB1C675B679138545F, - 60A217F62952DE8A752BD79F ); name = "Juce Library Code"; sourceTree = ""; }; + 35AB2C38F34238FAC3E36284, + 9537F236180A455139A92127, + 3E9413AD8884A906757BB19E, + 8F02AD5DC1D2669541B1E594, + 262A2F23A1F6635650A472F6, + EFAFED13866260C3C52C8738, + C12A5E0EBBB0916C01CFC589, + F59081D5F66B4CBDF0F51A23, + 8FEC5B519774920289A1FD73 ); name = "Juce Library Code"; sourceTree = ""; }; EAC5B9DBB227CB2A002EF355 = { isa = PBXGroup; children = ( F4C5CF1AA7EB9298043D89D3, 3417A0C1AE7900A7E07C1CA1 ); name = Resources; sourceTree = ""; }; @@ -252,6 +1706,7 @@ 12E1601866B3489844AFD645 ); name = Products; sourceTree = ""; }; F03291953F0A7EA46599E27B = { isa = PBXGroup; children = ( B01AA6CC1327A5DBCB35B7BF, + CEE72D9CA28977AB920B6CFC, 265749F75DBA86EC3F19FE34, EAC5B9DBB227CB2A002EF355, 0D737FA088906E13707BAEB7, @@ -335,6 +1790,7 @@ A7C05B907BBCB4288FBC6428, 6B48E4B12BB56C2254F293DF, 7A7859C8F2DFDC8D80FE0F0E, + 047186A4F90C1600CD492AD7, 5BD727176204D71F2E0F42CC, DA3D1949878344EAE971E9CF, 086FC650CA4A39161F5DC34A, @@ -351,10 +1807,14 @@ 0F780301B225C3022C346CD4, 59B173809CEC75EC0C74D1CF, 69CA42E334E4BA09E4FE8B65, - 0C3A85F58C34FA91D16664EB, - 08C0959668FFC1A90B4BA8E6, - 1457A52734BA97A13610ECF1, - 20EDB5C810855EB960F520FC ); runOnlyForDeploymentPostprocessing = 0; }; + 8E715E0E966939643B2D1746, + 0F3F2686ECC4E6364B776A82, + 75FD1C0661D69FC021F0952D, + C0884071631177D4A0065933, + 998A1810370730DCBBA2F006, + 7A62EF7F61639801B0897033, + 5CE130B62941A38CCBF86439, + 53AF027D9F46E9ABB9CA27C4 ); runOnlyForDeploymentPostprocessing = 0; }; 08881173C882953BE5F11D6C = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 1FD6A59398E3618F79475867, B703C44375C75E5AB099E74A, diff --git a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj index afeac2d2dd..979e7ed047 100644 --- a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj +++ b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj @@ -150,8 +150,12 @@ + + + + @@ -327,15 +331,3428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/Introjucer/Builds/VisualStudio2005/icon.ico b/extras/Introjucer/Builds/VisualStudio2005/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 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 T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj index b77ad5f9f6..4e6a3e326a 100644 --- a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj +++ b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj @@ -150,8 +150,12 @@ + + + + @@ -327,15 +331,3428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/Introjucer/Builds/VisualStudio2008/icon.ico b/extras/Introjucer/Builds/VisualStudio2008/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 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 T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj index fb75b53591..bfe9c46de9 100644 --- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj +++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj @@ -130,6 +130,7 @@ + @@ -145,11 +146,882 @@ + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + - - - - + + + + + + + + @@ -162,7 +1034,10 @@ + + + @@ -191,6 +1066,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters index 9e619dc50f..cabcf291db 100644 --- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters +++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters @@ -20,6 +20,225 @@ {8CE77BC0-4FCD-C9EA-C5D2-4E2ED36FDAAD} + + {F842EDF7-A721-5611-7D34-D687130DB5AF} + + + {7DC92EF2-E271-9A9D-670B-D20E3BB1A433} + + + {953A48F2-5B19-40DB-D4D9-68702D2B7E55} + + + {876A26AF-3F56-0869-028E-BE6C40A1A182} + + + {0C3A88A6-68D6-21C8-3D84-1E4572BED74B} + + + {F310E954-1312-0901-03F2-DB22605C8D01} + + + {C78E3776-E6F7-3E8C-B749-98CBDDCE9B0E} + + + {0950B058-AE5B-9D46-7088-E03C444D0F06} + + + {110A03A4-99F0-441B-D5B6-A74FFF0E08A2} + + + {D7459C19-374D-EBF2-B7EC-A8F9DC82E741} + + + {1C45EE46-3117-A859-CA98-06A747CB08E7} + + + {F8C2FA89-B782-8B08-3538-E554731603D6} + + + {DE4B5FB8-422B-CCF8-01DC-56AF98FA4C08} + + + {DD78461B-C718-578D-5B4B-735D64F85724} + + + {84719C40-C884-7A1C-8560-D3D822FDB0E1} + + + {FFAC3930-D516-902F-5C61-08568323330C} + + + {0BC6E7C2-9663-7337-062F-970900509712} + + + {3A35ABF7-E18A-4952-5915-A0E1928C53DC} + + + {5D80F2FA-AB7E-764A-2E18-6592C2B14DD7} + + + {39230F68-000A-4CAD-5D74-84BAF16E272F} + + + {09A609BD-B7DC-31A0-BD9C-E90FE0A4FFAE} + + + {1EE08F66-DBAE-C771-4494-58158DA3E8E3} + + + {F1B39DB8-0626-341D-E4D2-76F34BBBF046} + + + {94FE3E28-3828-47E0-1FDF-8176013BDB0D} + + + {101B74A4-0992-5DE8-5838-A808DDE8B7A3} + + + {81E4430F-8336-03D6-2E23-2F77A449AED3} + + + {5CD34F3A-F35F-5830-DE8A-1732DD84968C} + + + {4749AF67-BC46-FE1A-1907-A872742825AE} + + + {3D58C186-9603-64EB-6AB4-FE4C2582E3F6} + + + {58D114A5-0A45-AFE3-8FD5-91086EC144B6} + + + {092FFEA1-B1DD-E3B0-F622-FFF82E191BF4} + + + {D19F7DDF-AA91-367F-7E78-0F7689139649} + + + {221A04C3-46E0-25ED-0513-01F1DF98B7A6} + + + {39F0D56F-4316-F922-D5CA-85947579494C} + + + {C0804462-8683-F5B4-35C7-0F1AE996B629} + + + {0CAC698D-DB2F-4D66-245A-37F1310CF591} + + + {2A86729D-3CA8-6092-76D1-BBFAB48302BA} + + + {21A9F27B-BCC0-624D-9A36-88B47BD8D73F} + + + {A0F36010-FD26-9A02-A707-2524D866CEEB} + + + {3F824684-074B-B8A4-DC59-9FA2130B8B07} + + + {5086C76D-93A3-F4CD-261C-170B507AA20A} + + + {FB197235-391F-F615-38DF-64E37458A2C8} + + + {C245AE79-C1FD-1BC7-A240-D92685E39CED} + + + {9D69F675-30B3-E489-B83D-093CF74A81E9} + + + {95B19F07-6A2A-E1E6-9BD0-D57C1452FAAF} + + + {E71382FA-04DA-800E-6204-31FD1466270C} + + + {01C45013-2710-FE83-2E3B-5F7681DF9F18} + + + {94AC1409-AD42-20B6-8C9D-C4BC9E583E67} + + + {D53FD225-AF8F-5F19-7248-FA0A994B6E3B} + + + {BB0565EF-1117-CE48-B0C4-960A9CB8DD1F} + + + {16014E24-CC78-5E84-64C6-EE1BF3FDA49C} + + + {F9B05FE0-5C2F-42A8-102C-13F88E77AD34} + + + {8C3E1986-17AA-A915-13D0-4453AFFCBB1E} + + + {79B5AC4F-3FB5-ECA1-8C27-81CE05DEF3DA} + + + {9FAC018F-AB64-231D-97DA-EDC2CB323896} + + + {B384975A-B6DD-4E25-5FFE-3EAB799A5A68} + + + {DE0571DC-7C78-DB94-C2FF-920A5AB6D0FF} + + + {0C9063E0-CA59-B74B-7DAC-7E3C506A8325} + + + {CC50812F-047B-0A05-950E-322525ED72D2} + + + {BE9FC74F-A5FE-100D-1960-43C935C55E14} + + + {88FAEC05-1EE5-FD2B-CAA8-B6518C128B16} + + + {F5A19631-2F74-42A9-6077-9EC22B838128} + + + {91B974D2-D165-F4AB-9CC3-F90CE3247D61} + + + {80B64FE2-98A0-247F-46DB-AE6F0F774E0A} + + + {54FACAAC-45ED-C556-7508-13BC301C7411} + + + {C2FBFCFD-4D4D-D52B-35F5-18D93FB9FE7D} + + + {2482DD44-D4EA-9123-BE3D-4AE300D6A890} + + + {71CFB766-88E6-82E0-FB9D-3472EE482CBB} + + + {F1D1D500-7CF8-2E57-D5C9-A63A02DFE8B6} + + + {FF5C4F31-62C5-0D5F-D004-E8DAA7DA568A} + + + {7883B6D2-68CE-FABB-A6C3-28AE5594E88F} + + + {6ED2E9D2-03E8-CB5D-E6FB-A46F606E8CFC} + + + {0334B933-300F-41D5-DB61-A835920A62C4} + {F7048EA6-F4B2-F31B-E402-E05D678A1111} @@ -49,6 +268,9 @@ The Introjucer\Project + + The Introjucer\Project + The Introjucer\Project @@ -121,19 +343,967 @@ The Introjucer\BinaryData + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_gui_extra + Juce Library Code - + Juce Library Code - + Juce Library Code - + Juce Library Code - + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + Juce Library Code @@ -168,9 +1338,18 @@ The Introjucer\Code Editor + + The Introjucer\Project + The Introjucer\Project + + The Introjucer\Project + + + The Introjucer\Project + The Introjucer\Project @@ -255,6 +1434,1002 @@ The Introjucer\BinaryData + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + Juce Library Code diff --git a/extras/Introjucer/Builds/VisualStudio2010/icon.ico b/extras/Introjucer/Builds/VisualStudio2010/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 zcmeF42YggT_xCqIAV3O)Kr3om40u}^O6crUaiV7$e6vYCH1;ySF zR74=5DMbYoL{z{+m73jof8V-~FMrKRQlUBl(-Q`Y60Fv0tGVn~q7)5zsY)HOO)ckq6% zgR6zEJB?QK6tCg@1edFFzoO+kjtQySZET?ubuQI+4FusQxL2erw87ArK`(sPbn^H6 zGH32F$xrV$nUDT*r26Ou-xf=_bfWj(0q;_}Si;Z=4JU8jd*0K=G`Pl?^Pe}S=Lg1g zn`}&v8OC&&wa-L#o&Kh-uH}D+;EJ7xWKI3?&mNB$Q?f&@32KvT(k^$KE1vO~!mV>n zv39wp;aJ`46}Ktf>i%bRy|8|)RjD*$K~9%N#?%|_cCIbaIoDL_mutG;>^8x=U&$`H z#?>;{beU>Q+O%H|6fM)FhrPOZ`L4avAN&1C|JRHeJIiD0U*R@Ibxl;ST+{q&w<)Z? zxnJh+Tyxdy#x#A`n5fQAJ+AAEagXp8lW*#-@8bu$O{s3VrpYp>cYXej^WHKhroY>Sbkei8%{7rdbIq^^ z+-BPA8qbw(Q(XNQ?U-wd2rpe9Hm3H3ua@i5a$H}k#iLhsRR1ZLXxtiW%B8uc|6Oj= zc$C|88}BwvbgVTb*95oEHHCG3kH?Hjye{V>U0Qaz0X)N5Ge~0&e zA-cZ9{i5&eKRxBTyfngg?0XDJo7yPho^5M;i9S4IKjHZT-LLt0V|qPhOsg5Y_eGue z!PUOk{PpvI3gs_ea&zrT+g8_}zW0yR>HGFJeq`t7#Bpn87Rh)N89Lb(S~O~GjnJyM z>N)F2=Xa427I#OuTwBCRpA;4ZNtXb+;5f+po^v>tYjT@=^-QeJZ6QEk(I%jH{%^Ms z4L?#)Q4lMrE{GSz31S501;T*qRCS{+DXt9E;pR=x1gXuXXVy=3l zaIxh3buN0ny?}9?F4cKv@Y=4BtLW$wF~eRe)8(VBm2UjSQ{zdGsq?Bab>B25OZq8G z$Mlz_J03Y=Dv#cLD6-j$YeOR2p$CTwng}WgP6Zbwb$*hdS8!PChs$(bxGnzS1E$+T zV{Te$%x%kML-e_h^m5&K(%X{drtit7d}d7R1;(V#HKy8aJKPbCW_?+xP{o^cA8-MG zoXi+_?nL3bU&**puT~nhxeSgPR zF^&QExXrEEUjC>!XvMEZipE{1`)3M51N0AV5{ndx8&&bbmA|LGEqn{-on$kyd$wPD zq>maG=9&fSpCfaO~eo>x-79>p%5romt|c zH$+qQpD-}+y-NrerMu^vISV|dd~dHGVEgqwVpne!PqY)i)||MA!yrSBejeF~f-{7l3;^(2VtuFaFzW21BLp6p;FL_Ma^YZUMNY{>kQT=~pOs3?t zeD`*+z-e6ee1LCfc@i_ zFzycH+~!*GZ!J9!&lPvWPq`uCZN{m;Y69CLWWL%&cYc3es$}|7^?mi@Zqru2#qfvS z=Di$`xl{5Meg5%$7$RTdCdnM%Y zCHa%^A2Lv>Z>||~pZNY6`B>sT##UO_Unn1EgvNkwD%_&Uuevu9_M>_aKvP{8TE+QzXKPH z2YdjL;??`4OX`XS6)sr1wXmyjYxRw-q(zmC>^ZW=?K?~x=`#AqU$lH?kI)-gjFta3 z<}tUq{t1tHQhINg`W^qY+wqC<@2p>Kuj7b5xJBdU`6>-v{j$a$uG`NPPn$P#yw6v)LFW@ z;?OU*$whCa{%zb7ULvghpla9sco_QM@{Y%Z`tdsQ4nD)>$M=&DJy9}MSGM5B8E(_= zdhfBNe0h9n%Zql*9C`kmr3c!I7t8ls_MPaD&uDc(iDHGTwy8XH?T)l}jJaMoiV;1* zBfdR62(R~=;5Kh9kzRjNv5x3TUpEQwj4e#~xO|G+jDFN@LWLvv)3^T;y8dp_zM*8G zY`gbAld`R;{(W1`==L8hsw3aHkN9MQaGNZ>nmJ7OMFz7y=IQr5CR5K0FTzu$GzR*k zAD$Wf5YJ4S<2J3Y^`3`}z!R19JoiZtCr&?V!c!iYqKFsXAIQ`<(dzdd(4AxdSkZA(vO2Blb1-J zR~)_NK=II4_;3C;C?upvT;rI_zy29Lg&u10zI+YcqrBoh?t2_Q^}OhqOVvL#^8F3E z#LH$rDf>HIam}@&=MeE-y6#!A^V=V)Z)FDpwy4Ou&rVNy;;5-39Xv+k?Izwr_xj$S z&)}cuyheJ`pVs^i&-A<3ZMurzlGSgz>}mBIw;zqFdc`H`+48;rAc_UMs->3iz3i(D z*}smG#e3#?Ot@sh;@ysezndz4Bo6h*4d?J(TiNcx(&f+-y&KhF&T~?@_|XNm;t>^w z_l&vX`#;h&hQ8v1J4A!p^11MTtZeaomq_o-6<;D7c3d3cw-OrPcO zw!EY(E=3*VXPl^o7OQa6(5hGexGzm(Z-b8|-n~%%OljSpaYP9J_k83rlUC~427C3Q z6Guxns!2~zkbW2@`qh>^mF>N1eUXq(=zB$IC*8tI#@y1s;^6h))s{a}SN`o#@zU+; z^Ty{q=I*yVrjKabT0DBMUimGg+7ddQUR{Q3MM;XUe|V&8U< zMT-~dmKE7*;k@|Ub{TLOdkL8-mH|=mo4_dn+ zvcW6&hlls(nXP{P8(klFX;^S@%Q_{iJuon=?kl%Nw_Wf=<<6fz7uo#%X`yMe#}%(I zzDF@vmFl{JIQ3jK_=&zwhNlCL$I!MEmcn-#kIQvyu6*M|vdg=@P;86KRrnJx1nC$w z!3!=O1A%i6=LrgL@j@}(s~Gp>-t<9VPM@CUCQZ?E;$Icbc$ zoPaUc6|@zQ=jkUP2Q*k<^FSQ=o9~G;dkNYJ>I--l@_py(Ip7g|EXIwm*;R0n;7a8- z#swFPx;rE+iTPSpCJOC1AN2@kdxEaox0Y)A#3m| zYOS?kfchN`KEo0oTvob$_P(mu{$>)V9Wfd53+l<&$Jg|Q`uwf$GZiP+diQihsgqX^Gw(qVqxf7M*z+*4GB-599nZ)PV~UF2jcHL zXllJ=OoqnSL@`ob`9&!jW2SO%S@Hq=ft*~LeAp~KONMfV2@f7J6^DF%C@kg4)gh%D zP1F5{3!p`Y0H5&h*lNa3j*;9_FX3opiRj+5B3drl6MxSEQ%B=#D8J?AFO7L)qcQKT z7wCAOVv9`umf`aZY4Vk`^cuctg-+Lkw zCoK*M2_2_?d4?SN2RUbo9+2wx2~_L;)-!-^4Nm6OD0 zcYJgC&ctjk}P25 zpyp0TE2sX}x0-*<%VpW$eUIRvxZq~x9LNhcMz)2gDr0^#rEA_=y+X^hnOeU8*N4z4wZ+S~Nlqs#2L*qS+wdKO|7YS%a>TFyXv_@7Mn&|u|2e*Y z6E{1tqw)doY}S0V`pgn9mA`P)(eQHTKc(?pAi(ZmJM(MkTl|=o#fwLd3d?$DOY)Ps zrk?JTA>Mp(g_?^yT@Z&VR~f4x)kEqM-%5B-{5BSROO+Bt2&~0%G1in zG@QRPyj1MX8doPlydXasz+d=Zy&~f8c{gU@s018LL?uH zzw(&NHJ(7Zdf#*HXYL&;UYe&oO?&AjWFhW0)d3_uv`Bn3Kx0E6qFVwrbbXVO#Y&Bg zYWLX=>*$ok z6O99&c~Wygy_KgAl#2;;J@*Y0@4XKG6~AKx@ja^FvDbvh-S~>ehYye-V7$JKcq2U| zxX^`V>%aa@vhttEEqLb{I_h4{m8+N}n=|2A<*_A?zWKR8V?obPe$`{nzwPA45ASfz z*vCBP_EmYh6q|sZRxY4aF8~Tjd@P`x{T~CInO|2=R3x7ukt<2lbi_u=qD#{`;^-(*sk1(`h{<>-HZj_ zFM8m{+=%E-cWInW1n|0T@Dh5bRbR2dg@FPAB= zO`d;-<{GNXKJmRTPodA@1?Fgc>BN1=jTTcbu&wgZ%-_5qzo@U~Ez4Zof$F!0E!Q2ua=&vIDF?3{Y?A7o zEZ+x`A?_WgeEB=_De6m?;FCvnS+ToViKL+#FaD6tSEGw+hJ;kOAi8VLZ#6y$6UiQZ(--)vJ;ZIEcuVtxDb2J~PE*1C=)>?_R#|y8XpU zWH5gC$KoIUk1H8cu}_80**i1x@J}2yoOx=EC%^mqe-BQfLub*A`MWni_n4o4lig5k zf?wb($Ntv_`WxEMkS-b|J(MQ?Dc}36y(PlZu>r`h<$rwUs>O?jbt}_y(N^RnRW!I^ zr7_oN9_wVr&$t;|yynKRS+B@%s3x6sFCZHJ3bJ2w~hQrW@PHqZ`8Q=fT=5chtK(}<~8w0xR)I}pV1}oNqOmO zY7MskA^%P`x~86k?>UF#!+NHc((&*-G-AH@GTFcR((4UXw@Hm>ezZUbSJ3_679Tg2 z4M6Va@7ol& zZ`tlK%cbA?scsQ_%Z}GI+=DvF7gb|2Zo1|n6+dD#{9_{SRbSV>rnn&<}qa zvtze0SIIUp$IMuLX#}m%HB%%D$b_$5;x}XoHY|_U#4=+f zJ9n>pSSc5)!ZUc*&uGJcin zM-=9lF*BHQmw0sPI+Sv1WF5-#%WFKbBmzp3PJt^DwwB+vT)gE(!^bT{x)vnv& zE)#prof_YX@(|_1LW(pj(`@0oRPi@40RAiX?C!6OnfScocl^0L8ryOBANjqE_+y6R zmq^XC7j!;!ATE7X<0d~tUayh(9eod=&&#*@{QJo8Nc>K6Blw&7HGI0*GKu%xS>e(j zJ;d&epZII8__USgwok^NfZwaCJ{w=Bw4S4&@$>A+FLgR&a=iXBvgi2yioL2_xx-XQ znKn&MJ~qo=ZUa3Ba!{vK+T0InPC97nEAB!UU88$Ht+P%vl6E)~lzHHeh9m=#{@gwv@mdU}+lzkd2 zoq&(yUti(NL)bKI?k~TqwnFmguYY{cKHP~7ktLWoNw{Q`nYIyA3H<#(N>5!94(KAqk zc;zzH->mnT{_+i|Nn;Gw{$OVr&phR9rzjp6{jltxY?l9XqI>whs`S$v(l_uveiyVZ zJ8-i*H2%>CWR&o8te<((1NS)*d5I}r{oLKE2}57ClI*-EJy=HdUDj`Nd=Js5oaEvn#f)z&$Hmymw~=$Ic*)k>5(zUV ztKaGZ@|l0P<!7>^9sX%Hfhw22*2s#De9`oH(jo|75r9Y-OeHL3?pQ}=gN;E7yXKk zx5!R4)3{T`D|MtFDv$crL^Swxd06@W@ewG1!QCQIMP>qP7jxaRyoKCr(2 zM;mbjtWV$mF<1bwnH|s7sFYe5=c) zx+7=xgHCreo;@DoZ)rbW?nJ5fxP`x!s66f%$F^2)B3;mKMed21I`>D@lJm5KNS7n#Q=5;z*obzVdDUN34nMDz)t4}_8fbS zy$AQ>zP1m2{9pTrF<@y8jVxV>OG^pxA@RwmF(Qu*P$vQqi{uCP9D5Ddb06-28OdiDQ2vifq1pvN}%>#Q4 z*K;54$9=g!{m>u%(m&&1JdBI+{jZ&Q3?OI7o25B&2_2}pfIiR*n#K!=Arl2jf@DF8 zptgWm9;j0Q*mF3a>$sl#a6j(L{ppAP=$HN(2jj84VD*B&`d|AS7{Et^?#LE;7aeSA zj$A?q^6$_GT0z$gL0tj4?FNEIg2sZTf@XQpT*npxfbZ=&oX>S!&waQb_vQZdLx1#3 z|BQq2SYBY9jF)jUexBoh?c_1wPj_T1T7V9Y6@YW(5;|lFpbzwFA!sdVC+HyPB zkZ_VMKf0r5k+DQUssNlLm&j`y0rY{!(6G0lpJ0Gspx{EmMS_b3L-Js#j+X=gzULgy z1-Opuxz7ax?#un@hyLi7{uu}3VO-da1Oek^-0&^@`#(Mq67p&J(H)&?>5h!m6CiiU zAh<_P`v{;lw1R%a1S15O3$7GgB^V_bEx0-l#^?xK;{*0Pdk*JwEx>)aANS?{^h1C2 zOaF|6@h~pNhn--&@M}SQpr8N0Z}`jBz9T2di7lI z5Zo@fLvWYi?mW0h$B900uRi;O@9&(?wcG>Xe%yD0fPUzYe(9faFdoJ=P=JkKyzr|p zANcA6o|ot5`HKsR3jTj-A$m|`zLX$JP*D&o06)I+-d=xq7eMz51(yoY#pvqm1<2{dVg{s}YxO&s6*$sQm`KCzi(=Z_G8k79!V<_3?$>+n1} zFj`PmP(x5#fZar1z?U!Ghw1N;0_-)q_!hzKK|#S2gF~XHgqKNrBB|cRZ&YhMH7B~+ z$G;a!TVV>NuQEk5RvA~)3gfD|!UUzQG=(x&8&~FPQ>f7zQ>d|kqaW~lkgg4?qib~? z*9T|mnl$}gd!r~^$$|? zJI`H303NI^KsNpx8@!Fa$L?8~$0pViWC$7y+6cM|ti1cv9lL!;NND-Vq0ud#t(-pg zqqvrHHkPWt^nfcxw5lZ#je_fcWlFSJZ%UuH(L@jZLA4P(wO;LalQ2np;Xc0Kq&{=l zq&_R)=m)hP+iz-4+HK-){Y~q+cbMoQTU9H#(UfSt-UK)N%F9o+y?jxo@v?)J8b9}S zT)pc)DqbdIM&aPl`x&2raR%Z8>;linbMm}Acaor*!0H0<1D^hybb+tF$L_)N@P4YG zzM!R`li+*-_7l0W@_wT}gU>rdLMu-Vt=x4^O1r1N3ah{Dup`?^%Z&?JZ?@Ky?zzcS zz2+B_FlCQP6Md;WZKV38hVymQT5F)8>VE61ZahEWcYAJqUDr_cOwb1#)s6YC3#*n<+gw_3cSB<8VmPE&Onhk$4-n?;JKEQ5WBH;P(6M5bi0-nFN z!0H0cQ%X_S}a(3Aiu(K|d)^{%PWG|IJhw_M_IoeBhw{P+kDOz}x>-9w@4@qsP!^Wd!Iq^nJ1bJKtPj zWgcH?xL~y4dI9!bdcN}1>h;EbSf$Clt%Xyv-L4urvdybanF}_Xn)m);(q1_1)KNnd z=w4rSd`^v@r8BjCXA1J}2|v&e{nb%ZEN}D zYd#DPE;)(k5!@```FKvAm*++obQClbWC_3zcmiMG4gCFIiw}HleOZmavcT&52KwAu z&{fb+U}gSVea4TzJv6-H6uP4vY-$Tsg$J+JEEMRP~S zedYU1(fVZW13&0I^owIlR5J@d)||M@L|wSW885y_Nb0iOnk{FpE1xvzwb0TrQ+YlC zu_MomuH*T^1Ndkq06*Bpcma5e62Jq<5;FB~ZT{X^J%_&UDZma66CexY z1h^_X5^ruva7X z$kf263G5y#{C>vd|3vpfFR0d-@nz1uK{G9=U9s=+Kp1>D)!&d^25dwGs{Qg^;Kkcz)*48)GXY}0pf{O%~ z39$3X!tE7PhRls_^6s{v+LCwlr{ulHy?dn3wYFFK*4b-G{+y*Lw2oDcc{M?T_7y}g zHx*y79xLG${ieETj@Wy9&6(f@?qwn1{on(Q(;2gPp`O-d#!dL$gtU~u7@sX($j+_W z^4)Evs`Y-6=N91K;unAq@M7%&_`*j5e^mw6FZ{Rafub5CV=EazGX7%shb>>~7%<)&oaPj|=E88MIN&%*=wz#d#I08gC+_ym~(>lga!0r35A zX}+{)jJ~vQp})HbuyMpcR|(L2w+06XPmF8&Ps${SbI9YZG!OJYKmB&dySGv^-7E1lc);N|^&2n!Qd7DF-fJ$t>!?_u zm2?vH=f3EmBptCuT=N&bAf4dw@!M`a-=8Kzaf>TKIxchZf%Nv17Uksb)0RBL6!M~*;_t>XEw8yU@*1^V&7Th4Xt#qYEGpe=u@E2F|a!--Et4*wO zEm_i)=y_lKvEB$Aqu(d4mYnZ5#*%&A7VSaslHM<)y=WS1Pu&Ju8_7FvF46uP3$^Z! z#{X;nkiHNPU=IS)CjiZm>qMPjU;5{!9AiHH*_dC&PY2z`9M(+_<{I?zH|DYR z#tc~K^*`vt`X9c}VLv--S6_FVDx-ceK`G0XXI$>7*zBDj!=vjz310H>gHM30fH!|0 zz#p(a;lCj^gb(3I{CxNmU4_nXA@HUB)%yEJS5VL$P1_EBsbt;7f4XWdHzCTY#p~S} z-r1n$o}T5Hi=mJ z_p#`Q{HDN50qAY%!x7p;!)s+<;5V8__c(IIm;=%~7LJMs+~NnCTfeXRO?&q(*ZO?% z8hhk9>*WIVMa-c6{$j4(uDtR}<(Ze83e6YoY1De~OVS0ziTDJ_3NmB$0JZ>s0H2V! zpo}0)@K5ppeKQ95kufC*7$Z6hzJ-5>384K=g^QKDFR{rj9|hG>{#5z(2*t}ukL-71 zIbWK9d+^suG4@A4dGWhfbjbNed#~K>-D{40Y*=F+sx{^gXnij4*li5foz^Tj@vbq4uKsJ6 z{r`q9&;wyzwSSlHM|(s2Okhg_@c{h;&u#La`;OK>XABp=XH zKA96;vHF9;9Xx<7z#qUT>?j~MOchiYR1lOFV1Li0KWP0u`eqD_g)uQU#@JT?-=f2A ztXehxfqLCvUhk@zV~RIlXA;HpjU^jSzAg_Z$VV;N&JK#1UXxv??fk>Lmx+UC=&tqb z(A1yKC;FT9x0k8>BtPKG7QWBZs{{$Wzh>_>R~!p4IX^@hLfjMhoO`Jh;acZ?Vp}DlIdu z`p#M%Rj$e;;qL~)RRZFs^9Ah$4FoBISOKvXzSp_*2d&M=--{J6mWG1%g5Cng%9wAc zQZ?@WhCOG0MNH3}9C`Xil6i}Bj>rZ6^H9C3V7=spw)q$Bk9(`+z43qWe^Wn(D^Bw@>8nigqq6mR z`p)7VSzsTX>*Z^0&(oPX-)euJvBH1eK2Rrve@ln_j_7dqi~COg#1XLpJ|*&QW40QK z@useE$fP|OwXack`Iq9E)6qAU7w}8559ez?4(>@KM=@rJH@3hA9m`7y55&CK!0@= z#u%>)E*5cD@miA>yJ{@WbtNr#=F-XA+L+$bA3c1z_GI0A)Qg`Nw0~BD_LO!t%YP5B z{AgUz_v}kkNIby1zG&}m6Rzc(p?mPp>P!B1NcM9j`@DY$Jsv9AFX)~p`VHN|`)=@6 z>u3+dx!MDS_NV%IP`p+{&rTkRz8!ps2f$H%?FUrl>Yq)aRQbsXD@>)V`#u#;$(3Cr z7%u29=pwNGV7xv<59o3>{Xz5#dIpo!|H7?!e1KuWL^i_NY9Gy{Jxvd;j0jA>0=~fPLxUw|=s@(4V~0 zD9I#kvvf53n6i)Fnb14j1OI?HwXF80VIM-93t?&ms2pS2XL!1D*loH?%p6P~OLBHVdTfL7BY9lyLfX&BOy(z85 z$hoEJE;&F>uhNy;=X{!bT9eYZ}tcql7|~-di||}_C@rk>8burz5rUVuPlu` zB6gp-f{&yRXpmJbAGQ`e3;B6x+7bd2BOPV<6ro$7u26_=L(YGIvn% za?Ky92CY=R#rxA54w@zWT7U3jeFpE~zrLWB!1@B%=QHgKz*F#61wp(ZU10V8Abq|< zaD8%Go5v$kKHKL?S*iWU=fls8 z5hM%n_t8Jc^nP&hh&!@+&fDOM&35W?>S^A?iSc}%34e?Ci+&>ip2nV^PW&X>e710I z>40B`PgYfXM}E1{WA+LCjbxM1{UW_tsazp(J@JCQ=4>3PhP|XRUU1nIODhE3m#mXMM&ONEKK+a3*6yWZ&24 z%hcbk1U&_V1y>a+Qe=Fi&i8y2RBfpzvd?#tE74wZWuL>!es$@&TUL1UrR)Qkc(K+PNAF`D)%vIY;{v(|%EGFleDyKOUEx z5D#R`)w?*mY2K*j7f0%MnmAuL#}^>KGE_j!Om;~9FhX!$Vn)vyF4gK3RXuera=PAlB>SVKYkATgyR>h1FYh}5&LzI-i##3gy!}J=fBLub`Q;1H znvPc7cbYN(>F6S^!RC?Yh|#{ZpM2>Z2l+{I1IOtA#fa%I9W|wTZZNLu*`|7%*EdC1 zsyRvczea!^zz$=N8whF%e02bE`{^_*``GRRyknaA~&d;1yPPmXuV4ln(O zJ|Ox_4$r0RTRK2v{6OAgAh+LXz01UZ3#;5(Sk7HWtvwQ)=jpP(hTy`uyY? zu=|eeSE^Fu_A0GE`;{C|^d&zyxm~Aj$4Bp5`V(i9>)M*9Yni`?2LA;8p(8Q=EqXV~ zA;}tTfockf&HpL-g9m&8<_uQICefHTBsXqx$kB83s{0QRx3_(jlFTurv(P4wH%s5rc;^gu@1LMQeUg{&uYIDK6QuFp2JnA2W&A|iBo|EM{hR+3Kicuzah<39)IRCSuXlUr27Gfu;M1uc(VQ`Pb>`O6JIz`d z8eZ;J(d7yOx)~jfu1*$I6+lPmd9n>%5iUS?kWZ*1K&NyU;AdQw+Mv($5@|~ghBR9v zztsCaMgMru(%v4alcZLT_HMTFtg`?AguZp~tQfH2$Xw?=MvUivy;Fqw0e-XeIM+uz zt_CCBPVEErhSUt;J6RmsBf2(q<{=Z@c&&27i}qGeYBE`L87)9J_YkxYqzRxOejxNb zSsPG7=h}QvfM47Eq+FWO)f@YcCANA8bT>IL9| zike?R2Q=<{?*}0vC9W53hUL)-dO^2SwE_NqpKr`JQ1`o{T8*@cF-_+0D55%rv=@$g zYqdpR|1tXiOUy20&M%U<eBeJxf1aK9wV;FE*ZZkxyf2t_PWj>2){r`}faZzo zx0^7pP@y7Mi$=aS0NafXz?Pqk4Y0bO*pV2LShBsq@%s`|8s8h+ZA1 z?f6~qhm`-v8Yh3>&mX7cTjFp3-P!jdqT!<5QBmb@60Lk~z^TLm{<@#K0_K&v3WzO7 zHtBlT8Q-0VsXI|33p38T9*e!e)@|eW_fU|B+fAbwYKs=yO z*DT-QG08)``j1@L+2#Xh9#Fb=vEH{t`={t{brH0GSaYVd+0se){J!(RzIgThY;8dF zMVp;Ue4 z?$DR+yG*q>vUxP}F&F8bf7oVp^x5J8OaBk`em2@Q z=h**qYF(v=@(Pk1DMl&>mQgJ6`{S z=yjQ(zkr+_J{-OrJ{|InkLTa4?JuhzVg=-nZO&(K(U6kYWc7G;m8+U`|A=kQx_p1% zkFmnH7cMmByS%*Wue((DzQ*G`4sWf{zr3{gPMz4KApY zEF;|DlRN7^N)?|CzC-u+y~f9QKV{}ew+wI2(;{I^}P(5)-Hw8v)R_fach z?I!#{{A6{k?~z;pb>q<&ZBf1Oa?_yK+?Ar8oeyBHwy}UXo_U-oK_DN%*Y*=H*tied ze@T^^9qx~+KYxcSd4;KQ-)?75B!An_7+D+ro#=X0y!^82TDsjNx=EIuwK2+VaK!hn zdO@z~bGzQ_t~%E*#2@&){_QEv5jRo2E;&N@0GT;c{y8;X)a1^|s{@+w?AgozKy!!g z@SJ=O__+P`Zu8k1?-RoTpDGXa(AVDgAit$r)LGvv{*$ewUZVHMUfSb31>^zoi(>=s z+U2Yp2y3u-Pk5;+H;Qh=>*NBP3y1@&3G$l{!X{uFuo2h_YzFfPm$X>p)N99b_;{a!xM(!B_sX zPQvoSwqNBt$S+D6D*G&YQ8#xcc)(d7s(1r^M7vk-vOgR7U&ac*6Wj328N;OmHHZ6K zo_@5?$?<^X=4a_aV2|{sZCj-qW^dA3(zm?xL4V-^(H|Q?9zLYW8dErJxhJ*h$frd& zUmt+^JLd7q3j*Z;Bu^D)c*8xsN-D{)bz#LD#?lV6X z?M4Xj-SOf5bHUKtw*|`kbkqq0%2Y@km)>RG8dtS!Q+3RCrv|~kH`(d{bkij1Gmi=? zMw3g?{HlHT@QG;T&{FiYF&TW2e4*P+nd>pTeB@-G{DWEZwLXYkf!1YGNBwu!=%AZ! zRSf{`3CZM{$p7;!j(x}0>Hg$%UXmT$s$8yZi=@}b&-6I^Rp9>>LLbU5I3RrpA37jD z50=g7d5ha@QeBWl%c)hSj_NP;mv6wj%1T$VULeQRZ2$hIB1MW^3H=1n(ccFo*7I%9 zpIQ;}1mp{-@5c8ZR5_u;-F3Qr@-x0g&3ktJMfbx4jA!K^^53PeGe&6q(s%xHegM}uj?}?Xo_w87U-0PI=^m#R6~4;vz27H2ZtOcY zO>}FjabsJyZ1;{jH`kbF^&Gvl7BHrt))rzDWFN5&tQST{*yp#;!go$iSh!$clRx%I zf5=9(dr$eYm;HDEA3*evzv~a}F}2*3Z?R-|a(eUIL_cCT=mkKC?CVhb60fcSmw{|ep!-@pyENBw#Z-?|`^VZmmmxu|g9;H^Ja09dDSaoS&y; zhi|kG?!mv%pBxT39@=90^5j+FTYp@g?%%{};H-?+&kfXE!Itg+;RF1``(JjO3VkI{ z(znQP3E}xfz5#TD{ufVD4VY}!d&@k|m`}DIf$JUL1--3))1~v?&-R!-s^NEp4!9zbwwUzP zCv&uN5HI^bd9K@R%=4u@!u7UaJ?8EgJSI{8BmM(&R?s~i`b+;0yxU_AXs-2h@h!AD z(YTMrankY7pPKP|l)F199-^)JUTb?rgSwLUV96|UaJn@29Y1}Qm0o>MxiYx_?$v?U z3bAKixc1d4oV4s{lU~m)gnoH+gr3kfzZ^iQe)G@$5IYWuYccB!YWtnM&pgj@^Zmqq z$&&vM@lS+ZkGUG*LNnf`43MEuL16Fg?gdI$B+e@Emb;WJkoAi0zu#kqlWfu(<+ z+dXE#{K_@oYyGKw_7mx4>+qVUxe@~q-q;%%X zs|#t5bL#wv`+f6%mj3Tc7NNg0k8+mj4_=Sy-@Lf`qI`CR-Ir#6; ziF=<(+S_|EhBU>8Kgy^4O}M^Db12kQ9`ga@50D3}bmh-RdHURl%(-7eKf#IUPwqEN zKyIj-fLswdBWitzG(7LUb;N$`*#v+2=KY{Q^LX#7jv`lMx|(?u;nj}$Y#*67cl3d5 zdC4x`+zM-pY}>liyq zJL{mI068v5{tKf2(0aW-*~+_6;_g)JryPSX{ppwainp|{mRookJN?|!-|`oE0CY3) z7jua77XPQV7n;2y|Gv>x9uq2h;h#GBf6=Wa>%bICU<0DH7871VhMl-fbgy%%@{+RW zcAWtAf;TBYRl0}wIkE9)OWy6X*&}1-^AzQ(XslZ$?{cg@5c(?z$9}`ETFczEyDs?d zOwhk}m(PE8C9l-p=DWS}Z}~0nhz@#fv-}d#pMCP6fgSU?JVFQjH{=ms=zJr4J-`QE zd|?~Ny%I|kD^hz{S8J}QwPgJl^KxfOc!>Va z745-e3Gps`dG(`SAK=X&WQ%3<$p>2bM?T{<7wk&Oao6auV9ROJA3p(o;n@GAj*E7< zQbm8w`#AdFhyM5;tXZEUJ7|R8JD&H_-`CcjOCF#vXyW)`;zQ`v`?g$X4${j7URi%a zK4M+v4(iHhbL@qFjFGQUUimnDtW}#FvODqItI{3k>mJw-ayvZRxum3^4( z{+~-1v1b|cgvaPF`y8)*)3vv(yIR|YTThbyI?eG11N#4o?LXh?N?m1m_d+20BmYkP zCmcSYSe*EevD$I}6Gwc0hYw^k$wgM^qg>BJZu8*^@7iOiyFoDvxtc!}|IubE2l$!d zKpJs8Yl6CsS8b~FE;@1 z>xA*Y1Jd6s|2F=!@qesn3Z4DqKi~XMihk#O@;`%9Ixqgkm9oktO#G|-(=RpMwwCiX zF+%hg=lS?PL|1%E<8~CuoquP_!)l52!bqVtS9J=e;g6@4Te}n$) zL%fxFV$r|XM}G9j{_7nyuH+nd_4W(5KtBO=JemBT&HqFHWBLE|Zl7;s52|?87XzH5upZOr@ zUq!(DAGLp71Q#~%yI=$R5))VW$N$JbHD5y)fj#A=l#3%z;mpnc!+1mHo!o$Qc>C*f zkL|&E@UUX{#}os|rr)G>Kg4!BcWFPGr`+NNuQK>T_AK!t=?mo*&;#dsjaq&@0R5Xe zbAj4NM|lhOFY?v@#Q)W9`qcy_E_G*}H~(wVZ%`f`p(k{OzR=l!{*S*)3n~kkCu|_- zBp4Xq`pwm@>N%#W_8nl3iI~H&H+gXY@kbBoA=+0Pm48+&j?Mh1<%W3xV1#nDR_51k z_Lyc@Ykbn9*aBia^0(`^Xx>CNtB&G3JI~16(lw7spK-2iM}9Opm)}Ew>O`msS+m=_ zj~@Eh+JER@RqL{XYA(%@meW9~I{iz2iC7}K%K~PWN)c=&L_tMfJ zy~C=a@`_oSU+~TU(l7Z3=A+nCbA$3?&Rm>u_D}fAPVNSuUp5FiftJvh{idiRV81Qs zNj?}qby{9dkNiFKhi}8Ax2OlAaoxu&jZ>@P*tI;L;9Sz&_QkV7|6bY`n?)1ZvH|QB zMUAMHN9=R-rCXi+e`Ni+P@?@WW$v;xdzh3bOeu=ZEoA7_G=#PKz%njznXLXb#XCGnPcJ9{vG;%C` z@8~7j1t)JSnSM#Op7!hqUO5NX#Cyb91C-Zy>TZwTE4$z^$^fLOnOyBR6|Ia>}+UeELL__K~p<||?pfv!#^}p41Zn~hQ z;JogGraVjjKfK#U)tUdb_LIKx0bcsvm_KAk$*+OyvrT{SVdsRAS?Fcg^FY&G`xMiQ z4>FYFvoVRy(K~*D<_D2`+JxssfBkL8?C^*FhJJ%Ix0Lg(bDGu*d$ezez88;h55{mN zXnjEX*%Y?pp<2~MfL86lqdfDOZ|sKfAQdr%cYj&OIrHyUM;;x)3;LdS#dN;W%ZJ49^yBM~IP{l}`eL1z{zLB9xqdc_ z@jG=|+LsC3->;fxY6WOdzUwye@(-Q;LeG&+fF~LEowK}Sp1Hv*`?e0Kp5|s#pF5&= z=&jPbWO5GIZh6;q(XpF=Sl)N;-#_-(&rTx;U}HdH1t$imRd>M6Rahf7d>qZ~bR}20a~! z51st5bbPkf9n!jphaB4=KJn#Au65St;!CRLl=wE2) z{tWH$t)EnmjW&7hf7Xkz4hY{b;ekD-P@NSfs(H@dw8j_REE?j&Hx$^~zd*jfes-FT z0V?UQL;*FU?Mqc`ctw1hch|D#T&!XX=N)E#F#tXw@7dcTzw|5Nl=(R7{(WWcbnyWV zoE)rZfV?$RZ8W)Aw-*f#F8B|6bRRD|N#6030@0l@FeYp`dSuOJ@8xy%E+?Ds2{cZ4 zz~LG3H96rg)_Xfg*RXaVN_oXX*o(8s1L(YH&Hujjg?G&3rEiJ-ocUkjztMc}yCbO8 ziEg%VOGwEw14X}ff)n|EI>l+$2Q06@SSyerXk9YA+<^41uYTgHnXP@^wrb7UUwuI6 zPaHT?^CtVXpsV}M(gB)($&UtsaP0dX*8z^6mY;@hPPAis8ijfx)qN|8F!(V$9%`&{~6zbT3zx&@dLba2>oeKO816|H{ref zbdLZ1PW5l{D)9rgMn=BKL5-O`6sWzkI+)x~)IhBRPRj9QbbE8LXou~`hr^e{r^EJ# z3;b=rzH*xN0sQBIx;N`J?RoYc4b!_T)3w&nzXp&o;D-#;m}s*UYZa1xwf^?WJgY-9 z;TSuI|BVeHerJx38d_?!{M&oVJN6W>IW_l^zmxID9Qy0N?Dxrh{+>VezKwp~eor(` ztIzNi(fPxaTiB#^9JE;d5<^MbV)z>>NcPmGUo;^=F7fXNY z{_q7u+pIG|wX!|+yFB!aC`#VXKku8L?ROYJ|6v2L5#)(%9;jnxi)-!)%UZg>koF!; zd0alA;!ewV_6YquDgI>NqCFa8PsOR^&!A0yc;I`$$;a#dBbywsjWuAYX z=+{Aj4ab(}m-o?6$2DvK`2m{;AZ~13F(!RT?Jn=Hp$?e$5!BN>iGLmtJA@6mb)^>< zTO?b&i`9{1(G>hr!(fk&ZinWw69Dx$#Bei}lV2*oe5BE!&zFj_b%Bp4w?vHK*aV$N zzrNR>%4df+b&qMPzopGke1q+`wLgtM)_#D_`(jp@ToQu`?)N|f4Q}5oC%;E!5cje$jG&mJJa;`&vje&Ja z)PB9bShfG?kJGr9y$0Fj9{4>!OQ+EA4bWYz^>uh$&r9E@!w2}k)HH9@{r2m=S1#6j zi(XdDFI;L20W@t;h79ZfuVF_Xq3%@3dmS52uNU%vbZ?ou{>?8-4(mXpV*V;J_oc@xIKr zl-F3RqgT^;Ycw)1lN}Mw@xlLY?#-dU@>9H1lsXUQ0ER+W&LjDedTXbcS+pGy04^%_v^i?UmEt|&S=nMtmxHI zU~~TY&H3n*fDIc!E|@srSS~OozTS`&=@$0?siJq(VFUbWZ~w*))YkYeS>%1+qQ%8A zfj;(yci)G{zBXpyLhn1ix8>;o)=XmW;C-I|RP}Rybad!1d&4^b4k%wmedn2=Km9RA ze2a>zH+om=foww;P)m6CY>z45$7>TEzesUqe&e*?b5Hc$&C-9g8S?+*UsBvB9OLsf zRNPl-r1pW--XGOFEZQQP*_%Poz$S^&%+(>H#`;8vNpGuK1;% zh+dma)@$0cUj18|`ya6b%uSJ>zF>j3Mu_(!TexSnm*yGL7rZB#dPdu_#SgVF5iTW9 z#s7w0wm9@XI`o$ucG8+c-Y1UTMkamF`8%JT`=jeM?l}v+GHaiUBYEjbFKK@ht!Kj) z;s=q7$gfZAO0;6t4O>0OYCd>(priYhi_6fu!0=Ae{dxyO_rXuSC_4G-{%ZQ$>i+!V zKArNH<~tu)Q@=X%K~36Ueq+fxi*^=mx<-2dY5%tZ=np?IM#~3rbG+|>VEr<{`>x>Q zixz4zxp*P2u$AM`IIOjufo|>3(v%r_%EA0}FRc?(}Yst5%Mu=9GQjT%c&|FZ=#~!w19* z7T^ia!9K7jJTmcNj(%4j4jT#mq0`CG^Hk4q=&!i+yj#8g`lakEq5e+wJ|{Zg=|_G> z%Q2o~Jn*b?_QUkd3zReX{fI+S$I*FbsmED6L7fWwQseK`lOMs_qD_h^XLttCZ^7Vj-0w-Vs@lfxs9!DNXjgdm zji#P*fhW=d{=7iU!hFHw>%GtaqvnizjThY&lc5i>cV~vNjE+$T=A|t=x^T{ z%sfoSt9qW!-V%>~^v zdwh`Xs7a^bPf7)D+RCh!@H{FWHqHtSMX0o({tm(>CrHTQhx7WRvV&LAA9X zoOA&B#}mE(fpL?wn6=SCfod;|30AB`>~*ea4?UgQ4%wNRs`;U{lg)+y&J?W!-G^8J zpDsvo!TjYOb68zpu6evz$u)Gf0FK}X3;uNHZ^!Nn-_E|zT9;Y3$46h5uabPBsCFi0 z-!g%X1^wp)+Sl%}U^#mZlXpS~ICBshyE8_{=>t3;IRSD*&U@A+2Gp@JmxgQv!r9sS z4q8(WWZ${i_PVoAf1U*%fd1?WLgO9u)g|lD+80+R`i$LYzt3>xVO^D$na&qIGrMTf z639OF8rJSJhj+Sm-_qV5i3RZ?ef@xD9eZ7MO_B7KZfZm0Cj4d^f2!xm=UJdX>y$c5 zZ!vGr-v7+M2CBI@TXeTHAlBo31LXZ_=ZgOHkL_VU%+FTK{}&sy6+W>4;O9hi=XY|h zy!WHpjXO<{a`BP%mhElP_3Gj&7Ja9w@ZwrT&@-(YPx zd(Wmmci35foFy6ee-=ysR?1r*k?gbPB5si6U;6)C`Fsxj@y9hMN8haVqIDd1_U*qf zPZMhlpPcLX`{Qy%OWAmTeC78y^}Q)G4rsr3?e$wF+q4_>;)`KnQN;ViW=R5@>kZZC z)A9LrS-@sv0ep&B0eYrUXk`3(8NC*)CjKm?_Y)J3IPpLLJwVK#DEq%`hhiP^0PF0i zsXFKMS4>Xsm$`o$d4RL+|M}7%`_tqquMK$qJFic4GB$vDp0rtqRiCc+K*#2oCjCEH zTrED0cptrw&quBg9gVI=XP?Q2AAmj~o*=FuuZ+HF-mqn_VOno~C@58H1g`ke`yR*u zc|mjl@Bg_W+lzPh#v?8!=0BJIAM?@7OaHOYI}Utu)+_na=xlz*4H1 zK$}h%&U}hBVxeuz`oY-`pVzDxPN#PPvOGI^U*mwRCSB>SKDx-dukD~ez#kc;E18A8R-m z!PsTqyiY;?KX#wJcbIdj-1O5;X$^W06~3|g;2r!kPk$!;eci6WX5#^BM0|aLW=*=? zKhYJhwIU7Im|BnS^ZEk$=mGYyW#7>K5`_Z?H7}xC%94^zm*%|AMn1-&zj&H6 zOy&aaT&4BbiU(;^wdZ%b_U9m1a;E2GoV>4MKi>6&-C6yI_)c-iciPX7ca8krx*~r$ z_y61JU;5|b`_!r0Z2A7=eC=H5F1=brL@Q6+e^HHf1C2p-|qGHnRVIOodaU5 zbLbE4k$dHL6DIF5A;O=lW{#=XcmAT%r7L6encGPe;O`-O z=fdWzn|vEFA@Qco3*e8`&uZAYUrg)ytBF-YR4bA=MLZx~cZ|p72iniXKFoXY_oM5* zb)Qh>9qq}SMh%eSL;Ul<6C=Vu%r7@ot@ba!>OB?0e+TK-PxE;0vMI_%oP}Hz{ZiY* zde|(jW3cjuiKwe z^YsVGJ&=PSH`JhJ=D?xRO+VW}ynlX4Z+Fu&%B1C^ELOIp?xG* zZF0Ici_|wYZz+P~XfOVEX#dbYQ=+BhUVH9TXtii#mE`l8+abS)Y{d#}jtAL08*#pF zdrHmvgXD&&H^C=$c%Vw^B_kr6Ec#yWBr#>RFL9>oMe@rJf(zz{*w>u*p3l`g!f1cW zH=LvWy6Rji8Y)ht{`*wtjL`k86II$_e6#vJmB ztlksrt&zf4N1uXoeEJjRjjZ2Ao{znMzE|FleUsob_AOZRhnFWD8=(81DsNfZGY;tP z%r9%MAKzuf6mP6S56eV*Yz{R%f#g18uGSmSrrobyQ zR#I>-eSLLzQjIZ%3T#|xd7wf0)a$QNed0mvSw#15P1^Iy5ia!lxq<8fz5u#_Tv30W zXYKS++3h#9#*lR&yfd0yF0yUy!e9JE(F46-QF-RI-$Mn(80)-s$?zFIWaiS?8fKwY|>c?1gqvx{HRrZ-qav=dped&&^uuMho@*%tOKp?`~Rd z$~0Z{T}1Uu{;$#AGKh@}tscm;1tATS+s?SZZ1ZK?;qOqzG)eMru?3Dj5Ur2lMYOk{ zi4Ty`hSCM>cg?yG8hfC#?z-VfkK@xjYs`dq*5M$3fHTi8dB*lX_o3J4XWblYCzy*y z2DvwSX2WjXRHxh}n_%~eIS~(7-9wy;Z%GS?__)+R*ykdj z?>xK4lA!(iO172G7wxNc$lex}IQ&u}6JHN|kIw(M%e{tpT!RO!9$@S|LoHX4;`J)U z)b3cL?Yw!e+AB?=^pz&^{7upYnm3;BgBu_ETYM2CLo1G>mKd{{xJ~rp-7PzQ_r7Zq z{mvfF%3tlfL{GvnnQ>5V||7em+B z{RoInh$(M;O8W@^p`4P&Lt7$UKScMzuSJjf$N0oTDNh{GJAuB{Uacz}Kfh6*H|IuG zZP-P)BF4kdj}?&H`#0-+4KHA`JiyrTSBY7OThj%N(>l+3ykz}Vx$<*7;ZC0Dpw}k| zkSnx2z>)bQ)|7B0cgj4{QLkt_c;{UXyjO3t^utf00S)(If#z8n>fYp={B19PvyOVu zLe(WG7fF2z?`1`QkdtPwIP?noo%$W>^jWLQ`Vrn6_sbvN0Wc26Lwz@K41C5oeaG*} zz3f2J!~67}o-dWx$@Y|Lx^iE9i>Ds~F9Pyn?2gq44 zPf6aoezVTEj4Ivu^Uca@yNlLeZK{p`Rkdx34gS&W9$)by^zt72b}MA3vIbXXr+qEP8z4LSwE_{@^k}pO3wCpym`EoFDD& z{h=3g@zkh&A$qd@IKQ?_dY*MFFMlUJFME&vppGXX-8FYxPxE)kyz_oe)olf(<{YZt z=B>Aim5gpFJY)#a_t;7BLrxcbfwzC7pRZw^a>*R(@@{@b@E;lVxL z_YKQtI{vbb&Rmjc>Ps{G89u=0a*ijUv%SXu=L+B(D!_=dZF>!bNZfZTUUwaQp zCrGBKgM`jb?jRpt@Tcpk{%z@sY&*5ea;@-r7ut} zNAFDt%UJYNLZ?r&t2BP$kqXt@x7TxG=kbHAk4LNwKFH;RpZ^~k`VHR(-w<7Z-NXJ7 zBh)Ds727PM-QCw_^q9Xeq)zrh*0vX__oZ?q8}uHsUrqWPFCUOEcX&a%*6|t75-%L% z9o^s2FX(phAbak?kJRK=8TE@(n;DcPzh1ffh|KJRsa-x?ST*B@E21ma!OqtaBnV;! zJTEeD{rmq$eXqwWuwf6ZF2L>)BVZHIi4GrBjceGtMx%Si){w7MvDva;UGdo_Nc&KR zcKTL(9&FP)X?E$Iw1=EL8oU5K*ay?G5y&X~V8KUbkI^%~@9Z_uTjxM?*YH-2o}9Y3d^t?SMs z!1~Ac1M($n9cliXMRS?#}9OfH072Y*p}GWKPw4*x3mrW@hP{R^r*C-+}7QolpK ze~})!EdQk<{Q6}5!FR9ueXW--UF{wFa;CiV^n1%n6R#GY934xgIytjtAA^1+A@oIW z6Ys|E56k*ay8fRp+Ygv8%{q~FGy6tjY<)VNFK2R3jphp*wr{B(pIScn>4#e;&d)r( z6bt3C!*3INp zVvM~b>niq-oS{kXO%DX=N6V>f*Tx{XzVhtQ-fDIK`$tv`oqqe7?PpK!d*l3PJ74?e zi_yt%XE#q=n1gn`K6h^4RQ*iPi)TJqIsEalm-fDOsHb1{YMIqrQ`y2M;Ww!GM!6k1 z$U`pj(F1+VdY-);`nK}C48lFU*e|e0CZ>ojV$ApgamQSXJxW5@hO>0?F}7MGgxw(W zv?1cxyyw-_p+4lcApc?; z&X%wfdu?JAyKxT+B3DD$)4Vrj)T2J_Xb&Iw!599>L7vI)Cf3obbv^hIAl__$Apb(x zhci`dMT|n&j&sMm5#^>X?Pw1l`0S;9`!4r3Z$07^+z5g;`vVz`pqPAc3*4UI1~^Etf=PovA{>hl?p(2ix`GLV zX^krp$3Ha;@)6eT#6S_&>|%`?roPsw9^;y7FdgFxIA$+V502Su0jjf66V>HdobEv* zW*7CK{x`TL{HLw*ieL*eWR^NgAxoXbSVq87PmO@3o>I`q4O^a!kc(?!-6{8R#Zh0L zOY(5h=?+fgunUS#_oPG3u+x39h>xA_OSy;Jee4W}448-8nqhaif;JBaOAXfp_xh)} z;Wl4t{cCEkCiYz9AHKi%*!RC?xS4-@@saoNqWJOR&5yrIllZNLu0j3ymxm&3gG-8b z20#*^gC+ks10dMxFbUP>C;83kK;;g&ZZ)V$dBeg2Z3Wc~VkxBZv!#%z<0uqOAPK)B z<(5Jfg%g1aCIa<@6${ieVBBLpKgB&RM(tyh)HK#Z9M6B6p=KwQA`OeWdZ-!HVyqa% T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/Introjucer/Introjucer.jucer b/extras/Introjucer/Introjucer.jucer index 04798859c4..4d25f9b6f0 100644 --- a/extras/Introjucer/Introjucer.jucer +++ b/extras/Introjucer/Introjucer.jucer @@ -68,10 +68,17 @@ file="Source/Code Editor/jucer_SourceCodeEditor.h"/> + + + + + JUCE_USE_FLAC="disabled" JUCE_USE_CDBURNER="disabled" JUCE_USE_CDREADER="disabled" + JUCE_USE_CAMERA="disabled" JUCE_PLUGINHOST_VST="disabled" JUCE_PLUGINHOST_AU="disabled" + JUCE_USE_OGGVORBIS="disabled" JUCE_USE_COREIMAGE_LOADER="disabled"/> + + + + + + + + + + + + diff --git a/extras/Introjucer/JuceLibraryCode/AppConfig.h b/extras/Introjucer/JuceLibraryCode/AppConfig.h index f40ea35f2c..69465eb862 100644 --- a/extras/Introjucer/JuceLibraryCode/AppConfig.h +++ b/extras/Introjucer/JuceLibraryCode/AppConfig.h @@ -3,39 +3,35 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h + Any commented-out settings will assume their default values. */ +//============================================================================== +// juce_core flags: + //#define JUCE_FORCE_DEBUG //#define JUCE_LOG_ASSERTIONS -#define JUCE_ASIO 0 -#define JUCE_WASAPI 0 -#define JUCE_DIRECTSOUND 0 -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION -#define JUCE_ALSA 0 -#define JUCE_QUICKTIME 0 -#define JUCE_OPENGL 0 -//#define JUCE_DIRECT2D -#define JUCE_USE_FLAC 0 -#define JUCE_USE_OGGVORBIS 0 -#define JUCE_USE_CDBURNER 0 -#define JUCE_USE_CDREADER 0 -#define JUCE_USE_CAMERA 0 +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +#define JUCE_USE_COREIMAGE_LOADER 0 + +//============================================================================== +// juce_gui_basics flags: + //#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA //#define JUCE_USE_XSHM //#define JUCE_USE_XRENDER //#define JUCE_USE_XCURSOR -#define JUCE_PLUGINHOST_VST 0 -#define JUCE_PLUGINHOST_AU 0 -//#define JUCE_ONLY_BUILD_CORE_LIBRARY + +//============================================================================== +// juce_gui_extra flags: + //#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS diff --git a/extras/Introjucer/JuceLibraryCode/BinaryData.cpp b/extras/Introjucer/JuceLibraryCode/BinaryData.cpp index 733c4c6032..d0307aabf7 100644 --- a/extras/Introjucer/JuceLibraryCode/BinaryData.cpp +++ b/extras/Introjucer/JuceLibraryCode/BinaryData.cpp @@ -304,7 +304,7 @@ static const unsigned char temp_6eda5614[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated by the Introjucer!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" @@ -344,7 +344,7 @@ static const unsigned char temp_67353d19[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated by the Introjucer!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" @@ -667,7 +667,7 @@ static const unsigned char temp_292512d9[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated by the Introjucer!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" diff --git a/extras/Introjucer/JuceLibraryCode/BinaryData.h b/extras/Introjucer/JuceLibraryCode/BinaryData.h index c6d94d1f68..db8d2b1cb2 100644 --- a/extras/Introjucer/JuceLibraryCode/BinaryData.h +++ b/extras/Introjucer/JuceLibraryCode/BinaryData.h @@ -14,10 +14,10 @@ namespace BinaryData const int brushed_aluminium_pngSize = 14724; extern const char* jucer_AudioPluginEditorTemplate_cpp; - const int jucer_AudioPluginEditorTemplate_cppSize = 1003; + const int jucer_AudioPluginEditorTemplate_cppSize = 1008; extern const char* jucer_AudioPluginEditorTemplate_h; - const int jucer_AudioPluginEditorTemplate_hSize = 794; + const int jucer_AudioPluginEditorTemplate_hSize = 799; extern const char* jucer_AudioPluginFilterTemplate_cpp; const int jucer_AudioPluginFilterTemplate_cppSize = 4468; @@ -29,7 +29,7 @@ namespace BinaryData const int jucer_MainConsoleAppTemplate_cppSize = 483; extern const char* jucer_MainTemplate_cpp; - const int jucer_MainTemplate_cppSize = 1820; + const int jucer_MainTemplate_cppSize = 1825; extern const char* jucer_NewCppFileTemplate_cpp; const int jucer_NewCppFileTemplate_cppSize = 232; diff --git a/extras/Introjucer/JuceLibraryCode/JuceHeader.h b/extras/Introjucer/JuceLibraryCode/JuceHeader.h index cd2f7133c8..5a482d2fdd 100644 --- a/extras/Introjucer/JuceLibraryCode/JuceHeader.h +++ b/extras/Introjucer/JuceLibraryCode/JuceHeader.h @@ -4,8 +4,8 @@ project - if you alter its contents, your changes may be overwritten! This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration options for your app. */ @@ -14,9 +14,22 @@ #define __APPHEADERFILE_M70QFTRRK__ #include "AppConfig.h" -#include "../../../juce_amalgamated.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_cryptography/juce_cryptography.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" #include "BinaryData.h" +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif + namespace ProjectInfo { const char* const projectName = "The Introjucer"; diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.cpp b/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.cpp deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.mm b/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.mm deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode3.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.cpp b/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.cpp deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.mm b/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.mm deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode4.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/ReadMe.txt b/extras/Introjucer/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.cpp new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.mm new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_cryptography_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/Introjucer/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/Introjucer/Source/Application/jucer_Application.h b/extras/Introjucer/Source/Application/jucer_Application.h index 93e8072482..3001cefa54 100644 --- a/extras/Introjucer/Source/Application/jucer_Application.h +++ b/extras/Introjucer/Source/Application/jucer_Application.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_APPLICATION_H_6595C2A8__ -#define __JUCER_APPLICATION_H_6595C2A8__ +#ifndef __JUCER_APPLICATION_JUCEHEADER__ +#define __JUCER_APPLICATION_JUCEHEADER__ #include "../jucer_Headers.h" #include "jucer_MainWindow.h" @@ -504,4 +504,4 @@ private: }; -#endif // __JUCER_APPLICATION_H_6595C2A8__ +#endif // __JUCER_APPLICATION_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Application/jucer_CommandIDs.h b/extras/Introjucer/Source/Application/jucer_CommandIDs.h index 47942af57c..759302ef42 100644 --- a/extras/Introjucer/Source/Application/jucer_CommandIDs.h +++ b/extras/Introjucer/Source/Application/jucer_CommandIDs.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_CommonHeaders.h b/extras/Introjucer/Source/Application/jucer_CommonHeaders.h index 33e002bdbb..30cc37f663 100644 --- a/extras/Introjucer/Source/Application/jucer_CommonHeaders.h +++ b/extras/Introjucer/Source/Application/jucer_CommonHeaders.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_COMMONINCLUDES_H__ -#define __JUCER_COMMONINCLUDES_H__ +#ifndef __JUCER_COMMONHEADERS_JUCEHEADER__ +#define __JUCER_COMMONHEADERS_JUCEHEADER__ #include "../Utility/jucer_StoredSettings.h" @@ -48,4 +48,4 @@ const char* const sourceFileExtensions = "cpp;mm;m;c;cc;cxx"; const char* const headerFileExtensions = "h;hpp;hxx"; const char* const sourceOrHeaderFileExtensions = "cpp;mm;m;c;cc;cxx;h;hpp;hxx"; -#endif \ No newline at end of file +#endif // __JUCER_COMMONHEADERS_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp index 2556144c47..d8ab2b1c67 100644 --- a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp +++ b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h index bfbd036287..b396c663e9 100644 --- a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h +++ b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.cpp b/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.cpp index 847d36db8e..b630217eec 100644 --- a/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.cpp +++ b/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.h b/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.h index d15dc59af3..16c1ef805f 100644 --- a/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.h +++ b/extras/Introjucer/Source/Application/jucer_FilePreviewComponent.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_ITEMPREVIEWCOMPONENT_JUCEHEADER__ -#define __JUCER_ITEMPREVIEWCOMPONENT_JUCEHEADER__ +#ifndef __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__ +#define __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__ //============================================================================== @@ -49,4 +49,4 @@ private: }; -#endif // __JUCER_ITEMPREVIEWCOMPONENT_JUCEHEADER__ +#endif // __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Application/jucer_JuceUpdater.cpp b/extras/Introjucer/Source/Application/jucer_JuceUpdater.cpp index 57b36e194c..b598e39ecd 100644 --- a/extras/Introjucer/Source/Application/jucer_JuceUpdater.cpp +++ b/extras/Introjucer/Source/Application/jucer_JuceUpdater.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -139,7 +139,7 @@ void JuceUpdater::buttonClicked (Button*) if (! xml->hasTagName ("JUCEVERSIONS")) { AlertWindow::showMessageBox (AlertWindow::WarningIcon, "Update Problems...", - "This version of the Jucer may be too old to receive automatic updates!\n\n" + "This version of the Introjucer may be too old to receive automatic updates!\n\n" "Please visit www.rawmaterialsoftware.com and get the latest version manually!"); return; } diff --git a/extras/Introjucer/Source/Application/jucer_JuceUpdater.h b/extras/Introjucer/Source/Application/jucer_JuceUpdater.h index b57083cebb..292ea0e956 100644 --- a/extras/Introjucer/Source/Application/jucer_JuceUpdater.h +++ b/extras/Introjucer/Source/Application/jucer_JuceUpdater.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_JUCEUPDATER_H_81537815__ -#define __JUCER_JUCEUPDATER_H_81537815__ +#ifndef __JUCER_JUCEUPDATER_JUCEHEADER__ +#define __JUCER_JUCEUPDATER_JUCEHEADER__ //============================================================================== @@ -74,4 +74,4 @@ private: }; -#endif // __JUCER_JUCEUPDATER_H_81537815__ +#endif // __JUCER_JUCEUPDATER_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Application/jucer_Main.cpp b/extras/Introjucer/Source/Application/jucer_Main.cpp index 082eb38bd8..c4e8bc6b6f 100644 --- a/extras/Introjucer/Source/Application/jucer_Main.cpp +++ b/extras/Introjucer/Source/Application/jucer_Main.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_MainWindow.cpp b/extras/Introjucer/Source/Application/jucer_MainWindow.cpp index a41d49a191..470cb5f5ff 100644 --- a/extras/Introjucer/Source/Application/jucer_MainWindow.cpp +++ b/extras/Introjucer/Source/Application/jucer_MainWindow.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -56,12 +56,12 @@ MainWindow::MainWindow() { commandManager->registerAllCommandsForTarget (this); - // use a temporary one of these to harvest its commands.. - ProjectContentComponent pcc; - commandManager->registerAllCommandsForTarget (&pcc); - + // use some temporary objects to harvest their commands.. DocumentEditorComponent dec (nullptr); commandManager->registerAllCommandsForTarget (&dec); + + ProjectContentComponent pcc; + commandManager->registerAllCommandsForTarget (&pcc); } commandManager->getKeyMappings()->resetToDefaultMappings(); diff --git a/extras/Introjucer/Source/Application/jucer_MainWindow.h b/extras/Introjucer/Source/Application/jucer_MainWindow.h index f0eb4b4ae4..2d01b0c2ee 100644 --- a/extras/Introjucer/Source/Application/jucer_MainWindow.h +++ b/extras/Introjucer/Source/Application/jucer_MainWindow.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp index 44718051b4..728942ff87 100644 --- a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp +++ b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h index 297b2dbbc0..caf4edb0ff 100644 --- a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h +++ b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp b/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp index 5c7fef48bf..ae75de1247 100644 --- a/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp +++ b/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp @@ -1,7 +1,7 @@ /* ============================================================================== - This file was auto-generated by the Jucer! + This file was auto-generated by the Introjucer! It contains the basic startup code for a Juce application. diff --git a/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.h b/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.h index 45c00f9b03..2553c4554c 100644 --- a/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.h +++ b/extras/Introjucer/Source/BinaryData/jucer_AudioPluginEditorTemplate.h @@ -1,7 +1,7 @@ /* ============================================================================== - This file was auto-generated by the Jucer! + This file was auto-generated by the Introjucer! It contains the basic startup code for a Juce application. diff --git a/extras/Introjucer/Source/BinaryData/jucer_MainTemplate.cpp b/extras/Introjucer/Source/BinaryData/jucer_MainTemplate.cpp index ea271a63dc..f36084b0a9 100644 --- a/extras/Introjucer/Source/BinaryData/jucer_MainTemplate.cpp +++ b/extras/Introjucer/Source/BinaryData/jucer_MainTemplate.cpp @@ -1,7 +1,7 @@ /* ============================================================================== - This file was auto-generated by the Jucer! + This file was auto-generated by the Introjucer! It contains the basic startup code for a Juce application. diff --git a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp index 93e5371f6f..371d7034b3 100644 --- a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp +++ b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h index f643d89315..ed6b82977c 100644 --- a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h +++ b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h b/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h new file mode 100644 index 0000000000..3f01763824 --- /dev/null +++ b/extras/Introjucer/Source/Project/jucer_AudioPluginModule.h @@ -0,0 +1,398 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 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_AUDIOPLUGINMODULE_JUCEHEADER__ +#define __JUCER_AUDIOPLUGINMODULE_JUCEHEADER__ + + +//============================================================================== +namespace +{ + Value shouldBuildVST (const Project& project) { return project.getProjectValue ("buildVST"); } + Value shouldBuildRTAS (const Project& project) { return project.getProjectValue ("buildRTAS"); } + Value shouldBuildAU (const Project& project) { return project.getProjectValue ("buildAU"); } + + Value getPluginName (const Project& project) { return project.getProjectValue ("pluginName"); } + Value getPluginDesc (const Project& project) { return project.getProjectValue ("pluginDesc"); } + Value getPluginManufacturer (const Project& project) { return project.getProjectValue ("pluginManufacturer"); } + Value getPluginManufacturerCode (const Project& project) { return project.getProjectValue ("pluginManufacturerCode"); } + Value getPluginCode (const Project& project) { return project.getProjectValue ("pluginCode"); } + Value getPluginChannelConfigs (const Project& project) { return project.getProjectValue ("pluginChannelConfigs"); } + Value getPluginIsSynth (const Project& project) { return project.getProjectValue ("pluginIsSynth"); } + Value getPluginWantsMidiInput (const Project& project) { return project.getProjectValue ("pluginWantsMidiIn"); } + Value getPluginProducesMidiOut (const Project& project) { return project.getProjectValue ("pluginProducesMidiOut"); } + Value getPluginSilenceInProducesSilenceOut (const Project& project) { return project.getProjectValue ("pluginSilenceInIsSilenceOut"); } + Value getPluginTailLengthSeconds (const Project& project) { return project.getProjectValue ("pluginTailLength"); } + Value getPluginEditorNeedsKeyFocus (const Project& project) { return project.getProjectValue ("pluginEditorRequiresKeys"); } + Value getPluginAUExportPrefix (const Project& project) { return project.getProjectValue ("pluginAUExportPrefix"); } + Value getPluginAUCocoaViewClassName (const Project& project) { return project.getProjectValue ("pluginAUViewClass"); } + Value getPluginRTASCategory (const Project& project) { return project.getProjectValue ("pluginRTASCategory"); } + + int countMaxPluginChannels (const String& configString, bool isInput) + { + StringArray configs; + configs.addTokens (configString, ", {}", String::empty); + configs.trim(); + configs.removeEmptyStrings(); + jassert ((configs.size() & 1) == 0); // looks like a syntax error in the configs? + + int maxVal = 0; + for (int i = (isInput ? 0 : 1); i < configs.size(); i += 2) + maxVal = jmax (maxVal, configs[i].getIntValue()); + + return maxVal; + } + + void writePluginCharacteristicsFile (ProjectSaver& projectSaver) + { + Project& project = projectSaver.getProject(); + + MemoryOutputStream mem; + + mem << "//==============================================================================" << newLine + << "// Audio plugin settings.." << newLine + << newLine + << "#define JucePlugin_Build_VST " << ((bool) shouldBuildVST (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_Build_AU " << ((bool) shouldBuildAU (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_Build_RTAS " << ((bool) shouldBuildRTAS (project).getValue() ? 1 : 0) << newLine + << newLine + << "#define JucePlugin_Name " << getPluginName (project).toString().quoted() << newLine + << "#define JucePlugin_Desc " << getPluginDesc (project).toString().quoted() << newLine + << "#define JucePlugin_Manufacturer " << getPluginManufacturer (project).toString().quoted() << newLine + << "#define JucePlugin_ManufacturerCode '" << getPluginManufacturerCode (project).toString().trim().substring (0, 4) << "'" << newLine + << "#define JucePlugin_PluginCode '" << getPluginCode (project).toString().trim().substring (0, 4) << "'" << newLine + << "#define JucePlugin_MaxNumInputChannels " << countMaxPluginChannels (getPluginChannelConfigs (project).toString(), true) << newLine + << "#define JucePlugin_MaxNumOutputChannels " << countMaxPluginChannels (getPluginChannelConfigs (project).toString(), false) << newLine + << "#define JucePlugin_PreferredChannelConfigurations " << getPluginChannelConfigs (project).toString() << newLine + << "#define JucePlugin_IsSynth " << ((bool) getPluginIsSynth (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_WantsMidiInput " << ((bool) getPluginWantsMidiInput (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_ProducesMidiOutput " << ((bool) getPluginProducesMidiOut (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_SilenceInProducesSilenceOut " << ((bool) getPluginSilenceInProducesSilenceOut (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_TailLengthSeconds " << (double) getPluginTailLengthSeconds (project).getValue() << newLine + << "#define JucePlugin_EditorRequiresKeyboardFocus " << ((bool) getPluginEditorNeedsKeyFocus (project).getValue() ? 1 : 0) << newLine + << "#define JucePlugin_VersionCode " << project.getVersionAsHex() << newLine + << "#define JucePlugin_VersionString " << project.getVersion().toString().quoted() << newLine + << "#define JucePlugin_VSTUniqueID JucePlugin_PluginCode" << newLine + << "#define JucePlugin_VSTCategory " << ((bool) getPluginIsSynth (project).getValue() ? "kPlugCategSynth" : "kPlugCategEffect") << newLine + << "#define JucePlugin_AUMainType " << ((bool) getPluginIsSynth (project).getValue() ? "kAudioUnitType_MusicDevice" : "kAudioUnitType_Effect") << newLine + << "#define JucePlugin_AUSubType JucePlugin_PluginCode" << newLine + << "#define JucePlugin_AUExportPrefix " << getPluginAUExportPrefix (project).toString() << newLine + << "#define JucePlugin_AUExportPrefixQuoted " << getPluginAUExportPrefix (project).toString().quoted() << newLine + << "#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode" << newLine + << "#define JucePlugin_CFBundleIdentifier " << project.getBundleIdentifier().toString() << newLine + << "#define JucePlugin_AUCocoaViewClassName " << getPluginAUCocoaViewClassName (project).toString() << newLine + << "#define JucePlugin_RTASCategory " << ((bool) getPluginIsSynth (project).getValue() ? "ePlugInCategory_SWGenerators" : "ePlugInCategory_None") << newLine + << "#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode" << newLine + << "#define JucePlugin_RTASProductId JucePlugin_PluginCode" << newLine + << newLine; + + projectSaver.setExtraAppConfigFileContent (mem.toString()); + } +} + +//============================================================================== +namespace VSTHelpers +{ + static Value getVSTFolder (const ProjectExporter& exporter) { return exporter.getSetting (Ids::vstFolder); } + + static void addVSTFolderToPath (const ProjectExporter& exporter, StringArray& searchPaths) + { + const String vstFolder (getVSTFolder (exporter).toString()); + + if (vstFolder.isNotEmpty()) + { + RelativePath path (exporter.rebaseFromProjectFolderToBuildTarget (RelativePath (vstFolder, RelativePath::projectFolder))); + + if (exporter.isVisualStudio()) + searchPaths.add (path.toWindowsStyle()); + else if (exporter.isLinux() || exporter.isXcode()) + searchPaths.insert (0, path.toUnixStyle()); + } + } + + static void createVSTPathEditor (const ProjectExporter& exporter, Array & props) + { + props.add (new TextPropertyComponent (getVSTFolder (exporter), "VST Folder", 1024, false)); + props.getLast()->setTooltip ("If you're building a VST, this must be the folder containing the VST SDK. This should be an absolute path."); + } + + static void fixMissingVSTValues (const ProjectExporter& exporter) + { + if (getVSTFolder(exporter).toString().isEmpty()) + getVSTFolder(exporter) = (exporter.isVisualStudio() ? "c:\\SDKs\\vstsdk2.4" + : "~/SDKs/vstsdk2.4"); + } + + static void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) + { + fixMissingVSTValues (exporter); + writePluginCharacteristicsFile (projectSaver); + + exporter.makefileTargetSuffix = ".so"; + + Project::Item group (Project::Item::createGroup (const_cast (exporter).getProject(), + "Juce VST Wrapper", "__jucevstfiles")); + + RelativePath juceWrapperFolder (exporter.getProject().getGeneratedCodeFolder(), + exporter.getTargetFolder(), RelativePath::buildTargetFolder); + + addVSTFolderToPath (exporter, exporter.extraSearchPaths); + + if (exporter.isVisualStudio()) + exporter.extraSearchPaths.add (juceWrapperFolder.toWindowsStyle()); + else if (exporter.isLinux()) + exporter.extraSearchPaths.add (juceWrapperFolder.toUnixStyle()); + } + + static void createPropertyEditors (const ProjectExporter& exporter, Array & props) + { + fixMissingVSTValues (exporter); + createVSTPathEditor (exporter, props); + } +} + +//============================================================================== +namespace RTASHelpers +{ + static Value getRTASFolder (const ProjectExporter& exporter) { return exporter.getSetting (Ids::rtasFolder); } + + static void fixMissingRTASValues (const ProjectExporter& exporter) + { + if (getRTASFolder (exporter).toString().isEmpty()) + { + if (exporter.isVisualStudio()) + getRTASFolder (exporter) = "c:\\SDKs\\PT_80_SDK"; + else + getRTASFolder (exporter) = "~/SDKs/PT_80_SDK"; + } + } + + static void addExtraSearchPaths (ProjectExporter& exporter) + { + RelativePath rtasFolder (getRTASFolder (exporter).toString(), RelativePath::projectFolder); + + if (exporter.isVisualStudio()) + { + RelativePath juceWrapperFolder (exporter.getProject().getGeneratedCodeFolder(), + exporter.getTargetFolder(), RelativePath::buildTargetFolder); + + exporter.extraSearchPaths.add (juceWrapperFolder.toWindowsStyle()); + + const char* p[] = { "AlturaPorts/TDMPlugins/PluginLibrary/EffectClasses", + "AlturaPorts/TDMPlugins/PluginLibrary/ProcessClasses", + "AlturaPorts/TDMPlugins/PluginLibrary/ProcessClasses/Interfaces", + "AlturaPorts/TDMPlugins/PluginLibrary/Utilities", + "AlturaPorts/TDMPlugins/PluginLibrary/RTASP_Adapt", + "AlturaPorts/TDMPlugins/PluginLibrary/CoreClasses", + "AlturaPorts/TDMPlugins/PluginLibrary/Controls", + "AlturaPorts/TDMPlugins/PluginLibrary/Meters", + "AlturaPorts/TDMPlugins/PluginLibrary/ViewClasses", + "AlturaPorts/TDMPlugins/PluginLibrary/DSPClasses", + "AlturaPorts/TDMPlugins/PluginLibrary/Interfaces", + "AlturaPorts/TDMPlugins/common", + "AlturaPorts/TDMPlugins/common/Platform", + "AlturaPorts/TDMPlugins/SignalProcessing/Public", + "AlturaPorts/TDMPlugIns/DSPManager/Interfaces", + "AlturaPorts/SADriver/Interfaces", + "AlturaPorts/DigiPublic/Interfaces", + "AlturaPorts/Fic/Interfaces/DAEClient", + "AlturaPorts/NewFileLibs/Cmn", + "AlturaPorts/NewFileLibs/DOA", + "AlturaPorts/AlturaSource/PPC_H", + "AlturaPorts/AlturaSource/AppSupport", + "AvidCode/AVX2sdk/AVX/avx2/avx2sdk/inc", + "xplat/AVX/avx2/avx2sdk/inc" }; + + for (int i = 0; i < numElementsInArray (p); ++i) + exporter.extraSearchPaths.add (exporter.rebaseFromProjectFolderToBuildTarget (rtasFolder.getChildFile (p[i])).toWindowsStyle()); + } + else if (exporter.isXcode()) + { + exporter.extraSearchPaths.add ("/Developer/Headers/FlatCarbon"); + + const char* p[] = { "AlturaPorts/TDMPlugIns/PlugInLibrary/Controls", + "AlturaPorts/TDMPlugIns/PlugInLibrary/CoreClasses", + "AlturaPorts/TDMPlugIns/PlugInLibrary/DSPClasses", + "AlturaPorts/TDMPlugIns/PlugInLibrary/EffectClasses", + "AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild", + "AlturaPorts/TDMPlugIns/PlugInLibrary/Meters", + "AlturaPorts/TDMPlugIns/PlugInLibrary/ProcessClasses", + "AlturaPorts/TDMPlugIns/PlugInLibrary/ProcessClasses/Interfaces", + "AlturaPorts/TDMPlugIns/PlugInLibrary/RTASP_Adapt", + "AlturaPorts/TDMPlugIns/PlugInLibrary/Utilities", + "AlturaPorts/TDMPlugIns/PlugInLibrary/ViewClasses", + "AlturaPorts/TDMPlugIns/DSPManager/**", + "AlturaPorts/TDMPlugIns/SupplementalPlugInLib/Encryption", + "AlturaPorts/TDMPlugIns/SupplementalPlugInLib/GraphicsExtensions", + "AlturaPorts/TDMPlugIns/common/**", + "AlturaPorts/TDMPlugIns/common/PI_LibInterface", + "AlturaPorts/TDMPlugIns/PACEProtection/**", + "AlturaPorts/TDMPlugIns/SignalProcessing/**", + "AlturaPorts/OMS/Headers", + "AlturaPorts/Fic/Interfaces/**", + "AlturaPorts/Fic/Source/SignalNets", + "AlturaPorts/DSIPublicInterface/PublicHeaders", + "DAEWin/Include", + "AlturaPorts/DigiPublic/Interfaces", + "AlturaPorts/DigiPublic", + "AlturaPorts/NewFileLibs/DOA", + "AlturaPorts/NewFileLibs/Cmn", + "xplat/AVX/avx2/avx2sdk/inc", + "xplat/AVX/avx2/avx2sdk/utils" }; + + for (int i = 0; i < numElementsInArray (p); ++i) + exporter.extraSearchPaths.add (exporter.rebaseFromProjectFolderToBuildTarget (rtasFolder.getChildFile (p[i])).toUnixStyle()); + } + } + + static void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver, const File& moduleFolder) + { + fixMissingRTASValues (exporter); + + exporter.xcodeCanUseDwarf = false; + + exporter.msvcTargetSuffix = ".dpm"; + exporter.msvcNeedsDLLRuntimeLib = true; + + RelativePath rtasFolder (getRTASFolder (exporter).toString(), RelativePath::projectFolder); + exporter.msvcExtraPreprocessorDefs.set ("JucePlugin_WinBag_path", CodeHelpers::addEscapeChars (rtasFolder.getChildFile ("WinBag") + .toWindowsStyle().quoted())); + + String msvcPathToRTASFolder (exporter.getJucePathFromTargetFolder() + .getChildFile ("modules/juce_audio_plugin_client/RTAS") + .toWindowsStyle() + "\\"); + + exporter.msvcExtraLinkerOptions = "/FORCE:multiple"; + exporter.msvcDelayLoadedDLLs = "DAE.dll; DigiExt.dll; DSI.dll; PluginLib.dll; DSPManager.dll"; + exporter.msvcModuleDefinitionFile = msvcPathToRTASFolder + "juce_RTAS_WinExports.def"; + + exporter.msvcPostBuildOutputs = "\"$(TargetPath)\".rsr"; + exporter.msvcPostBuildCommand = "copy /Y \"" + msvcPathToRTASFolder + "juce_RTAS_WinResources.rsr" + + "\" \"$(TargetPath)\".rsr"; + + exporter.xcodeExtraLibrariesDebug.add (rtasFolder.getChildFile ("MacBag/Libs/Debug/libPluginLibrary.a")); + exporter.xcodeExtraLibrariesRelease.add (rtasFolder.getChildFile ("MacBag/Libs/Release/libPluginLibrary.a")); + + writePluginCharacteristicsFile (projectSaver); + + addExtraSearchPaths (exporter); + } + + static void createPropertyEditors (const ProjectExporter& exporter, Array & props) + { + if (exporter.isXcode() || exporter.isVisualStudio()) + { + fixMissingRTASValues (exporter); + + props.add (new TextPropertyComponent (getRTASFolder (exporter), "RTAS Folder", 1024, false)); + props.getLast()->setTooltip ("If you're building an RTAS, this must be the folder containing the RTAS SDK. This should be an absolute path."); + } + } +} + +//============================================================================== +namespace AUHelpers +{ + static void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) + { + writePluginCharacteristicsFile (projectSaver); + + if (exporter.isXcode()) + { + exporter.extraSearchPaths.add ("$(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility"); + exporter.extraSearchPaths.add ("$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility"); + + exporter.xcodeFrameworks.addTokens ("AudioUnit CoreAudioKit", false); + + Project::Item subGroup (projectSaver.getGeneratedCodeGroup().addNewSubGroup ("Juce AU Wrapper", -1)); + subGroup.setID ("__juceappleaufiles"); + + { + #define JUCE_AU_PUBLICUTILITY "${DEVELOPER_DIR}/Extras/CoreAudio/PublicUtility/" + #define JUCE_AU_PUBLIC "${DEVELOPER_DIR}/Extras/CoreAudio/AudioUnits/AUPublic/" + + const char* appleAUFiles[] = { JUCE_AU_PUBLICUTILITY "CADebugMacros.h", + JUCE_AU_PUBLICUTILITY "CAAUParameter.cpp", + JUCE_AU_PUBLICUTILITY "CAAUParameter.h", + JUCE_AU_PUBLICUTILITY "CAAudioChannelLayout.cpp", + JUCE_AU_PUBLICUTILITY "CAAudioChannelLayout.h", + JUCE_AU_PUBLICUTILITY "CAMutex.cpp", + JUCE_AU_PUBLICUTILITY "CAMutex.h", + JUCE_AU_PUBLICUTILITY "CAStreamBasicDescription.cpp", + JUCE_AU_PUBLICUTILITY "CAStreamBasicDescription.h", + JUCE_AU_PUBLICUTILITY "CAVectorUnitTypes.h", + JUCE_AU_PUBLICUTILITY "CAVectorUnit.cpp", + JUCE_AU_PUBLICUTILITY "CAVectorUnit.h", + JUCE_AU_PUBLIC "AUViewBase/AUViewLocalizedStringKeys.h", + JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewDispatch.cpp", + JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewControl.cpp", + JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewControl.h", + JUCE_AU_PUBLIC "AUCarbonViewBase/CarbonEventHandler.cpp", + JUCE_AU_PUBLIC "AUCarbonViewBase/CarbonEventHandler.h", + JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewBase.cpp", + JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewBase.h", + JUCE_AU_PUBLIC "AUBase/AUBase.cpp", + JUCE_AU_PUBLIC "AUBase/AUBase.h", + JUCE_AU_PUBLIC "AUBase/AUDispatch.cpp", + JUCE_AU_PUBLIC "AUBase/AUDispatch.h", + JUCE_AU_PUBLIC "AUBase/AUInputElement.cpp", + JUCE_AU_PUBLIC "AUBase/AUInputElement.h", + JUCE_AU_PUBLIC "AUBase/AUOutputElement.cpp", + JUCE_AU_PUBLIC "AUBase/AUOutputElement.h", + JUCE_AU_PUBLIC "AUBase/AUResources.r", + JUCE_AU_PUBLIC "AUBase/AUScopeElement.cpp", + JUCE_AU_PUBLIC "AUBase/AUScopeElement.h", + JUCE_AU_PUBLIC "AUBase/ComponentBase.cpp", + JUCE_AU_PUBLIC "AUBase/ComponentBase.h", + JUCE_AU_PUBLIC "OtherBases/AUMIDIBase.cpp", + JUCE_AU_PUBLIC "OtherBases/AUMIDIBase.h", + JUCE_AU_PUBLIC "OtherBases/AUMIDIEffectBase.cpp", + JUCE_AU_PUBLIC "OtherBases/AUMIDIEffectBase.h", + JUCE_AU_PUBLIC "OtherBases/AUOutputBase.cpp", + JUCE_AU_PUBLIC "OtherBases/AUOutputBase.h", + JUCE_AU_PUBLIC "OtherBases/MusicDeviceBase.cpp", + JUCE_AU_PUBLIC "OtherBases/MusicDeviceBase.h", + JUCE_AU_PUBLIC "OtherBases/AUEffectBase.cpp", + JUCE_AU_PUBLIC "OtherBases/AUEffectBase.h", + JUCE_AU_PUBLIC "Utility/AUBuffer.cpp", + JUCE_AU_PUBLIC "Utility/AUBuffer.h", + JUCE_AU_PUBLIC "Utility/AUDebugDispatcher.cpp", + JUCE_AU_PUBLIC "Utility/AUDebugDispatcher.h", + JUCE_AU_PUBLIC "Utility/AUInputFormatConverter.h", + JUCE_AU_PUBLIC "Utility/AUSilentTimeout.h", + JUCE_AU_PUBLIC "Utility/AUTimestampGenerator.h", 0 }; + + for (const char** f = appleAUFiles; *f != 0; ++f) + { + const RelativePath file (*f, RelativePath::projectFolder); + subGroup.addRelativeFile (file, -1, file.hasFileExtension ("cpp;mm")); + subGroup.getChild (subGroup.getNumChildren() - 1).getShouldInhibitWarningsValue() = true; + } + } + } + } +} + +#endif // __JUCER_AUDIOPLUGINMODULE_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.cpp b/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.cpp index 0b09ee0004..f483418b15 100644 --- a/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.h b/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.h index 1b4141a14c..d52227b6e4 100644 --- a/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.h +++ b/extras/Introjucer/Source/Project/jucer_GroupInformationComponent.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_JuceLibraryModule.h b/extras/Introjucer/Source/Project/jucer_JuceLibraryModule.h new file mode 100644 index 0000000000..3b04ab5cf3 --- /dev/null +++ b/extras/Introjucer/Source/Project/jucer_JuceLibraryModule.h @@ -0,0 +1,354 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 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_JUCELIBRARYMODULE_JUCEHEADER__ +#define __JUCER_JUCELIBRARYMODULE_JUCEHEADER__ + + +//============================================================================== +class JuceLibraryModule : public LibraryModule +{ +public: + JuceLibraryModule (const File& file) + : moduleInfo (JSON::parse (file)), + moduleFile (file), + moduleFolder (file.getParentDirectory()) + { + jassert (isValid()); + } + + String getID() const { return moduleInfo ["id"].toString(); }; + bool isValid() const { return getID().isNotEmpty(); } + + void writeIncludes (Project& project, OutputStream& out) + { + File header (getInclude()); + + StringArray paths, guards; + createMultipleIncludes (project, getPathToModuleFile (header), + paths, guards); + + ProjectSaver::writeGuardedInclude (out, paths, guards); + } + + void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const + { + Project& project = exporter.getProject(); + + { + Array compiled; + findAndAddCompiledCode (exporter, projectSaver, compiled); + + if (project.shouldShowAllModuleFilesInProject (getID()).getValue()) + addIncludedCode (exporter, compiled); + } + + if (isVSTPluginHost (project)) + VSTHelpers::addVSTFolderToPath (exporter, exporter.extraSearchPaths); + + if (isAUPluginHost (project)) + exporter.xcodeFrameworks.addTokens ("AudioUnit CoreAudioKit", false); + + if (isPluginClient()) + { + if (shouldBuildVST (project).getValue()) VSTHelpers::prepareExporter (exporter, projectSaver); + if (shouldBuildRTAS (project).getValue()) RTASHelpers::prepareExporter (exporter, projectSaver, moduleFolder); + if (shouldBuildAU (project).getValue()) AUHelpers::prepareExporter (exporter, projectSaver); + } + } + + void createPropertyEditors (const ProjectExporter& exporter, Array & props) const + { + if (isVSTPluginHost (exporter.getProject())) + VSTHelpers::createVSTPathEditor (exporter, props); + + if (isPluginClient()) + { + if (shouldBuildVST (exporter.getProject()).getValue()) VSTHelpers::createPropertyEditors (exporter, props); + if (shouldBuildRTAS (exporter.getProject()).getValue()) RTASHelpers::createPropertyEditors (exporter, props); + } + } + + void getConfigFlags (Project& project, OwnedArray& flags) const + { + const File header (getInclude()); + jassert (header.exists()); + + StringArray lines; + header.readLines (lines); + + for (int i = 0; i < lines.size(); ++i) + { + String line (lines[i].trim()); + + if (line.startsWith ("/**") && line.containsIgnoreCase ("Config:")) + { + ScopedPointer config (new Project::ConfigFlag()); + config->sourceModuleID = getID(); + config->symbol = line.fromFirstOccurrenceOf (":", false, false).trim(); + + if (config->symbol.length() > 2) + { + ++i; + + while (! (lines[i].contains ("*/") || lines[i].contains ("@see"))) + { + if (lines[i].trim().isNotEmpty()) + config->description = config->description.trim() + " " + lines[i].trim(); + + ++i; + } + + config->description = config->description.upToFirstOccurrenceOf ("*/", false, false); + config->value.referTo (project.getConfigFlag (config->symbol)); + flags.add (config.release()); + } + } + } + } + + var moduleInfo; + File moduleFile, moduleFolder; + +private: + File getInclude() const + { + return moduleFolder.getChildFile (moduleInfo ["include"]); + } + + String getPathToModuleFile (const File& file) const + { + return file.getRelativePathFrom (moduleFolder.getParentDirectory().getParentDirectory()); + } + + static bool fileTargetMatches (ProjectExporter& exporter, const String& target) + { + if (target == "xcode" && ! exporter.isXcode()) + return false; + + if (target == "msvc" && ! exporter.isVisualStudio()) + return false; + + return true; + } + + struct FileSorter + { + static int compareElements (const File& f1, const File& f2) + { + return f1.getFileName().compareIgnoreCase (f2.getFileName()); + } + }; + + void findWildcardMatches (const String& wildcardPath, Array& result) const + { + String path (wildcardPath.upToLastOccurrenceOf ("/", false, false)); + String wildCard (wildcardPath.fromLastOccurrenceOf ("/", false, false)); + + DirectoryIterator iter (moduleFolder.getChildFile (path), false, wildCard); + + Array tempList; + + while (iter.next()) + tempList.add (iter.getFile()); + + FileSorter sorter; + tempList.sort (sorter); + result.addArray (tempList); + } + + void getAllSourceFiles (Array& result) const + { + const var filesArray (moduleInfo ["browse"]); + const Array* const files = filesArray.getArray(); + + for (int i = 0; i < files->size(); ++i) + findWildcardMatches (files->getReference(i), result); + } + + void addFileWithGroups (Project::Item group, const File& file, const String& path) const + { + const int slash = path.indexOfChar ('/'); + + if (slash >= 0) + { + const String topLevelGroup (path.substring (0, slash)); + const String remainingPath (path.substring (slash + 1)); + + addFileWithGroups (group.getOrCreateSubGroup (topLevelGroup), file, remainingPath); + } + else + { + if (! group.findItemForFile (file).isValid()) + group.addFile (file, -1, false); + } + } + + Project::Item addCompiledFile (const File& compiledFile, ProjectExporter& exporter, ProjectSaver& projectSaver) const + { + if (compiledFile.hasFileExtension ("cpp;cc;cxx;mm;m")) + { + MemoryOutputStream mem; + writeSourceWrapper (mem, exporter.getProject(), + getPathToModuleFile (compiledFile)); + + String wrapperName (compiledFile.getFileNameWithoutExtension()); + wrapperName << "_wrapper" << (exporter.usesMMFiles() ? ".mm" : ".cpp"); + + return projectSaver.saveGeneratedFile (wrapperName, mem); + } + + return projectSaver.addFileToGeneratedGroup (compiledFile); + } + + void findAndAddCompiledCode (ProjectExporter& exporter, ProjectSaver& projectSaver, Array& result) const + { + const var compileArray (moduleInfo ["compile"]); // careful to keep this alive while the array is in use! + const Array* const files = compileArray.getArray(); + + if (files != nullptr) + { + for (int i = 0; i < files->size(); ++i) + { + const var& file = files->getReference(i); + const String filename (file ["file"].toString()); + + if (filename.isNotEmpty() + && fileTargetMatches (exporter, file ["target"].toString())) + { + const File compiledFile (moduleFolder.getChildFile (filename)); + result.add (compiledFile); + + Project::Item item (addCompiledFile (compiledFile, exporter, projectSaver)); + + if (file ["warnings"].toString().equalsIgnoreCase ("disabled")) + item.getShouldInhibitWarningsValue() = true; + + if (file ["stdcall"]) + item.getShouldUseStdCallValue() = true; + } + } + } + } + + void addIncludedCode (ProjectExporter& exporter, const Array& compiled) const + { + Array files; + getAllSourceFiles (files); + + Project::Item sourceGroup (Project::Item::createGroup (exporter.getProject(), getID(), "__mainsourcegroup" + getID())); + + int i; + for (i = 0; i < files.size(); ++i) + addFileWithGroups (sourceGroup, files.getReference(i), + files.getReference(i).getRelativePathFrom (moduleFolder)); + + sourceGroup.addFile (moduleFile, -1, false); + sourceGroup.addFile (getInclude(), -1, false); + + for (i = 0; i < compiled.size(); ++i) + addFileWithGroups (sourceGroup, compiled.getReference(i), + compiled.getReference(i).getRelativePathFrom (moduleFolder)); + + exporter.getModulesGroup().getNode().addChild (sourceGroup.getNode().createCopy(), -1, nullptr); + } + + static void writeSourceWrapper (OutputStream& out, Project& project, const String& pathFromJuceFolder) + { + const String appConfigFileName (project.getAppConfigFilename()); + + ProjectSaver::writeAutoGenWarningComment (out); + + out << " This file pulls in a module's source code, and builds it using the settings" << newLine + << " defined in " << appConfigFileName << "." << newLine + << newLine + << "*/" + << newLine + << newLine + << "#define JUCE_WRAPPED_FILE 1" << newLine + << newLine + << CodeHelpers::createIncludeStatement (appConfigFileName) << newLine; + + writeInclude (project, out, pathFromJuceFolder); + } + + static void createMultipleIncludes (Project& project, const String& pathFromLibraryFolder, + StringArray& paths, StringArray& guards) + { + for (int i = project.getNumExporters(); --i >= 0;) + { + ScopedPointer exporter (project.createExporter (i)); + + if (exporter != nullptr) + { + paths.add (exporter->getIncludePathForFileInJuceFolder (pathFromLibraryFolder, project.getAppIncludeFile())); + guards.add ("defined (" + exporter->getExporterIdentifierMacro() + ")"); + } + } + } + + static void writeInclude (Project& project, OutputStream& out, const String& pathFromJuceFolder) + { + StringArray paths, guards; + createMultipleIncludes (project, pathFromJuceFolder, paths, guards); + + StringArray uniquePaths (paths); + uniquePaths.removeDuplicates (false); + + if (uniquePaths.size() == 1) + { + out << "#include " << paths[0] << newLine; + } + else + { + int i = paths.size(); + for (; --i >= 0;) + { + for (int j = i; --j >= 0;) + { + if (paths[i] == paths[j] && guards[i] == guards[j]) + { + paths.remove (i); + guards.remove (i); + } + } + } + + for (i = 0; i < paths.size(); ++i) + { + out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine + << " #include " << paths[i] << newLine; + } + + out << "#endif" << newLine; + } + } + + bool isPluginClient() const { return getID() == "juce_audio_plugin_client"; } + bool isAUPluginHost (const Project& project) const { return getID() == "juce_audio_processors" && project.isConfigFlagEnabled ("JUCE_PLUGINHOST_AU"); } + bool isVSTPluginHost (const Project& project) const { return getID() == "juce_audio_processors" && project.isConfigFlagEnabled ("JUCE_PLUGINHOST_VST"); } +}; + +#endif // __JUCER_JUCELIBRARYMODULE_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_Module.cpp b/extras/Introjucer/Source/Project/jucer_Module.cpp new file mode 100644 index 0000000000..c0d545aaea --- /dev/null +++ b/extras/Introjucer/Source/Project/jucer_Module.cpp @@ -0,0 +1,157 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 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_Module.h" +#include "jucer_ProjectType.h" +#include "jucer_ProjectExporter.h" +#include "jucer_ProjectSaver.h" +#include "jucer_AudioPluginModule.h" +#include "jucer_JuceLibraryModule.h" + + +//============================================================================== +ModuleList::ModuleList() +{ + rescan(); +} + +ModuleList& ModuleList::getInstance() +{ + static ModuleList list; + return list; +} + +struct ModuleSorter +{ + static int compareElements (const ModuleList::Module* m1, const ModuleList::Module* m2) + { + return m1->uid.compareIgnoreCase (m2->uid); + } +}; + +void ModuleList::rescan() +{ + modules.clear(); + + moduleFolder = StoredSettings::getInstance()->getLastKnownJuceFolder().getChildFile ("modules"); + + DirectoryIterator iter (moduleFolder, false, "*", File::findDirectories); + + while (iter.next()) + { + const File moduleDef (iter.getFile().getChildFile ("juce_module_info")); + + if (moduleDef.exists()) + { + ScopedPointer m (new JuceLibraryModule (moduleDef)); + jassert (m->isValid()); + + if (m->isValid()) + { + Module* info = new Module(); + modules.add (info); + + info->uid = m->getID(); + info->name = m->moduleInfo ["name"]; + info->description = m->moduleInfo ["description"]; + info->file = moduleDef; + } + } + } + + ModuleSorter sorter; + modules.sort (sorter); +} + +LibraryModule* ModuleList::Module::create() const +{ + return new JuceLibraryModule (file); +} + +LibraryModule* ModuleList::loadModule (const String& uid) const +{ + const Module* const m = findModuleInfo (uid); + + return m != nullptr ? m->create() : nullptr; +} + +const ModuleList::Module* ModuleList::findModuleInfo (const String& uid) const +{ + for (int i = modules.size(); --i >= 0;) + if (modules.getUnchecked(i)->uid == uid) + return modules.getUnchecked(i); + + return nullptr; +} + +void ModuleList::getDependencies (const String& moduleID, StringArray& dependencies) const +{ + ScopedPointer lib (loadModule (moduleID)); + JuceLibraryModule* m = dynamic_cast (static_cast (lib)); + + if (m != nullptr) + { + const var depsArray (m->moduleInfo ["dependencies"]); + const Array* const deps = depsArray.getArray(); + + for (int i = 0; i < deps->size(); ++i) + { + const var& d = deps->getReference(i); + + String uid (d ["id"].toString()); + String version (d ["version"].toString()); + + if (! dependencies.contains (uid, true)) + { + dependencies.add (uid); + getDependencies (uid, dependencies); + } + } + } +} + +void ModuleList::createDependencies (const String& moduleID, OwnedArray& modules) const +{ + ScopedPointer lib (loadModule (moduleID)); + JuceLibraryModule* m = dynamic_cast (static_cast (lib)); + + if (m != nullptr) + { + var depsArray (m->moduleInfo ["dependencies"]); + const Array* const deps = depsArray.getArray(); + + for (int i = 0; i < deps->size(); ++i) + { + const var& d = deps->getReference(i); + + String uid (d ["id"].toString()); + String version (d ["version"].toString()); + + //xxx to do - also need to find version conflicts + jassertfalse + + } + } +} diff --git a/extras/Introjucer/Source/Project/jucer_Module.h b/extras/Introjucer/Source/Project/jucer_Module.h new file mode 100644 index 0000000000..1fb40f327b --- /dev/null +++ b/extras/Introjucer/Source/Project/jucer_Module.h @@ -0,0 +1,81 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 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_MODULE_JUCEHEADER__ +#define __JUCER_MODULE_JUCEHEADER__ + +#include "../jucer_Headers.h" +#include "jucer_Project.h" +class ProjectExporter; +class ProjectSaver; + +//============================================================================== +class LibraryModule +{ +public: + LibraryModule() {} + virtual ~LibraryModule() {} + + virtual String getID() const = 0; + virtual void prepareExporter (ProjectExporter&, ProjectSaver&) const = 0; + virtual void writeIncludes (Project&, OutputStream& out) = 0; + virtual void createPropertyEditors (const ProjectExporter&, Array &) const = 0; + virtual void getConfigFlags (Project&, OwnedArray&) const = 0; +}; + +//============================================================================== +class ModuleList +{ +public: + ModuleList(); + + static ModuleList& getInstance(); + + //============================================================================== + void rescan(); + LibraryModule* loadModule (const String& uid) const; + + void getDependencies (const String& moduleID, StringArray& dependencies) const; + void createDependencies (const String& moduleID, OwnedArray& modules) const; + + //============================================================================== + struct Module + { + LibraryModule* create() const; + + String uid, name, description; + File file; + }; + + const Module* findModuleInfo (const String& uid) const; + + OwnedArray modules; + +private: + File moduleFolder; +}; + + +#endif // __JUCER_MODULE_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_NewFileWizard.cpp b/extras/Introjucer/Source/Project/jucer_NewFileWizard.cpp index 2c5e07b24b..20ac37d42a 100644 --- a/extras/Introjucer/Source/Project/jucer_NewFileWizard.cpp +++ b/extras/Introjucer/Source/Project/jucer_NewFileWizard.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -64,7 +64,7 @@ public: { if (fillInNewCppFileTemplate (newFile, parent, "jucer_NewCppFileTemplate_cpp")) { - parent.addFile (newFile, 0); + parent.addFile (newFile, 0, true); return true; } @@ -93,7 +93,7 @@ public: { if (fillInNewCppFileTemplate (newFile, parent, "jucer_NewCppFileTemplate_h")) { - parent.addFile (newFile, 0); + parent.addFile (newFile, 0, true); return true; } diff --git a/extras/Introjucer/Source/Project/jucer_NewFileWizard.h b/extras/Introjucer/Source/Project/jucer_NewFileWizard.h index 99239611c6..f207c8a639 100644 --- a/extras/Introjucer/Source/Project/jucer_NewFileWizard.h +++ b/extras/Introjucer/Source/Project/jucer_NewFileWizard.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_NewProjectWizard.cpp b/extras/Introjucer/Source/Project/jucer_NewProjectWizard.cpp index ffbfe3ce95..8d26883322 100644 --- a/extras/Introjucer/Source/Project/jucer_NewProjectWizard.cpp +++ b/extras/Introjucer/Source/Project/jucer_NewProjectWizard.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -101,8 +101,8 @@ public: if (! FileHelpers::overwriteFileWithNewDataIfDifferent (mainWindowCpp, windowCpp)) failedFiles.add (mainWindowCpp.getFullPathName()); - sourceGroup.addFile (mainWindowCpp, -1); - sourceGroup.addFile (mainWindowH, -1); + sourceGroup.addFile (mainWindowCpp, -1, true); + sourceGroup.addFile (mainWindowH, -1, false); } if (createMainCpp) @@ -122,7 +122,7 @@ public: if (! FileHelpers::overwriteFileWithNewDataIfDifferent (mainCppFile, mainCpp)) failedFiles.add (mainCppFile.getFullPathName()); - sourceGroup.addFile (mainCppFile, -1); + sourceGroup.addFile (mainCppFile, -1, true); } return true; @@ -187,7 +187,7 @@ public: if (! FileHelpers::overwriteFileWithNewDataIfDifferent (mainCppFile, mainCpp)) failedFiles.add (mainCppFile.getFullPathName()); - sourceGroup.addFile (mainCppFile, -1); + sourceGroup.addFile (mainCppFile, -1, true); } return true; @@ -230,6 +230,7 @@ public: File editorHFile = editorCppFile.withFileExtension (".h"); project.getProjectTypeValue() = ProjectType::getAudioPluginTypeName(); + project.addModule ("juce_audio_plugin_client"); Project::Item sourceGroup (project.getMainGroup().addNewSubGroup ("Source", 0)); project.getConfigFlag ("JUCE_QUICKTIME") = Project::configFlagDisabled; // disabled because it interferes with RTAS build on PC @@ -238,7 +239,6 @@ public: project.getConfiguration(i).getTargetBinaryName() = File::createLegalFileName (appTitle); String appHeaders (CodeHelpers::createIncludeStatement (project.getAppIncludeFile(), filterCppFile)); - appHeaders << newLine << CodeHelpers::createIncludeStatement (project.getPluginCharacteristicsFile(), filterCppFile); String filterCpp = project.getFileTemplate ("jucer_AudioPluginFilterTemplate_cpp") .replace ("FILTERHEADERS", CodeHelpers::createIncludeStatement (filterHFile, filterCppFile) @@ -275,10 +275,10 @@ public: if (! FileHelpers::overwriteFileWithNewDataIfDifferent (editorHFile, editorH)) failedFiles.add (editorHFile.getFullPathName()); - sourceGroup.addFile (filterCppFile, -1); - sourceGroup.addFile (filterHFile, -1); - sourceGroup.addFile (editorCppFile, -1); - sourceGroup.addFile (editorHFile, -1); + sourceGroup.addFile (filterCppFile, -1, true); + sourceGroup.addFile (filterHFile, -1, false); + sourceGroup.addFile (editorCppFile, -1, true); + sourceGroup.addFile (editorHFile, -1, false); return true; } @@ -311,13 +311,8 @@ public: //============================================================================== //============================================================================== -NewProjectWizard::NewProjectWizard() -{ -} - -NewProjectWizard::~NewProjectWizard() -{ -} +NewProjectWizard::NewProjectWizard() {} +NewProjectWizard::~NewProjectWizard() {} StringArray NewProjectWizard::getWizards() { @@ -415,7 +410,7 @@ Project* NewProjectWizard::runWizard (Component* ownerWindow_) projectFile = targetFolder.getChildFile (File::createLegalFileName (appTitle)) .withFileExtension (Project::projectFileExtension); - ScopedPointer project (new Project (projectFile)); + ScopedPointer project (new Project (projectFile)); if (failedFiles.size() == 0) { diff --git a/extras/Introjucer/Source/Project/jucer_NewProjectWizard.h b/extras/Introjucer/Source/Project/jucer_NewProjectWizard.h index 53c1097b3c..daabd03858 100644 --- a/extras/Introjucer/Source/Project/jucer_NewProjectWizard.h +++ b/extras/Introjucer/Source/Project/jucer_NewProjectWizard.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_PROJECTWIZARD_JUCEHEADER__ -#define __JUCER_PROJECTWIZARD_JUCEHEADER__ +#ifndef __JUCER_NEWPROJECTWIZARD_JUCEHEADER__ +#define __JUCER_NEWPROJECTWIZARD_JUCEHEADER__ #include "../jucer_Headers.h" #include "jucer_Project.h" @@ -65,4 +65,4 @@ protected: }; -#endif // __JUCER_PROJECTWIZARD_JUCEHEADER__ +#endif // __JUCER_NEWPROJECTWIZARD_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_Project.cpp b/extras/Introjucer/Source/Project/jucer_Project.cpp index fba5d91e84..a1022fa4d6 100644 --- a/extras/Introjucer/Source/Project/jucer_Project.cpp +++ b/extras/Introjucer/Source/Project/jucer_Project.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -42,6 +42,8 @@ namespace Tags const Identifier configuration ("CONFIGURATION"); const Identifier exporters ("EXPORTFORMATS"); const Identifier configGroup ("JUCEOPTIONS"); + const Identifier modulesGroup ("MODULES"); + const Identifier module ("MODULE"); } const char* Project::projectFileExtension = ".jucer"; @@ -111,11 +113,6 @@ void Project::setMissingDefaultValues() if (! projectRoot.hasProperty (Ids::version)) getVersion() = "1.0.0"; - if (! projectRoot.hasProperty (Ids::juceLinkage)) - getJuceLinkageModeValue() = useAmalgamatedJuceViaMultipleTemplates; - - const String juceFolderPath (getRelativePathForFile (StoredSettings::getInstance()->getLastKnownJuceFolder())); - // Create configs group if (! projectRoot.getChildWithName (Tags::configurations).isValid()) { @@ -130,6 +127,28 @@ void Project::setMissingDefaultValues() if (! projectRoot.hasProperty (Ids::bundleIdentifier)) setBundleIdentifierToDefault(); + + if (! projectRoot.getChildWithName (Tags::modulesGroup).isValid()) + { + addModule ("juce_core"); + + if (! isConfigFlagEnabled ("JUCE_ONLY_BUILD_CORE_LIBRARY")) + { + addModule ("juce_events"); + addModule ("juce_graphics"); + addModule ("juce_data_structures"); + addModule ("juce_gui_basics"); + addModule ("juce_gui_extra"); + addModule ("juce_gui_audio"); + addModule ("juce_cryptography"); + addModule ("juce_video"); + addModule ("juce_opengl"); + addModule ("juce_audio_basics"); + addModule ("juce_audio_devices"); + addModule ("juce_audio_formats"); + addModule ("juce_audio_processors"); + } + } } //============================================================================== @@ -157,15 +176,19 @@ const String Project::loadDocument (const File& file) const String Project::saveDocument (const File& file) { updateProjectSettings(); + sanitiseConfigFlags(); { - // (getting these forces the values to be sanitised) - OwnedArray flags; - getAllConfigFlags (flags); - } + ScopedPointer exp (ProjectExporter::createPlatformDefaultExporter (*this)); - if (FileHelpers::isJuceFolder (getLocalJuceFolder())) - StoredSettings::getInstance()->setLastKnownJuceFolder (getLocalJuceFolder().getFullPathName()); + if (exp != nullptr) + { + File f (resolveFilename (exp->getJuceFolder().toString())); + + if (FileHelpers::isJuceFolder (f)) + StoredSettings::getInstance()->setLastKnownJuceFolder (f.getFullPathName()); + } + } StoredSettings::getInstance()->recentFiles.addFile (file); @@ -192,9 +215,6 @@ void Project::valueTreePropertyChanged (ValueTree& tree, const Identifier& prope if (property == Ids::projectType) setMissingDefaultValues(); - if (getProjectType().isLibrary()) - getJuceLinkageModeValue() = notLinkedToJuce; - changed(); } @@ -271,27 +291,6 @@ const ProjectType& Project::getProjectType() const return *type; } -const char* const Project::notLinkedToJuce = "none"; -const char* const Project::useLinkedJuce = "static"; -const char* const Project::useAmalgamatedJuce = "amalg_big"; -const char* const Project::useAmalgamatedJuceViaSingleTemplate = "amalg_template"; -const char* const Project::useAmalgamatedJuceViaMultipleTemplates = "amalg_multi"; - -File Project::getLocalJuceFolder() -{ - ScopedPointer exp (ProjectExporter::createPlatformDefaultExporter (*this)); - - if (exp != nullptr) - { - File f (resolveFilename (exp->getJuceFolder().toString())); - - if (FileHelpers::isJuceFolder (f)) - return f; - } - - return StoredSettings::getInstance()->getLastKnownJuceFolder(); -} - //============================================================================== void Project::createPropertyEditors (Array & props) { @@ -316,11 +315,6 @@ void Project::createPropertyEditors (Array & props) props.add (new ChoicePropertyComponent (getProjectTypeValue(), "Project Type", projectTypeNames, projectTypeCodes)); } - const char* linkageTypes[] = { "Not linked to Juce", "Linked to Juce Static Library", "Include Juce Amalgamated Files", "Include Juce Source Code Directly (In a single file)", "Include Juce Source Code Directly (Split across several files)", 0 }; - const char* linkageTypeValues[] = { notLinkedToJuce, useLinkedJuce, useAmalgamatedJuce, useAmalgamatedJuceViaSingleTemplate, useAmalgamatedJuceViaMultipleTemplates, 0 }; - props.add (new ChoicePropertyComponent (getJuceLinkageModeValue(), "Juce Linkage Method", StringArray (linkageTypes), Array (linkageTypeValues))); - props.getLast()->setTooltip ("The method by which your project will be linked to Juce."); - props.add (new TextPropertyComponent (getBundleIdentifier(), "Bundle Identifier", 256, false)); props.getLast()->setTooltip ("A unique identifier for this product, mainly for use in Mac builds. It should be something like 'com.yourcompanyname.yourproductname'"); @@ -451,9 +445,10 @@ void Project::Item::setID (const String& newID) { node.setProperty (Ids::id_, String Project::Item::getImageFileID() const { return "id:" + getID(); } -Project::Item Project::Item::createGroup (Project& project, const String& name) +Project::Item Project::Item::createGroup (Project& project, const String& name, const String& uid) { Item group (project, ValueTree (Tags::group)); + group.setID (uid); group.initialiseNodeValues(); group.getName() = name; return group; @@ -651,22 +646,56 @@ struct ItemSorter } }; -void Project::Item::sortAlphabetically() +struct ItemSorterWithGroupsAtStart { - ItemSorter sorter; - node.sort (sorter, getUndoManager(), true); + static int compareElements (const ValueTree& first, const ValueTree& second) + { + const bool firstIsGroup = first.hasType (Tags::group); + const bool secondIsGroup = second.hasType (Tags::group); + + if (firstIsGroup == secondIsGroup) + return first [Ids::name].toString().compareIgnoreCase (second [Ids::name].toString()); + else + return firstIsGroup ? -1 : 1; + } +}; + +void Project::Item::sortAlphabetically (bool keepGroupsAtStart) +{ + if (keepGroupsAtStart) + { + ItemSorterWithGroupsAtStart sorter; + node.sort (sorter, getUndoManager(), true); + } + else + { + ItemSorter sorter; + node.sort (sorter, getUndoManager(), true); + } +} + +Project::Item Project::Item::getOrCreateSubGroup (const String& name) +{ + for (int i = node.getNumChildren(); --i >= 0;) + { + const ValueTree child (node.getChild (i)); + if (child.getProperty (Ids::name) == name && child.hasType (Tags::group)) + return Item (getProject(), child); + } + + return addNewSubGroup (name, -1); } Project::Item Project::Item::addNewSubGroup (const String& name, int insertIndex) { - Item group (createGroup (getProject(), name)); + Item group (createGroup (getProject(), name, createGUID (getID() + name + String (getNumChildren())))); jassert (canContain (group)); addChild (group, insertIndex); return group; } -bool Project::Item::addFile (const File& file, int insertIndex) +bool Project::Item::addFile (const File& file, int insertIndex, const bool shouldCompile) { if (file == File::nonexistent || file.isHidden() || file.getFileName().startsWithChar ('.')) return false; @@ -679,10 +708,10 @@ bool Project::Item::addFile (const File& file, int insertIndex) while (iter.next()) { if (! getProject().getMainGroup().findItemForFile (iter.getFile()).isValid()) - group.addFile (iter.getFile(), -1); + group.addFile (iter.getFile(), -1, shouldCompile); } - group.sortAlphabetically(); + group.sortAlphabetically (false); } else if (file.existsAsFile()) { @@ -691,7 +720,7 @@ bool Project::Item::addFile (const File& file, int insertIndex) Item item (getProject(), ValueTree (Tags::file)); item.initialiseNodeValues(); item.getName() = file.getFileName(); - item.getShouldCompileValue() = file.hasFileExtension ("cpp;mm;c;m;cc;cxx"); + item.getShouldCompileValue() = shouldCompile && file.hasFileExtension ("cpp;mm;c;m;cc;cxx;r"); item.getShouldAddToResourceValue() = getProject().shouldBeAddedToBinaryResourcesByDefault (file); if (canContain (item)) @@ -750,19 +779,6 @@ ValueTree Project::getConfigNode() return projectRoot.getOrCreateChildWithName (Tags::configGroup, nullptr); } -void Project::getAllConfigFlags (OwnedArray & flags) -{ - OwnedArray modules; - getProjectType().createRequiredModules (*this, modules); - - int i; - for (i = 0; i < modules.size(); ++i) - modules.getUnchecked(i)->getConfigFlags (*this, flags); - - for (i = 0; i < flags.size(); ++i) - flags.getUnchecked(i)->value.referTo (getConfigFlag (flags.getUnchecked(i)->symbol)); -} - const char* const Project::configFlagDefault = "default"; const char* const Project::configFlagEnabled = "enabled"; const char* const Project::configFlagDisabled = "disabled"; @@ -783,6 +799,65 @@ bool Project::isConfigFlagEnabled (const String& name) const return projectRoot.getChildWithName (Tags::configGroup).getProperty (name) == configFlagEnabled; } +void Project::sanitiseConfigFlags() +{ + ValueTree configNode (getConfigNode()); + + for (int i = configNode.getNumProperties(); --i >= 0;) + { + const var value (configNode [configNode.getPropertyName(i)]); + + if (value != configFlagEnabled && value != configFlagDisabled) + configNode.removeProperty (configNode.getPropertyName(i), getUndoManagerFor (configNode)); + } +} + +//============================================================================== +ValueTree Project::getModulesNode() +{ + return projectRoot.getOrCreateChildWithName (Tags::modulesGroup, nullptr); +} + +bool Project::isModuleEnabled (const String& moduleID) const +{ + ValueTree modules (projectRoot.getChildWithName (Tags::modulesGroup)); + + for (int i = 0; i < modules.getNumChildren(); ++i) + if (modules.getChild(i) [Ids::id_] == moduleID) + return true; + + return false; +} + +Value Project::shouldShowAllModuleFilesInProject (const String& moduleID) +{ + return getModulesNode().getChildWithProperty (Ids::id_, moduleID) + .getPropertyAsValue (Ids::showAllCode, getUndoManagerFor (getModulesNode())); +} + +void Project::addModule (const String& moduleID) +{ + if (! isModuleEnabled (moduleID)) + { + ValueTree module (Tags::module); + module.setProperty (Ids::id_, moduleID, nullptr); + + ValueTree modules (getModulesNode()); + modules.addChild (module, -1, getUndoManagerFor (modules)); + + shouldShowAllModuleFilesInProject (moduleID) = true; + } +} + +void Project::removeModule (const String& moduleID) +{ + ValueTree modules (getModulesNode()); + + for (int i = 0; i < modules.getNumChildren(); ++i) + if (modules.getChild(i) [Ids::id_] == moduleID) + modules.removeChild (i, getUndoManagerFor (modules)); +} + //============================================================================== ValueTree Project::getConfigurations() const { @@ -1001,9 +1076,9 @@ ProjectExporter* Project::createExporter (int index) return ProjectExporter::createExporter (*this, getExporters().getChild (index)); } -void Project::addNewExporter (int exporterIndex) +void Project::addNewExporter (const String& exporterName) { - ScopedPointer exp (ProjectExporter::createNewExporter (*this, exporterIndex)); + ScopedPointer exp (ProjectExporter::createNewExporter (*this, exporterName)); ValueTree exporters (getExporters()); exporters.addChild (exp->getSettings(), -1, getUndoManagerFor (exporters)); @@ -1020,8 +1095,10 @@ void Project::createDefaultExporters() ValueTree exporters (getExporters()); exporters.removeAllChildren (getUndoManagerFor (exporters)); - for (int i = 0; i < ProjectExporter::getNumExporters(); ++i) - addNewExporter (i); + const StringArray exporterNames (ProjectExporter::getDefaultExporters()); + + for (int i = 0; i < exporterNames.size(); ++i) + addNewExporter (exporterNames[i]); } //============================================================================== @@ -1062,7 +1139,7 @@ void Project::resaveJucerFile (const File& file) return; } - std::cout << "The Jucer - Re-saving file: " << file.getFullPathName() << std::endl; + std::cout << "The Introjucer - Re-saving file: " << file.getFullPathName() << std::endl; String error (newDoc.saveDocument (file)); if (error.isNotEmpty()) diff --git a/extras/Introjucer/Source/Project/jucer_Project.h b/extras/Introjucer/Source/Project/jucer_Project.h index c43da6de00..af6a3346e3 100644 --- a/extras/Introjucer/Source/Project/jucer_Project.h +++ b/extras/Introjucer/Source/Project/jucer_Project.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -76,25 +76,9 @@ public: Value getVersion() const { return getProjectValue ("version"); } String getVersionAsHex() const; - Value getBundleIdentifier() const { return getProjectValue ("bundleIdentifier"); } + Value getBundleIdentifier() const { return getProjectValue (Ids::bundleIdentifier); } void setBundleIdentifierToDefault() { getBundleIdentifier() = "com.yourcompany." + CodeHelpers::makeValidIdentifier (getProjectName().toString(), false, true, false); } - //============================================================================== - // linkage modes.. - static const char* const notLinkedToJuce; - static const char* const useLinkedJuce; - static const char* const useAmalgamatedJuce; - static const char* const useAmalgamatedJuceViaSingleTemplate; - static const char* const useAmalgamatedJuceViaMultipleTemplates; - - Value getJuceLinkageModeValue() const { return getProjectValue ("juceLinkage"); } - String getJuceLinkageMode() const { return getJuceLinkageModeValue().toString(); } - - bool isUsingWrapperFiles() const { return isUsingFullyAmalgamatedFile() || isUsingSingleTemplateFile() || isUsingMultipleTemplateFiles(); } - bool isUsingFullyAmalgamatedFile() const { return getJuceLinkageMode() == useAmalgamatedJuce; } - bool isUsingSingleTemplateFile() const { return getJuceLinkageMode() == useAmalgamatedJuceViaSingleTemplate; } - bool isUsingMultipleTemplateFiles() const { return getJuceLinkageMode() == useAmalgamatedJuceViaMultipleTemplates; } - //============================================================================== Value getProjectValue (const Identifier& name) const { return projectRoot.getPropertyAsValue (name, getUndoManagerFor (projectRoot)); } @@ -109,8 +93,6 @@ public: //============================================================================== File getAppIncludeFile() const { return getGeneratedCodeFolder().getChildFile (getJuceSourceHFilename()); } File getGeneratedCodeFolder() const { return getFile().getSiblingFile ("JuceLibraryCode"); } - File getPluginCharacteristicsFile() const { return getGeneratedCodeFolder().getChildFile (getPluginCharacteristicsFilename()); } - File getLocalJuceFolder(); //============================================================================== String getAmalgamatedHeaderFileName() const { return "juce_amalgamated.h"; } @@ -121,8 +103,6 @@ public: String getJuceSourceFilenameRoot() const { return "JuceLibraryCode"; } int getNumSeparateAmalgamatedFiles() const { return 4; } String getJuceSourceHFilename() const { return "JuceHeader.h"; } - String getJuceCodeGroupName() const { return "Juce Library Code"; } - String getPluginCharacteristicsFilename() const { return "JucePluginCharacteristics.h"; } //============================================================================== class Item @@ -134,7 +114,7 @@ public: Item& operator= (const Item& other); ~Item(); - static Item createGroup (Project& project, const String& name); + static Item createGroup (Project& project, const String& name, const String& uid); void initialiseNodeValues(); //============================================================================== @@ -179,11 +159,12 @@ public: Item getChild (int index) const { return Item (getProject(), node.getChild (index)); } Item addNewSubGroup (const String& name, int insertIndex); + Item getOrCreateSubGroup (const String& name); void addChild (const Item& newChild, int insertIndex); - bool addFile (const File& file, int insertIndex); + bool addFile (const File& file, int insertIndex, bool shouldCompile); bool addRelativeFile (const RelativePath& file, int insertIndex, bool shouldCompile); void removeItemFromProject(); - void sortAlphabetically(); + void sortAlphabetically (bool keepGroupsAtStart); Item findItemForFile (const File& file) const; Item getParent() const; @@ -266,25 +247,30 @@ public: ValueTree getExporters(); int getNumExporters(); ProjectExporter* createExporter (int index); - void addNewExporter (int exporterIndex); + void addNewExporter (const String& exporterName); void deleteExporter (int index); void createDefaultExporters(); //============================================================================== struct ConfigFlag { - String symbol, description; + String symbol, description, sourceModuleID; Value value; // 1 = true, 2 = false, anything else = use default }; - void getAllConfigFlags (OwnedArray & flags); - static const char* const configFlagDefault; static const char* const configFlagEnabled; static const char* const configFlagDisabled; Value getConfigFlag (const String& name); bool isConfigFlagEnabled (const String& name) const; + //============================================================================== + bool isModuleEnabled (const String& moduleID) const; + Value shouldShowAllModuleFilesInProject (const String& moduleID); + + void addModule (const String& moduleID); + void removeModule (const String& moduleID); + //============================================================================== String getFileTemplate (const String& templateName); @@ -310,10 +296,12 @@ private: DrawableImage mainProjectIcon; void updateProjectSettings(); + void sanitiseConfigFlags(); void setMissingDefaultValues(); ValueTree getConfigurations() const; void createDefaultConfigs(); ValueTree getConfigNode(); + ValueTree getModulesNode(); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Project); }; diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp index 80d124e35c..2c83ea207a 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h index 7680dc9384..0fd020f5bc 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExport_Android.h b/extras/Introjucer/Source/Project/jucer_ProjectExport_Android.h index c837c7e116..08359b0f3d 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExport_Android.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExport_Android.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -196,8 +196,8 @@ private: { MemoryOutputStream mo; - mo << "# Automatically generated makefile, created by the Jucer" << newLine - << "# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project!" << newLine + mo << "# Automatically generated makefile, created by the Introjucer" << newLine + << "# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!" << newLine << newLine << "APP_STL := gnustl_static" << newLine << "APP_CPPFLAGS += -fsigned-char -fexceptions -frtti" << newLine; @@ -220,8 +220,8 @@ private: void writeAndroidMk (OutputStream& out, const Array& files) { - out << "# Automatically generated makefile, created by the Jucer" << newLine - << "# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project!" << newLine + out << "# Automatically generated makefile, created by the Introjucer" << newLine + << "# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!" << newLine << newLine << "LOCAL_PATH := $(call my-dir)" << newLine << newLine @@ -364,7 +364,7 @@ private: { MemoryOutputStream mo; mo << "# This file is used to override default values used by the Ant build system." << newLine - << "# It is automatically generated by the Jucer - DO NOT EDIT IT or your changes will be lost!." << newLine + << "# It is automatically generated by the Introjucer - DO NOT EDIT IT or your changes will be lost!." << newLine << newLine << "sdk.dir=" << escapeSpaces (replacePreprocessorDefs (getAllPreprocessorDefs(), getSDKPath().toString())) << newLine << "ndk.dir=" << escapeSpaces (replacePreprocessorDefs (getAllPreprocessorDefs(), getNDKPath().toString())) << newLine diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExport_MSVC.h b/extras/Introjucer/Source/Project/jucer_ProjectExport_MSVC.h index 71f5ee8420..64679542a5 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExport_MSVC.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExport_MSVC.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -77,7 +77,7 @@ protected: File getProjectFile (const String& extension) const { return getTargetFolder().getChildFile (project.getProjectFilenameRoot()).withFileExtension (extension); } Value getLibraryType() const { return getSetting (Ids::libraryType); } - bool isLibraryDLL() const { return projectType.isLibrary() && getLibraryType() == 2; } + bool isLibraryDLL() const { return msvcIsDLL || (projectType.isLibrary() && getLibraryType() == 2); } //============================================================================== String getIntermediatesPath (const Project::BuildConfiguration& config) const @@ -131,11 +131,8 @@ protected: StringArray getHeaderSearchPaths (const Project::BuildConfiguration& config) const { - StringArray searchPaths (config.getHeaderSearchPaths()); - - for (int i = 0; i < libraryModules.size(); ++i) - libraryModules.getUnchecked(i)->addExtraSearchPaths (*this, searchPaths); - + StringArray searchPaths (extraSearchPaths); + searchPaths.addArray (config.getHeaderSearchPaths()); searchPaths.removeDuplicates (false); return searchPaths; } @@ -376,8 +373,8 @@ public: if (group.getID() == ProjectSaver::getGeneratedGroupID()) { - group.addFile (iconFile, -1); - group.addFile (rcFile, -1); + group.addFile (iconFile, -1, true); + group.addFile (rcFile, -1, true); group.findItemForFile (iconFile).getShouldAddToResourceValue() = false; group.findItemForFile (rcFile).getShouldAddToResourceValue() = false; @@ -508,7 +505,7 @@ protected: xml.setAttribute ("Name", createConfigName (config)); xml.setAttribute ("OutputDirectory", FileHelpers::windowsStylePath (binariesPath)); xml.setAttribute ("IntermediateDirectory", FileHelpers::windowsStylePath (intermediatesPath)); - xml.setAttribute ("ConfigurationType", (msvcIsDLL || isLibraryDLL()) ? "2" : (projectType.isLibrary() ? "4" : "1")); + xml.setAttribute ("ConfigurationType", isLibraryDLL() ? "2" : (projectType.isLibrary() ? "4" : "1")); xml.setAttribute ("UseOfMFC", "0"); xml.setAttribute ("ATLMinimizesCRunTimeLibraryUsage", "false"); xml.setAttribute ("CharacterSet", "2"); @@ -593,8 +590,8 @@ protected: linker->setAttribute ("OutputFile", FileHelpers::windowsStylePath (binariesPath + "/" + outputFileName)); linker->setAttribute ("SuppressStartupBanner", "true"); - if (project.getJuceLinkageMode() == Project::useLinkedJuce) - linker->setAttribute ("AdditionalLibraryDirectories", getJucePathFromTargetFolder().getChildFile ("bin").toWindowsStyle()); + //if (project.getJuceLinkageMode() == Project::useLinkedJuce) + // linker->setAttribute ("AdditionalLibraryDirectories", getJucePathFromTargetFolder().getChildFile ("bin").toWindowsStyle()); linker->setAttribute ("IgnoreDefaultLibraryNames", isDebug ? "libcmt.lib, msvcrt.lib" : ""); linker->setAttribute ("GenerateDebugInformation", isDebug ? "true" : "false"); @@ -778,7 +775,7 @@ private: String targetType, targetCode; - if (msvcIsDLL) { targetType = "\"Win32 (x86) Dynamic-Link Library\""; targetCode = "0x0102"; } + if (isLibraryDLL()) { targetType = "\"Win32 (x86) Dynamic-Link Library\""; targetCode = "0x0102"; } else if (projectType.isLibrary()) { targetType = "\"Win32 (x86) Static Library\""; targetCode = "0x0104"; } else if (projectType.isCommandLineApp()) { targetType = "\"Win32 (x86) Console Application\""; targetCode = "0x0103"; } else { targetType = "\"Win32 (x86) Application\""; targetCode = "0x0101"; } @@ -876,8 +873,8 @@ private: << "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib " << (isDebug ? " /debug" : "") << " /nologo /machine:I386 /out:\"" << targetBinary << "\" " - << (msvcIsDLL ? "/dll" : (msvcIsWindowsSubsystem ? "/subsystem:windows " - : "/subsystem:console ")) + << (isLibraryDLL() ? "/dll" : (msvcIsWindowsSubsystem ? "/subsystem:windows " + : "/subsystem:console ")) << replacePreprocessorTokens (config, getExtraLinkerFlags().toString()).trim() << newLine; } } @@ -943,7 +940,7 @@ private: { out << "Microsoft Developer Studio Workspace File, Format Version 6.00 " << newLine; - if (! project.isUsingWrapperFiles()) + /*if (! project.isUsingWrapperFiles()) { out << "Project: \"JUCE\"= ..\\JUCE.dsp - Package Owner=<4>" << newLine << "Package=<5>" << newLine @@ -952,7 +949,7 @@ private: << "Package=<4>" << newLine << "{{{" << newLine << "}}}" << newLine; - } + }*/ out << "Project: \"" << projectName << "\" = .\\" << getDSPFile().getFileName() << " - Package Owner=<4>" << newLine << "Package=<5>" << newLine @@ -961,12 +958,12 @@ private: << "Package=<4>" << newLine << "{{{" << newLine; - if (! project.isUsingWrapperFiles()) + /*if (! project.isUsingWrapperFiles()) { out << " Begin Project Dependency" << newLine << " Project_Dep_Name JUCE" << newLine << " End Project Dependency" << newLine; - } + }*/ out << "}}}" << newLine << "Global:" << newLine @@ -1271,7 +1268,7 @@ protected: String getProjectType() const { if (projectType.isGUIApplication() || projectType.isCommandLineApp()) return "Application"; - else if (msvcIsDLL) return "DynamicLibrary"; + else if (isLibraryDLL()) return "DynamicLibrary"; else if (projectType.isLibrary()) return "StaticLibrary"; jassertfalse; @@ -1321,8 +1318,8 @@ protected: { const RelativePath path (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder); - if (path.hasFileExtension (headerFileExtensions) || (path.hasFileExtension ("cpp;cc;c;cxx") && projectItem.shouldBeCompiled())) - addFileToCompile (path, cpps, headers, false, useStdCall); + if (path.hasFileExtension (headerFileExtensions) || (path.hasFileExtension ("cpp;cc;c;cxx"))) + addFileToCompile (path, cpps, headers, ! projectItem.shouldBeCompiled(), useStdCall); } } } @@ -1400,14 +1397,14 @@ protected: XmlElement* iconGroup = filterXml.createNewChildElement ("ItemGroup"); XmlElement* e = iconGroup->createNewChildElement ("None"); e->setAttribute ("Include", ".\\" + iconFile.getFileName()); - e->createNewChildElement ("Filter")->addTextElement (project.getJuceCodeGroupName()); + e->createNewChildElement ("Filter")->addTextElement (ProjectSaver::getJuceCodeGroupName()); } { XmlElement* rcGroup = filterXml.createNewChildElement ("ItemGroup"); XmlElement* e = rcGroup->createNewChildElement ("ResourceCompile"); e->setAttribute ("Include", ".\\" + rcFile.getFileName()); - e->createNewChildElement ("Filter")->addTextElement (project.getJuceCodeGroupName()); + e->createNewChildElement ("Filter")->addTextElement (ProjectSaver::getJuceCodeGroupName()); } } } diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExport_Make.h b/extras/Introjucer/Source/Project/jucer_ProjectExport_Make.h index 615077b73d..02f299916a 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExport_Make.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExport_Make.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -129,15 +129,16 @@ private: void writeHeaderPathFlags (OutputStream& out, const Project::BuildConfiguration& config) { - StringArray headerPaths (config.getHeaderSearchPaths()); - headerPaths.insert (0, "/usr/include/freetype2"); - headerPaths.insert (0, "/usr/include"); + StringArray searchPaths (extraSearchPaths); + searchPaths.addArray (config.getHeaderSearchPaths()); - for (int i = 0; i < libraryModules.size(); ++i) - libraryModules.getUnchecked(i)->addExtraSearchPaths (*this, headerPaths); + searchPaths.insert (0, "/usr/include/freetype2"); + searchPaths.insert (0, "/usr/include"); - for (int i = 0; i < headerPaths.size(); ++i) - out << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, headerPaths[i])).quoted(); + searchPaths.removeDuplicates (false); + + for (int i = 0; i < searchPaths.size(); ++i) + out << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])).quoted(); } void writeCppFlags (OutputStream& out, const Project::BuildConfiguration& config) @@ -167,9 +168,6 @@ private: const char* defaultLibs[] = { "freetype", "pthread", "rt", "X11", "GL", "GLU", "Xinerama", "asound", 0 }; StringArray libs (defaultLibs); - if (project.getJuceLinkageMode() == Project::useLinkedJuce) - libs.add ("juce"); - for (int i = 0; i < libs.size(); ++i) out << " -l" << libs[i]; @@ -247,8 +245,8 @@ private: void writeMakefile (OutputStream& out, const Array& files) { - out << "# Automatically generated makefile, created by the Jucer" << newLine - << "# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project!" << newLine + out << "# Automatically generated makefile, created by the Introjucer" << newLine + << "# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!" << newLine << newLine; out << "ifndef CONFIG" << newLine diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h b/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h index 9dd10da218..a6154b5370 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExport_XCode.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -399,11 +399,9 @@ private: StringArray getHeaderSearchPaths (const Project::BuildConfiguration& config) { - StringArray searchPaths (config.getHeaderSearchPaths()); - - for (int i = 0; i < libraryModules.size(); ++i) - libraryModules.getUnchecked(i)->addExtraSearchPaths (*this, searchPaths); - + StringArray searchPaths (extraSearchPaths); + searchPaths.addArray (config.getHeaderSearchPaths()); + searchPaths.removeDuplicates (false); return searchPaths; } @@ -431,12 +429,12 @@ private: for (int i = 0; i < extraLibs.size(); ++i) getLinkerFlagsForStaticLibrary (extraLibs.getReference(i), flags, librarySearchPaths); - if (project.getJuceLinkageMode() == Project::useLinkedJuce) + /*if (project.getJuceLinkageMode() == Project::useLinkedJuce) { RelativePath juceLib (getJucePathFromTargetFolder().getChildFile (config.isDebug().getValue() ? "bin/libjucedebug.a" : "bin/libjuce.a")); getLinkerFlagsForStaticLibrary (juceLib, flags, librarySearchPaths); - } + }*/ flags.add (replacePreprocessorTokens (config, getExtraLinkerFlags().toString())); flags.removeEmptyStrings (true); @@ -456,7 +454,7 @@ private: s.add ("WARNING_CFLAGS = -Wreorder"); s.add ("GCC_MODEL_TUNING = G5"); - if (projectType.isLibrary() || project.getJuceLinkageMode() == Project::useLinkedJuce) + if (projectType.isLibrary() /*|| project.getJuceLinkageMode() == Project::useLinkedJuce*/) { s.add ("GCC_INLINES_ARE_PRIVATE_EXTERN = NO"); s.add ("GCC_SYMBOLS_PRIVATE_EXTERN = NO"); diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExporter.cpp b/extras/Introjucer/Source/Project/jucer_ProjectExporter.cpp index ac33b1391d..467b79edea 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExporter.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectExporter.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -50,6 +50,16 @@ StringArray ProjectExporter::getExporterNames() return s; } +StringArray ProjectExporter::getDefaultExporters() +{ + StringArray s; + s.add (XCodeProjectExporter::getNameMac()); + s.add (MSVCProjectExporterVC2008::getName()); + s.add (MSVCProjectExporterVC2010::getName()); + s.add (MakefileProjectExporter::getNameLinux()); + return s; +} + ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int index) { ProjectExporter* exp = nullptr; @@ -75,10 +85,14 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int else exp->getJuceFolder() = juceFolder.getFullPathName(); - exp->createLibraryModules(); return exp; } +ProjectExporter* ProjectExporter::createNewExporter (Project& project, const String& name) +{ + return createNewExporter (project, getExporterNames().indexOf (name)); +} + ProjectExporter* ProjectExporter::createExporter (Project& project, const ValueTree& settings) { ProjectExporter* exp = MSVCProjectExporterVC6::createForSettings (project, settings); @@ -90,7 +104,6 @@ ProjectExporter* ProjectExporter::createExporter (Project& project, const ValueT if (exp == nullptr) exp = AndroidProjectExporter::createForSettings (project, settings); jassert (exp != nullptr); - exp->createLibraryModules(); return exp; } @@ -128,7 +141,8 @@ ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_) projectType (project_.getProjectType()), projectName (project_.getProjectName().toString()), projectFolder (project_.getFile().getParentDirectory()), - settings (settings_) + settings (settings_), + modulesGroup (nullptr) { for (int i = 0; i < jmax (1, project.getNumConfigurations()); ++i) configs.add (project.getConfiguration (i)); @@ -140,12 +154,6 @@ ProjectExporter::~ProjectExporter() { } -void ProjectExporter::createLibraryModules() -{ - libraryModules.clear(); - project.getProjectType().createRequiredModules (project, libraryModules); -} - File ProjectExporter::getTargetFolder() const { return project.resolveFilename (getTargetLocation().toString()); @@ -198,11 +206,13 @@ void ProjectExporter::createPropertyEditors (Array & props) props.add (new TextPropertyComponent (getTargetLocation(), "Target Project Folder", 1024, false)); props.getLast()->setTooltip ("The location of the folder in which the " + name + " project will be created. This path can be absolute, but it's much more sensible to make it relative to the jucer project directory."); - props.add (new TextPropertyComponent (getJuceFolder(), "Juce Location", 1024, false)); + props.add (new TextPropertyComponent (getJuceFolder(), "Local JUCE folder", 1024, false)); props.getLast()->setTooltip ("The location of the Juce library folder that the " + name + " project will use to when compiling. This can be an absolute path, or relative to the jucer project folder, but it must be valid on the filesystem of the machine you use to actually do the compiling."); - for (int i = 0; i < libraryModules.size(); ++i) - libraryModules.getUnchecked(i)->createPropertyEditors (*this, props); + OwnedArray modules; + project.getProjectType().createRequiredModules (project, ModuleList::getInstance(), modules); + for (int i = 0; i < modules.size(); ++i) + modules.getUnchecked(i)->createPropertyEditors (*this, props); props.add (new TextPropertyComponent (getExporterPreprocessorDefs(), "Extra Preprocessor Definitions", 32768, false)); props.getLast()->setTooltip ("Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas to separate the items - to include a space or comma in a definition, precede it with a backslash."); @@ -269,3 +279,14 @@ Image ProjectExporter::getBestIconForSize (int size, bool returnNullIfNothingBig RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, false); return newIm; } + +Project::Item& ProjectExporter::getModulesGroup() +{ + if (modulesGroup == nullptr) + { + groups.add (Project::Item::createGroup (project, "Juce Modules", "__modulesgroup__")); + modulesGroup = &(groups.getReference (groups.size() - 1)); + } + + return *modulesGroup; +} diff --git a/extras/Introjucer/Source/Project/jucer_ProjectExporter.h b/extras/Introjucer/Source/Project/jucer_ProjectExporter.h index 8e22c982db..6fb2a1cef9 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectExporter.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectExporter.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -44,9 +44,11 @@ public: static int getNumExporters(); static StringArray getExporterNames(); static ProjectExporter* createNewExporter (Project& project, const int index); + static ProjectExporter* createNewExporter (Project& project, const String& name); static ProjectExporter* createExporter (Project& project, const ValueTree& settings); static ProjectExporter* createPlatformDefaultExporter (Project& project); + static StringArray getDefaultExporters(); //============================================================================= // return 0 if this can't be opened in the current OS, or a higher value, where higher numbers are more preferable. @@ -118,7 +120,7 @@ public: //============================================================================== Array groups; - OwnedArray libraryModules; + Project::Item& getModulesGroup(); //============================================================================== String xcodePackageType, xcodeBundleSignature, xcodeBundleExtension; @@ -140,7 +142,7 @@ public: String msvcPostBuildCommand, msvcPostBuildOutputs; //============================================================================== - void createLibraryModules(); + StringArray extraSearchPaths; protected: //============================================================================== @@ -151,6 +153,7 @@ protected: const File projectFolder; Array configs; ValueTree settings; + Project::Item* modulesGroup; static String getDefaultBuildsRootFolder() { return "Builds/"; } diff --git a/extras/Introjucer/Source/Project/jucer_ProjectInformationComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectInformationComponent.cpp index 76c06d3f6a..38335afd7b 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectInformationComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectInformationComponent.cpp @@ -24,32 +24,133 @@ //[MiscUserDefs] You can add your own user definitions and misc code here... -class PropertiesWithHelpComponent : public PropertyPanelWithTooltips + +//============================================================================== +class PanelBase : public PropertyPanelWithTooltips { public: - PropertiesWithHelpComponent (Project& project_, int tabIndex_) - : project (project_), tabIndex (tabIndex_) + PanelBase (Project& project_) : project (project_) {} + + virtual void rebuildProperties (Array & props) = 0; + + void visibilityChanged() { + if (isVisible()) + refreshAll(); } - void rebuildProperties() + void refreshAll() { getPanel().clear(); Array props; + rebuildProperties (props); + getPanel().addProperties (props); + } - if (tabIndex == 0) +protected: + Project& project; +}; + +//============================================================================== +class ProjectTab : public PanelBase +{ +public: + ProjectTab (Project& project_) : PanelBase (project_) {} + + void rebuildProperties (Array & props) + { + project.createPropertyEditors (props); + } +}; + +//============================================================================== +class ConfigTab : public PanelBase +{ +public: + ConfigTab (Project& project_, int configIndex_) + : PanelBase (project_), configIndex (configIndex_) + { + } + + void rebuildProperties (Array & props) + { + project.getConfiguration (configIndex).createPropertyEditors (props); + } + +private: + int configIndex; +}; + +//============================================================================== +class ExportTab : public PanelBase +{ +public: + ExportTab (Project& project_, int exporterIndex_) + : PanelBase (project_), exporterIndex (exporterIndex_) + { + } + + void rebuildProperties (Array & props) + { + ScopedPointer exp (project.createExporter (exporterIndex)); + + if (exp != nullptr) + exp->createPropertyEditors (props); + + for (int i = props.size(); --i >= 0;) + props.getUnchecked(i)->setPreferredHeight (22); + } + +private: + int exporterIndex; +}; + +//============================================================================== +static StringArray getExtraDependenciesNeeded (Project& project, const ModuleList::Module& m) +{ + StringArray dependencies, extraDepsNeeded; + ModuleList::getInstance().getDependencies (m.uid, dependencies); + + for (int i = 0; i < dependencies.size(); ++i) + if ((! project.isModuleEnabled (dependencies[i])) && dependencies[i] != m.uid) + extraDepsNeeded.add (dependencies[i]); + + return extraDepsNeeded; +} + +//============================================================================== +class ModuleSettingsPanel : public PanelBase +{ +public: + ModuleSettingsPanel (Project& project_, const String& moduleID_) + : PanelBase (project_), moduleID (moduleID_) + { + setBounds ("parent.width / 2 + 1, 3, parent.width - 3, parent.height - 3"); + } + + void rebuildProperties (Array & props) + { + ScopedPointer module (ModuleList::getInstance().loadModule (moduleID)); + + if (module != nullptr) { - // The main project tab... - project.createPropertyEditors (props); - } - else if (tabIndex == 1) - { - // The Juce options tab... - OwnedArray flags; - project.getAllConfigFlags (flags); + props.add (new ModuleInfoComponent (project, moduleID)); + + if (project.isModuleEnabled (moduleID)) + { + const ModuleList::Module* m = ModuleList::getInstance().findModuleInfo (moduleID); + if (m != nullptr && getExtraDependenciesNeeded (project, *m).size() > 0) + props.add (new MissingDependenciesComponent (project, moduleID)); + } + + props.add (new BooleanPropertyComponent (project.shouldShowAllModuleFilesInProject (moduleID), + "Show All Code", "Add entire module tree to target projects")); + props.getLast()->setTooltip ("If this is enabled, then the entire source tree from this module will be shown inside your project, " + "making it easy to browse/edit the module's classes. If disabled, then only the minimum number of files " + "required to compile it will appear inside your project."); StringArray possibleValues; - possibleValues.add ("(Use default from juce_Config.h)"); + possibleValues.add ("(Use Default)"); possibleValues.add ("Enabled"); possibleValues.add ("Disabled"); @@ -58,6 +159,9 @@ public: mappings.add (Project::configFlagEnabled); mappings.add (Project::configFlagDisabled); + OwnedArray flags; + module->getConfigFlags (project, flags); + for (int i = 0; i < flags.size(); ++i) { ChoicePropertyComponent* c = new ChoicePropertyComponent (flags[i]->value, flags[i]->symbol, possibleValues, mappings); @@ -66,36 +170,236 @@ public: props.add (c); } } - else if (tabIndex < 2 + project.getNumConfigurations()) - { - // A config tab.. - project.getConfiguration (tabIndex - 2).createPropertyEditors (props); - } - else - { - // An export tab.. - ScopedPointer exp (project.createExporter (tabIndex - (2 + project.getNumConfigurations()))); - if (exp != nullptr) - exp->createPropertyEditors (props); - - for (int i = props.size(); --i >= 0;) - props.getUnchecked(i)->setPreferredHeight (22); - } - - getPanel().addProperties (props); + setEnabled (project.isModuleEnabled (moduleID)); } - void visibilityChanged() +private: + String moduleID; + + //============================================================================== + class ModuleInfoComponent : public PropertyComponent { - if (isVisible()) - rebuildProperties(); + public: + ModuleInfoComponent (Project& project_, const String& moduleID_) + : PropertyComponent ("Module", 100), + project (project_), moduleID (moduleID_) + { + } + + void refresh() {} + + void paint (Graphics& g) + { + g.setColour (Colours::white.withAlpha (0.4f)); + g.fillRect (0, 0, getWidth(), getHeight() - 1); + + const ModuleList::Module* module = ModuleList::getInstance().findModuleInfo (moduleID); + + if (module != nullptr) + { + String text; + text << module->name << newLine << newLine + << module->description; + + GlyphArrangement ga; + ga.addJustifiedText (Font (13.0f), text, 4.0f, 16.0f, getWidth() - 8.0f, Justification::topLeft); + g.setColour (Colours::black); + ga.draw (g); + } + } + + private: + Project& project; + String moduleID; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleInfoComponent); + }; + + //============================================================================== + class MissingDependenciesComponent : public PropertyComponent, + public Button::Listener + { + public: + MissingDependenciesComponent (Project& project_, const String& moduleID_) + : PropertyComponent ("Dependencies", 100), + project (project_), moduleID (moduleID_), + fixButton ("Enable Required Modules") + { + const ModuleList::Module* module = ModuleList::getInstance().findModuleInfo (moduleID); + + if (module != nullptr) + missingDependencies = getExtraDependenciesNeeded (project, *module); + + addAndMakeVisible (&fixButton); + fixButton.setColour (TextButton::buttonColourId, Colours::red); + fixButton.setColour (TextButton::textColourOffId, Colours::white); + fixButton.setBounds ("right - 160, parent.height - 26, parent.width - 8, top + 22"); + fixButton.addListener (this); + } + + void refresh() {} + + void paint (Graphics& g) + { + g.setColour (Colours::white.withAlpha (0.4f)); + g.fillRect (0, 0, getWidth(), getHeight() - 1); + + String text ("This module requires the following dependencies:\n"); + text << missingDependencies.joinIntoString (", "); + + GlyphArrangement ga; + ga.addJustifiedText (Font (13.0f), text, 4.0f, 16.0f, getWidth() - 8.0f, Justification::topLeft); + g.setColour (Colours::red); + ga.draw (g); + } + + void buttonClicked (Button*); + + private: + Project& project; + String moduleID; + StringArray missingDependencies; + TextButton fixButton; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MissingDependenciesComponent); + }; +}; + + +//============================================================================== +class ModulesPanel : public Component, + public ListBoxModel +{ +public: + ModulesPanel (Project& project_) + : project (project_) + { + modulesList.setModel (this); + modulesList.setColour (ListBox::backgroundColourId, Colours::white.withAlpha (0.4f)); + addAndMakeVisible (&modulesList); + modulesList.setBounds ("4, 3, parent.width / 2 - 4, parent.height - 3"); + } + + int getNumRows() + { + return ModuleList::getInstance().modules.size(); + } + + void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool rowIsSelected) + { + if (rowIsSelected) + g.fillAll (findColour (TextEditor::highlightColourId)); + + const ModuleList::Module* const m = ModuleList::getInstance().modules [rowNumber]; + + if (m != nullptr) + { + const float tickSize = height * 0.7f; + + getLookAndFeel().drawTickBox (g, *this, (height - tickSize) / 2, (height - tickSize) / 2, tickSize, tickSize, + project.isModuleEnabled (m->uid), true, false, false); + + if (project.isModuleEnabled (m->uid) && getExtraDependenciesNeeded (project, *m).size() > 0) + g.setColour (Colours::red); + else + g.setColour (Colours::black); + + g.setFont (height * 0.7f, Font::bold); + g.drawFittedText (m->uid, height, 0, 200, height, Justification::centredLeft, 1); + + g.setFont (height * 0.55f, Font::italic); + g.drawText (m->name, height + 200, 0, width - height - 200, height, Justification::centredLeft, true); + } + } + + void flipRow (int row) + { + const ModuleList::Module* const m = ModuleList::getInstance().modules [row]; + + if (m != nullptr) + { + if (project.isModuleEnabled (m->uid)) + { + project.removeModule (m->uid); + } + else + { + const StringArray extraDepsNeeded (getExtraDependenciesNeeded (project, *m)); + +/* if (extraDepsNeeded.size() > 0) + { + if (AlertWindow::showOkCancelBox (AlertWindow::NoIcon, + "Module Dependencies", + "The '" + m->uid + "' module requires the following dependencies:\n" + + extraDepsNeeded.joinIntoString (", ") + "\n\nDo you want to add all these to your project?")) + { + project.addModule (m->uid); + + for (int i = extraDepsNeeded.size(); --i >= 0;) + project.addModule (extraDepsNeeded[i]); + } + } + else*/ + { + project.addModule (m->uid); + } + } + } + + refresh(); + } + + void listBoxItemClicked (int row, const MouseEvent& e) + { + if (e.x < modulesList.getRowHeight()) + flipRow (row); + } + + void listBoxItemDoubleClicked (int row, const MouseEvent& e) + { + flipRow (row); + } + + void returnKeyPressed (int row) + { + flipRow (row); + } + + void selectedRowsChanged (int lastRowSelected) + { + const ModuleList::Module* const m = ModuleList::getInstance().modules [lastRowSelected]; + + settings = nullptr; + + if (m != nullptr) + addAndMakeVisible (settings = new ModuleSettingsPanel (project, m->uid)); + } + + void refresh() + { + modulesList.repaint(); + + if (settings != nullptr) + settings->refreshAll(); } private: Project& project; - int tabIndex; + ListBox modulesList; + ScopedPointer settings; }; + +void ModuleSettingsPanel::MissingDependenciesComponent::buttonClicked (Button*) +{ + for (int i = missingDependencies.size(); --i >= 0;) + project.addModule (missingDependencies[i]); + + ModulesPanel* mp = findParentComponentOfClass ((ModulesPanel*) 0); + if (mp != nullptr) + mp->refresh(); +} + //[/MiscUserDefs] //============================================================================== @@ -222,17 +526,13 @@ void ProjectInformationComponent::rebuildConfigTabs() { configTabBox.clearTabs(); - int index = 0; - PropertiesWithHelpComponent* panel = new PropertiesWithHelpComponent (project, index++); - configTabBox.addTab ("Project Settings", Colours::lightslategrey, panel, true, -1); - - panel = new PropertiesWithHelpComponent (project, index++); - configTabBox.addTab ("Juce Flags", Colours::lightblue, panel, true, -1); + configTabBox.addTab ("Project Settings", Colours::lightslategrey, new ProjectTab (project), true, -1); + configTabBox.addTab ("Modules", Colours::lightblue, new ModulesPanel (project), true, -1); int i; for (i = 0; i < project.getNumConfigurations(); ++i) { - panel = new PropertiesWithHelpComponent (project, index++); + Component* panel = new ConfigTab (project, i); Project::BuildConfiguration config (project.getConfiguration (i)); configTabBox.addTab (config.getName().toString(), Colour::greyLevel (0.65f), panel, true, -1); } @@ -243,7 +543,7 @@ void ProjectInformationComponent::rebuildConfigTabs() if (exp != nullptr) { - panel = new PropertiesWithHelpComponent (project, index++); + Component* panel = new ExportTab (project, i); configTabBox.addTab (exp->getName(), Colours::lightsteelblue, panel, true, -1); } } @@ -330,7 +630,7 @@ void ProjectInformationComponent::showExporterMenu() if (r >= 20000) project.deleteExporter (r - 20000); else if (r >= 10000) - project.addNewExporter (r - 10000); + project.addNewExporter (exporters [r - 10000]); } void ProjectInformationComponent::changeListenerCallback (ChangeBroadcaster*) diff --git a/extras/Introjucer/Source/Project/jucer_ProjectSaver.h b/extras/Introjucer/Source/Project/jucer_ProjectSaver.h index 4742527e3d..e2ca1741c4 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectSaver.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectSaver.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -34,10 +34,21 @@ class ProjectSaver { public: ProjectSaver (Project& project_, const File& projectFile_) - : project (project_), projectFile (projectFile_), - generatedFilesGroup (Project::Item::createGroup (project, project.getJuceCodeGroupName())) + : project (project_), + projectFile (projectFile_), + generatedCodeFolder (project.getGeneratedCodeFolder()), + generatedFilesGroup (Project::Item::createGroup (project, getJuceCodeGroupName(), "__generatedcode__")) { generatedFilesGroup.setID (getGeneratedGroupID()); + + if (generatedCodeFolder.exists()) + { + Array subFiles; + generatedCodeFolder.findChildFiles (subFiles, File::findFilesAndDirectories, false); + + for (int i = subFiles.size(); --i >= 0;) + subFiles.getReference(i).deleteRecursively(); + } } Project& getProject() noexcept { return project; } @@ -63,31 +74,50 @@ public: if (errors.size() == 0) writeProjects(); + if (errors.size() == 0) + writeAppConfigFile(); // (this is repeated in case the projects added anything to it) + + if (generatedCodeFolder.exists() && errors.size() == 0) + writeReadmeFile(); + if (errors.size() > 0) project.setFile (oldFile); return errors[0]; } - bool saveGeneratedFile (const String& filePath, const MemoryOutputStream& newData) + Project::Item saveGeneratedFile (const String& filePath, const MemoryOutputStream& newData) { - if (! project.getGeneratedCodeFolder().createDirectory()) + if (! generatedCodeFolder.createDirectory()) { - errors.add ("Couldn't create folder: " + project.getGeneratedCodeFolder().getFullPathName()); - return false; + errors.add ("Couldn't create folder: " + generatedCodeFolder.getFullPathName()); + return Project::Item (project, ValueTree::invalid); } - const File file (project.getGeneratedCodeFolder().getChildFile (filePath)); + const File file (generatedCodeFolder.getChildFile (filePath)); if (replaceFileIfDifferent (file, newData)) - { - if (! generatedFilesGroup.findItemForFile (file).isValid()) - generatedFilesGroup.addFile (file, -1); + return addFileToGeneratedGroup (file); - return true; + return Project::Item (project, ValueTree::invalid); + } + + Project::Item addFileToGeneratedGroup (const File& file) + { + Project::Item item (generatedFilesGroup.findItemForFile (file)); + + if (! item.isValid()) + { + generatedFilesGroup.addFile (file, -1, true); + item = generatedFilesGroup.findItemForFile (file); } - return false; + return item; + } + + void setExtraAppConfigFileContent (const String& content) + { + extraAppConfigContent = content; } static void writeAutoGenWarningComment (OutputStream& out) @@ -98,12 +128,50 @@ public: << newLine; } + static void writeGuardedInclude (OutputStream& out, StringArray paths, StringArray guards) + { + StringArray uniquePaths (paths); + uniquePaths.removeDuplicates (false); + + if (uniquePaths.size() == 1) + { + out << "#include " << paths[0] << newLine; + } + else + { + int i = paths.size(); + for (; --i >= 0;) + { + for (int j = i; --j >= 0;) + { + if (paths[i] == paths[j] && guards[i] == guards[j]) + { + paths.remove (i); + guards.remove (i); + } + } + } + + for (i = 0; i < paths.size(); ++i) + { + out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine + << " #include " << paths[i] << newLine; + } + + out << "#endif" << newLine; + } + } + static const char* getGeneratedGroupID() noexcept { return "__jucelibfiles"; } + Project::Item& getGeneratedCodeGroup() { return generatedFilesGroup; } + + static String getJuceCodeGroupName() { return "Juce Library Code"; } private: Project& project; - const File projectFile; + const File projectFile, generatedCodeFolder; Project::Item generatedFilesGroup; + String extraAppConfigContent; StringArray errors; File appConfigFile, binaryDataCpp; @@ -138,59 +206,69 @@ private: bool writeAppConfig (OutputStream& out) { writeAutoGenWarningComment (out); - out << " If you want to change any of these values, use the Introjucer to do so, rather than" << newLine - << " editing this file directly!" << newLine + out << " If you want to change any of these values, use the Introjucer to do so," << newLine + << " rather than editing this file directly!" << newLine << newLine - << " Any commented-out settings will fall back to using the default values that" << newLine - << " they are given in juce_Config.h" << newLine + << " Any commented-out settings will assume their default values." << newLine << newLine << "*/" << newLine << newLine; - bool notActive = project.getJuceLinkageMode() == Project::useLinkedJuce - || project.getJuceLinkageMode() == Project::notLinkedToJuce; - if (notActive) - out << "/* NOTE: These configs aren't available when you're linking to the juce library statically!" << newLine - << " If you need to set a configuration that differs from the default, you'll need" << newLine - << " to include the amalgamated Juce files." << newLine << newLine; + OwnedArray modules; + project.getProjectType().createRequiredModules (project, ModuleList::getInstance(), modules); + bool anyFlags = false; - OwnedArray flags; - project.getAllConfigFlags (flags); - - for (int i = 0; i < flags.size(); ++i) + for (int j = 0; j < modules.size(); ++j) { - const Project::ConfigFlag* const f = flags[i]; - const String value (f->value.toString()); + LibraryModule* const m = modules.getUnchecked(j); + OwnedArray flags; + m->getConfigFlags (project, flags); - if (value != Project::configFlagEnabled && value != Project::configFlagDisabled) - out << "//#define "; - else - out << "#define "; + if (flags.size() > 0) + { + anyFlags = true; - out << f->symbol; + out << "//==============================================================================" << newLine + << "// " << m->getID() << " flags:" << newLine + << newLine; - if (value == Project::configFlagEnabled) - out << " 1"; - else if (value == Project::configFlagDisabled) - out << " 0"; + for (int i = 0; i < flags.size(); ++i) + { + flags.getUnchecked(i)->value.referTo (project.getConfigFlag (flags.getUnchecked(i)->symbol)); - out << newLine; + const Project::ConfigFlag* const f = flags[i]; + const String value (project.getConfigFlag (f->symbol).toString()); + + if (value == Project::configFlagEnabled) + out << "#define " << f->symbol << " 1"; + else if (value == Project::configFlagDisabled) + out << "#define " << f->symbol << " 0"; + else + out << "//#define " << f->symbol; + + out << newLine; + } + + if (j < modules.size() - 1) + out << newLine; + } } - if (notActive) - out << newLine << "*/" << newLine; + if (extraAppConfigContent.isNotEmpty()) + { + out << newLine << extraAppConfigContent.trimEnd() << newLine; + return true; + } - return flags.size() > 0; + return anyFlags; } void writeAppConfigFile() { - appConfigFile = project.getGeneratedCodeFolder().getChildFile (project.getAppConfigFilename()); + appConfigFile = generatedCodeFolder.getChildFile (project.getAppConfigFilename()); MemoryOutputStream mem; if (writeAppConfig (mem)) saveGeneratedFile (project.getAppConfigFilename(), mem); - else - appConfigFile.deleteFile(); } void writeAppHeader (OutputStream& out) @@ -198,8 +276,8 @@ private: writeAutoGenWarningComment (out); out << " This is the header file that your files should include in order to get all the" << newLine - << " Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in" << newLine - << " your own source files, because that wouldn't pick up the correct Juce configuration" << newLine + << " JUCE library headers. You should avoid including the JUCE headers directly in" << newLine + << " your own source files, because that wouldn't pick up the correct configuration" << newLine << " options for your app." << newLine << newLine << "*/" << newLine << newLine; @@ -213,49 +291,22 @@ private: { OwnedArray modules; - project.getProjectType().createRequiredModules (project, modules); - - StringArray paths, guards; + project.getProjectType().createRequiredModules (project, ModuleList::getInstance(), modules); for (int i = 0; i < modules.size(); ++i) - modules.getUnchecked(i)->getHeaderFiles (project, paths, guards); - - StringArray uniquePaths (paths); - uniquePaths.removeDuplicates (false); - - if (uniquePaths.size() == 1) - { - out << "#include " << paths[0] << newLine; - } - else - { - int i = paths.size(); - for (; --i >= 0;) - { - for (int j = i; --j >= 0;) - { - if (paths[i] == paths[j] && guards[i] == guards[j]) - { - paths.remove (i); - guards.remove (i); - } - } - } - - for (i = 0; i < paths.size(); ++i) - { - out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine - << " #include " << paths[i] << newLine; - } - - out << "#endif" << newLine; - } + modules.getUnchecked(i)->writeIncludes (project, out); } if (binaryDataCpp.exists()) out << CodeHelpers::createIncludeStatement (binaryDataCpp.withFileExtension (".h"), appConfigFile) << newLine; out << newLine + << "#if ! DONT_SET_USING_JUCE_NAMESPACE" << newLine + << " // If your code uses a lot of JUCE classes, then this will obviously save you" << newLine + << " // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE." << newLine + << " using namespace JUCE_NAMESPACE;" << newLine + << "#endif" << newLine + << newLine << "namespace ProjectInfo" << newLine << "{" << newLine << " const char* const projectName = " << CodeHelpers::addEscapeChars (project.getProjectName().toString()).quoted() << ";" << newLine @@ -268,22 +319,14 @@ private: void writeAppHeader() { - if (project.getJuceLinkageMode() != Project::notLinkedToJuce - || ! project.getProjectType().isLibrary()) - { - MemoryOutputStream mem; - writeAppHeader (mem); - saveGeneratedFile (project.getJuceSourceHFilename(), mem); - } - else - { - project.getAppIncludeFile().deleteFile(); - } + MemoryOutputStream mem; + writeAppHeader (mem); + saveGeneratedFile (project.getJuceSourceHFilename(), mem); } void writeBinaryDataFiles() { - binaryDataCpp = project.getGeneratedCodeFolder().getChildFile ("BinaryData.cpp"); + binaryDataCpp = generatedCodeFolder.getChildFile ("BinaryData.cpp"); ResourceFile resourceFile (project); @@ -293,8 +336,8 @@ private: if (resourceFile.write (binaryDataCpp)) { - generatedFilesGroup.addFile (binaryDataCpp, -1); - generatedFilesGroup.addFile (binaryDataCpp.withFileExtension (".h"), -1); + generatedFilesGroup.addFile (binaryDataCpp, -1, true); + generatedFilesGroup.addFile (binaryDataCpp.withFileExtension (".h"), -1, false); } else { @@ -308,8 +351,41 @@ private: } } + void writeReadmeFile() + { + MemoryOutputStream out; + out << newLine + << " Important Note!!" << newLine + << " ================" << newLine + << newLine + << "The purpose of this folder is to contain files that are auto-generated by the Introjucer," << newLine + << "and ALL files in this folder will be mercilessly DELETED and completely re-written whenever" << newLine + << "the Introjucer saves your project." << newLine + << newLine + << "Therefore, it's a bad idea to make any manual changes to the files in here, or to" << newLine + << "put any of your own files in here if you don't want to lose them. (Of course you may choose" << newLine + << "to add the folder's contents to your version-control system so that you can re-merge your own" << newLine + << "modifications after the Introjucer has saved its changes)." << newLine; + + replaceFileIfDifferent (generatedCodeFolder.getChildFile ("ReadMe.txt"), out); + } + + static void sortGroupRecursively (Project::Item group) + { + group.sortAlphabetically (true); + + for (int i = group.getNumChildren(); --i >= 0;) + sortGroupRecursively (group.getChild(i)); + } + void writeProjects() { + // keep a copy of the basic generated files group, as each exporter may modify it. + const ValueTree originalGeneratedGroup (generatedFilesGroup.getNode().createCopy()); + + OwnedArray modules; + project.getProjectType().createRequiredModules (project, ModuleList::getInstance(), modules); + for (int i = project.getNumExporters(); --i >= 0;) { ScopedPointer exporter (project.createExporter (i)); @@ -317,13 +393,13 @@ private: if (exporter->getTargetFolder().createDirectory()) { + generatedFilesGroup.getNode() = originalGeneratedGroup.createCopy(); project.getProjectType().prepareExporter (*exporter); - // start with a copy of the basic files, as each exporter may modify it. - const ValueTree generatedGroupCopy (generatedFilesGroup.getNode().createCopy()); + for (int j = 0; j < modules.size(); ++j) + modules.getUnchecked(j)->prepareExporter (*exporter, *this); - for (int j = 0; j < exporter->libraryModules.size(); ++j) - exporter->libraryModules.getUnchecked(j)->prepareExporter (*exporter, *this); + sortGroupRecursively (generatedFilesGroup); exporter->groups.add (generatedFilesGroup); @@ -335,8 +411,6 @@ private: { errors.add (error.message); } - - generatedFilesGroup.getNode() = generatedGroupCopy; } else { @@ -360,4 +434,4 @@ private: }; -#endif +#endif // __JUCER_PROJECTSAVER_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp index 37ea93124b..65f37d482f 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h index 2ede87df58..ff8c0267eb 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectTreeViewBase.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_ProjectType.cpp b/extras/Introjucer/Source/Project/jucer_ProjectType.cpp index f7ff89b22e..232567df57 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectType.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectType.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -26,832 +26,9 @@ #include "jucer_ProjectType.h" #include "jucer_ProjectExporter.h" #include "jucer_ProjectSaver.h" +#include "jucer_AudioPluginModule.h" -//============================================================================== -class JuceModule -{ -public: - JuceModule (const File& file) - : moduleInfo (JSON::parse (file)), - moduleFolder (file.getParentDirectory()) - { - } - static StringArray findAllModuleIDs() - { - StringArray ids; - DirectoryIterator iter (getModulesFolder(), false, "*", File::findDirectories); - - while (iter.next()) - { - const File moduleDef (iter.getFile().getChildFile ("juce_module.txt")); - - if (moduleDef.exists()) - { - ScopedPointer m (new JuceModule (moduleDef)); - jassert (m->isValid()); - - if (m->isValid()) - ids.add (m->getID()); - } - } - - return ids; - } - - static JuceModule* createModuleForID (const String& moduleID) - { - DirectoryIterator iter (getModulesFolder(), false, "*", File::findDirectories); - - while (iter.next()) - { - const File moduleDef (iter.getFile().getChildFile ("juce_module.txt")); - - if (moduleDef.exists()) - { - ScopedPointer m (new JuceModule (moduleDef)); - - if (m->getID() == moduleID) - return m.release(); - } - } - - return nullptr; - } - - String getID() const { return moduleInfo ["id"]; } - - bool isValid() const { return getID().isNotEmpty(); } - - File getInclude() const - { - return getFileFromPath (moduleInfo ["include"]); - } - - Array getCompiledFiles() const - { - Array result; - const Array* const files = moduleInfo ["compile"].getArray(); - - if (files != nullptr) - { - for (int i = 0; i < files->size(); ++i) - { - const var& file = files->getReference(i); - - String filename (file ["file"].toString()); - - if (filename.isNotEmpty()) - result.add (getFileFromPath (filename)); - } - } - - return result; - } - - File getFileFromPath (const String& path) const - { - return moduleFolder.getChildFile (path); - } - - void getDependencies (OwnedArray& dependencies) const - { - const Array* const deps = moduleInfo ["dependencies"].getArray(); - - if (deps != nullptr) - { - for (int i = 0; i < deps->size(); ++i) - { - const String requiredID (deps->getUnchecked(i) ["id"].toString()); - - if (requiredID.isNotEmpty() - && ! containsModule (dependencies, requiredID)) - { - JuceModule* const m = createModuleForID (requiredID); - - if (m != nullptr) - dependencies.add (m); - } - } - } - } - - var moduleInfo; - File moduleFolder; - -private: - static bool containsModule (const OwnedArray& modules, const String& requiredID) - { - for (int i = modules.size(); --i >= 0;) - if (modules.getUnchecked(i)->getID() == requiredID) - return true; - - return false; - } - - static File getModulesFolder() - { - return File ("/Volumes/CODE/code/juce2/modules"); - //return StoredSettings::getInstance()->getLastKnownJuceFolder().getChildFile ("modules"); - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceModule); -}; - - -//============================================================================== -LibraryModule::LibraryModule() -{ -} - -//============================================================================== -namespace -{ - Value getVSTFolder (const ProjectExporter& exporter) { return exporter.getSetting (Ids::vstFolder); } - - void addVSTFolderToPath (const ProjectExporter& exporter, StringArray& searchPaths) - { - const String vstFolder (getVSTFolder (exporter).toString()); - - if (vstFolder.isNotEmpty()) - { - RelativePath path (exporter.rebaseFromProjectFolderToBuildTarget (RelativePath (vstFolder, RelativePath::projectFolder))); - - if (exporter.isVisualStudio()) - searchPaths.add (path.toWindowsStyle()); - else if (exporter.isLinux() || exporter.isXcode()) - searchPaths.insert (0, path.toUnixStyle()); - } - } - - void createVSTPathEditor (const ProjectExporter& exporter, Array & props) - { - props.add (new TextPropertyComponent (getVSTFolder (exporter), "VST Folder", 1024, false)); - props.getLast()->setTooltip ("If you're building a VST, this must be the folder containing the VST SDK. This should be an absolute path."); - } - - static int countMaxPluginChannels (const String& configString, bool isInput) - { - StringArray configs; - configs.addTokens (configString, ", {}", String::empty); - configs.trim(); - configs.removeEmptyStrings(); - jassert ((configs.size() & 1) == 0); // looks like a syntax error in the configs? - - int maxVal = 0; - for (int i = (isInput ? 0 : 1); i < configs.size(); i += 2) - maxVal = jmax (maxVal, configs[i].getIntValue()); - - return maxVal; - } - - Value shouldBuildVST (const Project& project) { return project.getProjectValue ("buildVST"); } - Value shouldBuildRTAS (const Project& project) { return project.getProjectValue ("buildRTAS"); } - Value shouldBuildAU (const Project& project) { return project.getProjectValue ("buildAU"); } - - Value getPluginName (const Project& project) { return project.getProjectValue ("pluginName"); } - Value getPluginDesc (const Project& project) { return project.getProjectValue ("pluginDesc"); } - Value getPluginManufacturer (const Project& project) { return project.getProjectValue ("pluginManufacturer"); } - Value getPluginManufacturerCode (const Project& project) { return project.getProjectValue ("pluginManufacturerCode"); } - Value getPluginCode (const Project& project) { return project.getProjectValue ("pluginCode"); } - Value getPluginChannelConfigs (const Project& project) { return project.getProjectValue ("pluginChannelConfigs"); } - Value getPluginIsSynth (const Project& project) { return project.getProjectValue ("pluginIsSynth"); } - Value getPluginWantsMidiInput (const Project& project) { return project.getProjectValue ("pluginWantsMidiIn"); } - Value getPluginProducesMidiOut (const Project& project) { return project.getProjectValue ("pluginProducesMidiOut"); } - Value getPluginSilenceInProducesSilenceOut (const Project& project) { return project.getProjectValue ("pluginSilenceInIsSilenceOut"); } - Value getPluginTailLengthSeconds (const Project& project) { return project.getProjectValue ("pluginTailLength"); } - Value getPluginEditorNeedsKeyFocus (const Project& project) { return project.getProjectValue ("pluginEditorRequiresKeys"); } - Value getPluginAUExportPrefix (const Project& project) { return project.getProjectValue ("pluginAUExportPrefix"); } - Value getPluginAUCocoaViewClassName (const Project& project) { return project.getProjectValue ("pluginAUViewClass"); } - Value getPluginRTASCategory (const Project& project) { return project.getProjectValue ("pluginRTASCategory"); } - - void writePluginCharacteristics (Project& project, OutputStream& out) - { - String headerGuard ("__PLUGINCHARACTERISTICS_" + project.getProjectUID().toUpperCase() + "__"); - - ProjectSaver::writeAutoGenWarningComment (out); - - out << " This header file contains configuration options for the plug-in. If you need to change any of" << newLine - << " these, it'd be wise to do so using the Jucer, rather than editing this file directly..." << newLine - << newLine - << "*/" << newLine - << newLine - << "#ifndef " << headerGuard << newLine - << "#define " << headerGuard << newLine - << newLine - << "#define JucePlugin_Build_VST " << ((bool) shouldBuildVST (project).getValue() ? 1 : 0) << " // (If you change this value, you'll also need to re-export the projects using the Jucer)" << newLine - << "#define JucePlugin_Build_AU " << ((bool) shouldBuildAU (project).getValue() ? 1 : 0) << " // (If you change this value, you'll also need to re-export the projects using the Jucer)" << newLine - << "#define JucePlugin_Build_RTAS " << ((bool) shouldBuildRTAS (project).getValue() ? 1 : 0) << " // (If you change this value, you'll also need to re-export the projects using the Jucer)" << newLine - << newLine - << "#define JucePlugin_Name " << getPluginName (project).toString().quoted() << newLine - << "#define JucePlugin_Desc " << getPluginDesc (project).toString().quoted() << newLine - << "#define JucePlugin_Manufacturer " << getPluginManufacturer (project).toString().quoted() << newLine - << "#define JucePlugin_ManufacturerCode '" << getPluginManufacturerCode (project).toString().trim().substring (0, 4) << "'" << newLine - << "#define JucePlugin_PluginCode '" << getPluginCode (project).toString().trim().substring (0, 4) << "'" << newLine - << "#define JucePlugin_MaxNumInputChannels " << countMaxPluginChannels (getPluginChannelConfigs (project).toString(), true) << newLine - << "#define JucePlugin_MaxNumOutputChannels " << countMaxPluginChannels (getPluginChannelConfigs (project).toString(), false) << newLine - << "#define JucePlugin_PreferredChannelConfigurations " << getPluginChannelConfigs (project).toString() << newLine - << "#define JucePlugin_IsSynth " << ((bool) getPluginIsSynth (project).getValue() ? 1 : 0) << newLine - << "#define JucePlugin_WantsMidiInput " << ((bool) getPluginWantsMidiInput (project).getValue() ? 1 : 0) << newLine - << "#define JucePlugin_ProducesMidiOutput " << ((bool) getPluginProducesMidiOut (project).getValue() ? 1 : 0) << newLine - << "#define JucePlugin_SilenceInProducesSilenceOut " << ((bool) getPluginSilenceInProducesSilenceOut (project).getValue() ? 1 : 0) << newLine - << "#define JucePlugin_TailLengthSeconds " << (double) getPluginTailLengthSeconds (project).getValue() << newLine - << "#define JucePlugin_EditorRequiresKeyboardFocus " << ((bool) getPluginEditorNeedsKeyFocus (project).getValue() ? 1 : 0) << newLine - << "#define JucePlugin_VersionCode " << project.getVersionAsHex() << newLine - << "#define JucePlugin_VersionString " << project.getVersion().toString().quoted() << newLine - << "#define JucePlugin_VSTUniqueID JucePlugin_PluginCode" << newLine - << "#define JucePlugin_VSTCategory " << ((bool) getPluginIsSynth (project).getValue() ? "kPlugCategSynth" : "kPlugCategEffect") << newLine - << "#define JucePlugin_AUMainType " << ((bool) getPluginIsSynth (project).getValue() ? "kAudioUnitType_MusicDevice" : "kAudioUnitType_Effect") << newLine - << "#define JucePlugin_AUSubType JucePlugin_PluginCode" << newLine - << "#define JucePlugin_AUExportPrefix " << getPluginAUExportPrefix (project).toString() << newLine - << "#define JucePlugin_AUExportPrefixQuoted " << getPluginAUExportPrefix (project).toString().quoted() << newLine - << "#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode" << newLine - << "#define JucePlugin_CFBundleIdentifier " << project.getBundleIdentifier().toString() << newLine - << "#define JucePlugin_AUCocoaViewClassName " << getPluginAUCocoaViewClassName (project).toString() << newLine - << "#define JucePlugin_RTASCategory " << ((bool) getPluginIsSynth (project).getValue() ? "ePlugInCategory_SWGenerators" : "ePlugInCategory_None") << newLine - << "#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode" << newLine - << "#define JucePlugin_RTASProductId JucePlugin_PluginCode" << newLine; - - out << "#define JUCE_USE_VSTSDK_2_4 1" << newLine - << newLine - << "#endif // " << headerGuard << newLine; - } - - void writePluginCharacteristicsFile (ProjectSaver& projectSaver) - { - MemoryOutputStream mem; - writePluginCharacteristics (projectSaver.getProject(), mem); - projectSaver.saveGeneratedFile (projectSaver.getProject().getPluginCharacteristicsFilename(), mem); - } -} - - -//============================================================================== -class JuceLibraryModule : public LibraryModule -{ -public: - JuceLibraryModule() {} - - void getHeaderFiles (Project& project, StringArray& includePaths, StringArray& headerGuards) - { - if (project.getJuceLinkageMode() != Project::notLinkedToJuce) - { - if (project.isUsingSingleTemplateFile() - || project.isUsingMultipleTemplateFiles() - || project.isUsingFullyAmalgamatedFile()) - createMultipleIncludes (project, "juce_amalgamated.h", includePaths, headerGuards); - else - createMultipleIncludes (project, "juce.h", includePaths, headerGuards); - } - } - - void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const - { - const Project& project = exporter.getProject(); - - const String linkageMode (project.getJuceLinkageMode()); - int numJuceSourceFiles = 0; - - if (linkageMode == Project::useAmalgamatedJuce - || linkageMode == Project::useAmalgamatedJuceViaSingleTemplate) - { - numJuceSourceFiles = 1; - } - else if (linkageMode == Project::useAmalgamatedJuceViaMultipleTemplates) - { - numJuceSourceFiles = project.getNumSeparateAmalgamatedFiles(); - } - else - { - jassert (linkageMode == Project::notLinkedToJuce - || linkageMode == Project::useLinkedJuce); - } - - for (int i = 0; i <= project.getNumSeparateAmalgamatedFiles(); ++i) - { - String sourceWrapper (project.getJuceSourceFilenameRoot()); - - if (i != 0) - sourceWrapper << i; - - sourceWrapper << (exporter.usesMMFiles() ? ".mm" : ".cpp"); - - if (numJuceSourceFiles > 0 - && ((i == 0 && numJuceSourceFiles == 1) || (i != 0 && numJuceSourceFiles > 1))) - { - MemoryOutputStream mem; - writeSourceWrapper (mem, const_cast (project), i); - projectSaver.saveGeneratedFile (sourceWrapper, mem); - } - else - { - project.getGeneratedCodeFolder().getChildFile (sourceWrapper).deleteFile(); - } - } - - if (project.isConfigFlagEnabled ("JUCE_PLUGINHOST_AU")) - exporter.xcodeFrameworks.addTokens ("AudioUnit CoreAudioKit", false); - } - - void addExtraSearchPaths (const ProjectExporter& exporter, StringArray& paths) const - { - if (exporter.getProject().isConfigFlagEnabled ("JUCE_PLUGINHOST_VST")) - addVSTFolderToPath (exporter, paths); - } - - void createPropertyEditors (const ProjectExporter& exporter, Array & props) const - { - if (exporter.getProject().isConfigFlagEnabled ("JUCE_PLUGINHOST_VST")) - createVSTPathEditor (exporter, props); - } - - void getConfigFlags (Project& project, OwnedArray& flags) const - { - if (project.getJuceLinkageMode() == Project::notLinkedToJuce) - return; - - StringArray lines; - project.getLocalJuceFolder().getChildFile ("juce_Config.h").readLines (lines); - - for (int i = 0; i < lines.size(); ++i) - { - String line (lines[i].trim()); - - if (line.startsWith ("/** ") && line.containsChar (':')) - { - ScopedPointer config (new Project::ConfigFlag()); - config->symbol = line.substring (4).upToFirstOccurrenceOf (":", false, false).trim(); - - if (config->symbol.length() > 4) - { - config->description = line.fromFirstOccurrenceOf (":", false, false).trimStart(); - ++i; - while (! (lines[i].contains ("*/") || lines[i].contains ("@see"))) - { - if (lines[i].trim().isNotEmpty()) - config->description = config->description.trim() + " " + lines[i].trim(); - - ++i; - } - - config->description = config->description.upToFirstOccurrenceOf ("*/", false, false); - flags.add (config.release()); - } - } - } - } - -private: - static void writeSourceWrapper (OutputStream& out, Project& project, int fileNumber) - { - const String appConfigFileName (project.getAppConfigFilename()); - - ProjectSaver::writeAutoGenWarningComment (out); - - out << " This file pulls in all the Juce source code, and builds it using the settings" << newLine - << " defined in " << appConfigFileName << "." << newLine - << newLine - << " If you want to change the method by which Juce is linked into your app, use the" << newLine - << " Jucer to change it, rather than trying to edit this file directly." << newLine - << newLine - << "*/" - << newLine - << newLine - << CodeHelpers::createIncludeStatement (appConfigFileName) << newLine; - - if (fileNumber == 0) - writeInclude (project, out, project.isUsingFullyAmalgamatedFile() ? "juce_amalgamated.cpp" - : "amalgamation/juce_amalgamated_template.cpp"); - else - writeInclude (project, out, "amalgamation/juce_amalgamated" + String (fileNumber) + ".cpp"); - } - - static void createMultipleIncludes (Project& project, const String& pathFromLibraryFolder, - StringArray& paths, StringArray& guards) - { - for (int i = project.getNumExporters(); --i >= 0;) - { - ScopedPointer exporter (project.createExporter (i)); - - if (exporter != nullptr) - { - paths.add (exporter->getIncludePathForFileInJuceFolder (pathFromLibraryFolder, project.getAppIncludeFile())); - guards.add ("defined (" + exporter->getExporterIdentifierMacro() + ")"); - } - } - } - - static void writeInclude (Project& project, OutputStream& out, const String& pathFromJuceFolder) - { - StringArray paths, guards; - createMultipleIncludes (project, pathFromJuceFolder, paths, guards); - - StringArray uniquePaths (paths); - uniquePaths.removeDuplicates (false); - - if (uniquePaths.size() == 1) - { - out << "#include " << paths[0] << newLine; - } - else - { - int i = paths.size(); - for (; --i >= 0;) - { - for (int j = i; --j >= 0;) - { - if (paths[i] == paths[j] && guards[i] == guards[j]) - { - paths.remove (i); - guards.remove (i); - } - } - } - - for (i = 0; i < paths.size(); ++i) - { - out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine - << " #include " << paths[i] << newLine; - } - - out << "#endif" << newLine; - } - } -}; - -//============================================================================== -#define JUCE_PLUGINS_ROOT "src/audio/plugin_client/" -#define JUCE_PLUGINS_PATH_VST JUCE_PLUGINS_ROOT "VST/" -#define JUCE_PLUGINS_PATH_RTAS JUCE_PLUGINS_ROOT "RTAS/" -#define JUCE_PLUGINS_PATH_AU JUCE_PLUGINS_ROOT "AU/" - -//============================================================================== -class VSTLibraryModule : public LibraryModule -{ -public: - VSTLibraryModule() {} - - void getHeaderFiles (Project& project, StringArray& includePaths, StringArray& headerGuards) - { - } - - void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const - { - fixMissingValues (exporter); - writePluginCharacteristicsFile (projectSaver); - - exporter.makefileTargetSuffix = ".so"; - - Project::Item group (Project::Item::createGroup (const_cast (exporter).getProject(), "Juce VST Wrapper")); - group.setID ("__jucevstfiles"); - - const char* osxFiles[] = { JUCE_PLUGINS_PATH_VST "juce_VST_Wrapper.cpp", - JUCE_PLUGINS_PATH_VST "juce_VST_Wrapper.mm", 0 }; - - const char* winFiles[] = { JUCE_PLUGINS_PATH_VST "juce_VST_Wrapper.cpp", 0}; - - for (const char** f = (exporter.isXcode() ? osxFiles : winFiles); *f != 0; ++f) - group.addRelativeFile (exporter.getJucePathFromProjectFolder().getChildFile (*f), -1, true); - - exporter.groups.add (group); - } - - void addExtraSearchPaths (const ProjectExporter& exporter, StringArray& paths) const - { - RelativePath juceWrapperFolder (exporter.getProject().getGeneratedCodeFolder(), - exporter.getTargetFolder(), RelativePath::buildTargetFolder); - - addVSTFolderToPath (exporter, paths); - - if (exporter.isVisualStudio()) - paths.add (juceWrapperFolder.toWindowsStyle()); - else if (exporter.isLinux()) - paths.add (juceWrapperFolder.toUnixStyle()); - } - - void createPropertyEditors (const ProjectExporter& exporter, Array & props) const - { - fixMissingValues (exporter); - createVSTPathEditor (exporter, props); - } - - void getConfigFlags (Project& project, OwnedArray& flags) const - { - } - - static void fixMissingValues (const ProjectExporter& exporter) - { - if (getVSTFolder (exporter).toString().isEmpty()) - { - if (exporter.isVisualStudio()) - getVSTFolder (exporter) = "c:\\SDKs\\vstsdk2.4"; - else - getVSTFolder (exporter) = "~/SDKs/vstsdk2.4"; - } - } -}; - -//============================================================================== -class RTASLibraryModule : public LibraryModule -{ -public: - RTASLibraryModule() {} - - void getHeaderFiles (Project& project, StringArray& includePaths, StringArray& headerGuards) - { - } - - void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const - { - fixMissingValues (exporter); - - exporter.xcodeCanUseDwarf = false; - - exporter.msvcTargetSuffix = ".dpm"; - exporter.msvcNeedsDLLRuntimeLib = true; - - RelativePath rtasFolder (getRTASFolder (exporter).toString(), RelativePath::projectFolder); - exporter.msvcExtraPreprocessorDefs.set ("JucePlugin_WinBag_path", CodeHelpers::addEscapeChars (rtasFolder.getChildFile ("WinBag") - .toWindowsStyle().quoted())); - - exporter.msvcExtraLinkerOptions = "/FORCE:multiple"; - exporter.msvcDelayLoadedDLLs = "DAE.dll; DigiExt.dll; DSI.dll; PluginLib.dll; DSPManager.dll"; - exporter.msvcModuleDefinitionFile = exporter.getJucePathFromTargetFolder() - .getChildFile (JUCE_PLUGINS_PATH_RTAS "juce_RTAS_WinExports.def") - .toWindowsStyle(); - - exporter.msvcPostBuildOutputs = "\"$(TargetPath)\".rsr"; - exporter.msvcPostBuildCommand = "copy /Y \"" + exporter.getJucePathFromTargetFolder() - .getChildFile (JUCE_PLUGINS_PATH_RTAS "juce_RTAS_WinResources.rsr") - .toWindowsStyle() - + "\" \"$(TargetPath)\".rsr"; - - - exporter.xcodeExtraLibrariesDebug.add (rtasFolder.getChildFile ("MacBag/Libs/Debug/libPluginLibrary.a")); - exporter.xcodeExtraLibrariesRelease.add (rtasFolder.getChildFile ("MacBag/Libs/Release/libPluginLibrary.a")); - - writePluginCharacteristicsFile (projectSaver); - - if (exporter.isXcode() || exporter.isVisualStudio()) - { - Project::Item group (Project::Item::createGroup (const_cast (exporter).getProject(), "Juce RTAS Wrapper")); - group.setID ("__jucertasfiles"); - - const char* osxFiles[] = { JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode1.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode2.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode3.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode_Header.h", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_MacResources.r", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_MacUtilities.mm", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_Wrapper.cpp", 0 }; - - const char* winFiles[] = { JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode1.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode2.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode3.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_DigiCode_Header.h", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_WinUtilities.cpp", - JUCE_PLUGINS_PATH_RTAS "juce_RTAS_Wrapper.cpp" , 0}; - - for (const char** f = (exporter.isXcode() ? osxFiles : winFiles); *f != 0; ++f) - { - const RelativePath file (exporter.getJucePathFromProjectFolder().getChildFile (*f)); - group.addRelativeFile (file, -1, file.hasFileExtension ("cpp;mm;r")); - - const Project::Item& last = group.getChild (group.getNumChildren() - 1); - last.getShouldInhibitWarningsValue() = true; - last.getShouldUseStdCallValue() = true; - } - - exporter.groups.add (group); - } - } - - void addExtraSearchPaths (const ProjectExporter& exporter, StringArray& paths) const - { - RelativePath rtasFolder (getRTASFolder (exporter).toString(), RelativePath::projectFolder); - - if (exporter.isVisualStudio()) - { - RelativePath juceWrapperFolder (exporter.getProject().getGeneratedCodeFolder(), - exporter.getTargetFolder(), RelativePath::buildTargetFolder); - - paths.add (juceWrapperFolder.toWindowsStyle()); - - const char* p[] = { "AlturaPorts/TDMPlugins/PluginLibrary/EffectClasses", - "AlturaPorts/TDMPlugins/PluginLibrary/ProcessClasses", - "AlturaPorts/TDMPlugins/PluginLibrary/ProcessClasses/Interfaces", - "AlturaPorts/TDMPlugins/PluginLibrary/Utilities", - "AlturaPorts/TDMPlugins/PluginLibrary/RTASP_Adapt", - "AlturaPorts/TDMPlugins/PluginLibrary/CoreClasses", - "AlturaPorts/TDMPlugins/PluginLibrary/Controls", - "AlturaPorts/TDMPlugins/PluginLibrary/Meters", - "AlturaPorts/TDMPlugins/PluginLibrary/ViewClasses", - "AlturaPorts/TDMPlugins/PluginLibrary/DSPClasses", - "AlturaPorts/TDMPlugins/PluginLibrary/Interfaces", - "AlturaPorts/TDMPlugins/common", - "AlturaPorts/TDMPlugins/common/Platform", - "AlturaPorts/TDMPlugins/SignalProcessing/Public", - "AlturaPorts/TDMPlugIns/DSPManager/Interfaces", - "AlturaPorts/SADriver/Interfaces", - "AlturaPorts/DigiPublic/Interfaces", - "AlturaPorts/Fic/Interfaces/DAEClient", - "AlturaPorts/NewFileLibs/Cmn", - "AlturaPorts/NewFileLibs/DOA", - "AlturaPorts/AlturaSource/PPC_H", - "AlturaPorts/AlturaSource/AppSupport", - "AvidCode/AVX2sdk/AVX/avx2/avx2sdk/inc", - "xplat/AVX/avx2/avx2sdk/inc" }; - - for (int i = 0; i < numElementsInArray (p); ++i) - paths.add (exporter.rebaseFromProjectFolderToBuildTarget (rtasFolder.getChildFile (p[i])).toWindowsStyle()); - } - else if (exporter.isXcode()) - { - paths.add ("/Developer/Headers/FlatCarbon"); - - const char* p[] = { "AlturaPorts/TDMPlugIns/PlugInLibrary/Controls", - "AlturaPorts/TDMPlugIns/PlugInLibrary/CoreClasses", - "AlturaPorts/TDMPlugIns/PlugInLibrary/DSPClasses", - "AlturaPorts/TDMPlugIns/PlugInLibrary/EffectClasses", - "AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild", - "AlturaPorts/TDMPlugIns/PlugInLibrary/Meters", - "AlturaPorts/TDMPlugIns/PlugInLibrary/ProcessClasses", - "AlturaPorts/TDMPlugIns/PlugInLibrary/ProcessClasses/Interfaces", - "AlturaPorts/TDMPlugIns/PlugInLibrary/RTASP_Adapt", - "AlturaPorts/TDMPlugIns/PlugInLibrary/Utilities", - "AlturaPorts/TDMPlugIns/PlugInLibrary/ViewClasses", - "AlturaPorts/TDMPlugIns/DSPManager/**", - "AlturaPorts/TDMPlugIns/SupplementalPlugInLib/Encryption", - "AlturaPorts/TDMPlugIns/SupplementalPlugInLib/GraphicsExtensions", - "AlturaPorts/TDMPlugIns/common", - "AlturaPorts/TDMPlugIns/common/PI_LibInterface", - "AlturaPorts/TDMPlugIns/PACEProtection/**", - "AlturaPorts/TDMPlugIns/SignalProcessing/**", - "AlturaPorts/OMS/Headers", - "AlturaPorts/Fic/Interfaces/**", - "AlturaPorts/Fic/Source/SignalNets", - "AlturaPorts/DSIPublicInterface/PublicHeaders", - "DAEWin/Include", - "AlturaPorts/DigiPublic/Interfaces", - "AlturaPorts/DigiPublic", - "AlturaPorts/NewFileLibs/DOA", - "AlturaPorts/NewFileLibs/Cmn", - "xplat/AVX/avx2/avx2sdk/inc", - "xplat/AVX/avx2/avx2sdk/utils" }; - - for (int i = 0; i < numElementsInArray (p); ++i) - paths.add (exporter.rebaseFromProjectFolderToBuildTarget (rtasFolder.getChildFile (p[i])).toUnixStyle()); - } - } - - void createPropertyEditors (const ProjectExporter& exporter, Array & props) const - { - if (exporter.isXcode() || exporter.isVisualStudio()) - { - fixMissingValues (exporter); - - props.add (new TextPropertyComponent (getRTASFolder (exporter), "RTAS Folder", 1024, false)); - props.getLast()->setTooltip ("If you're building an RTAS, this must be the folder containing the RTAS SDK. This should be an absolute path."); - } - } - - void getConfigFlags (Project& project, OwnedArray& flags) const - { - } - - static void fixMissingValues (const ProjectExporter& exporter) - { - if (getRTASFolder (exporter).toString().isEmpty()) - { - if (exporter.isVisualStudio()) - getRTASFolder (exporter) = "c:\\SDKs\\PT_80_SDK"; - else - getRTASFolder (exporter) = "~/SDKs/PT_80_SDK"; - } - } - - static Value getRTASFolder (const ProjectExporter& exporter) { return exporter.getSetting (Ids::rtasFolder); } -}; - -//============================================================================== -class AULibraryModule : public LibraryModule -{ -public: - AULibraryModule() {} - - void getHeaderFiles (Project& project, StringArray& includePaths, StringArray& headerGuards) - { - } - - void prepareExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const - { - writePluginCharacteristicsFile (projectSaver); - - if (exporter.isXcode()) - { - exporter.xcodeFrameworks.addTokens ("AudioUnit CoreAudioKit", false); - - Project::Item group (Project::Item::createGroup (const_cast (exporter).getProject(), "Juce AU Wrapper")); - group.setID ("__juceaufiles"); - - { - const char* files[] = { JUCE_PLUGINS_PATH_AU "juce_AU_Resources.r", - JUCE_PLUGINS_PATH_AU "juce_AU_Wrapper.mm", 0 }; - - for (const char** f = files; *f != 0; ++f) - group.addRelativeFile (exporter.getJucePathFromProjectFolder().getChildFile (*f), -1, true); - } - - Project::Item subGroup (group.addNewSubGroup ("Apple AU Files", -1)); - subGroup.setID ("__juceappleaufiles"); - - { - #define JUCE_AU_PUBLICUTILITY "${DEVELOPER_DIR}/Extras/CoreAudio/PublicUtility/" - #define JUCE_AU_PUBLIC "${DEVELOPER_DIR}/Extras/CoreAudio/AudioUnits/AUPublic/" - - const char* appleAUFiles[] = { JUCE_AU_PUBLICUTILITY "CADebugMacros.h", - JUCE_AU_PUBLICUTILITY "CAAUParameter.cpp", - JUCE_AU_PUBLICUTILITY "CAAUParameter.h", - JUCE_AU_PUBLICUTILITY "CAAudioChannelLayout.cpp", - JUCE_AU_PUBLICUTILITY "CAAudioChannelLayout.h", - JUCE_AU_PUBLICUTILITY "CAMutex.cpp", - JUCE_AU_PUBLICUTILITY "CAMutex.h", - JUCE_AU_PUBLICUTILITY "CAStreamBasicDescription.cpp", - JUCE_AU_PUBLICUTILITY "CAStreamBasicDescription.h", - JUCE_AU_PUBLICUTILITY "CAVectorUnitTypes.h", - JUCE_AU_PUBLICUTILITY "CAVectorUnit.cpp", - JUCE_AU_PUBLICUTILITY "CAVectorUnit.h", - JUCE_AU_PUBLIC "AUViewBase/AUViewLocalizedStringKeys.h", - JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewDispatch.cpp", - JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewControl.cpp", - JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewControl.h", - JUCE_AU_PUBLIC "AUCarbonViewBase/CarbonEventHandler.cpp", - JUCE_AU_PUBLIC "AUCarbonViewBase/CarbonEventHandler.h", - JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewBase.cpp", - JUCE_AU_PUBLIC "AUCarbonViewBase/AUCarbonViewBase.h", - JUCE_AU_PUBLIC "AUBase/AUBase.cpp", - JUCE_AU_PUBLIC "AUBase/AUBase.h", - JUCE_AU_PUBLIC "AUBase/AUDispatch.cpp", - JUCE_AU_PUBLIC "AUBase/AUDispatch.h", - JUCE_AU_PUBLIC "AUBase/AUInputElement.cpp", - JUCE_AU_PUBLIC "AUBase/AUInputElement.h", - JUCE_AU_PUBLIC "AUBase/AUOutputElement.cpp", - JUCE_AU_PUBLIC "AUBase/AUOutputElement.h", - JUCE_AU_PUBLIC "AUBase/AUResources.r", - JUCE_AU_PUBLIC "AUBase/AUScopeElement.cpp", - JUCE_AU_PUBLIC "AUBase/AUScopeElement.h", - JUCE_AU_PUBLIC "AUBase/ComponentBase.cpp", - JUCE_AU_PUBLIC "AUBase/ComponentBase.h", - JUCE_AU_PUBLIC "OtherBases/AUMIDIBase.cpp", - JUCE_AU_PUBLIC "OtherBases/AUMIDIBase.h", - JUCE_AU_PUBLIC "OtherBases/AUMIDIEffectBase.cpp", - JUCE_AU_PUBLIC "OtherBases/AUMIDIEffectBase.h", - JUCE_AU_PUBLIC "OtherBases/AUOutputBase.cpp", - JUCE_AU_PUBLIC "OtherBases/AUOutputBase.h", - JUCE_AU_PUBLIC "OtherBases/MusicDeviceBase.cpp", - JUCE_AU_PUBLIC "OtherBases/MusicDeviceBase.h", - JUCE_AU_PUBLIC "OtherBases/AUEffectBase.cpp", - JUCE_AU_PUBLIC "OtherBases/AUEffectBase.h", - JUCE_AU_PUBLIC "Utility/AUBuffer.cpp", - JUCE_AU_PUBLIC "Utility/AUBuffer.h", - JUCE_AU_PUBLIC "Utility/AUDebugDispatcher.cpp", - JUCE_AU_PUBLIC "Utility/AUDebugDispatcher.h", - JUCE_AU_PUBLIC "Utility/AUInputFormatConverter.h", - JUCE_AU_PUBLIC "Utility/AUSilentTimeout.h", - JUCE_AU_PUBLIC "Utility/AUTimestampGenerator.h", 0 }; - - for (const char** f = appleAUFiles; *f != 0; ++f) - { - const RelativePath file (*f, RelativePath::projectFolder); - subGroup.addRelativeFile (file, -1, file.hasFileExtension ("cpp;mm")); - subGroup.getChild (subGroup.getNumChildren() - 1).getShouldInhibitWarningsValue() = true; - } - } - - exporter.groups.add (group); - } - } - - void addExtraSearchPaths (const ProjectExporter& exporter, StringArray& paths) const - { - if (exporter.isXcode()) - { - paths.add ("$(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility"); - paths.add ("$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility"); - } - } - - void createPropertyEditors (const ProjectExporter& exporter, Array & props) const - { - } - - void getConfigFlags (Project& project, OwnedArray& flags) const - { - } -}; - - -//============================================================================== //============================================================================== ProjectType::ProjectType (const String& type_, const String& desc_) : type (type_), desc (desc_) @@ -861,8 +38,6 @@ ProjectType::ProjectType (const String& type_, const String& desc_) ProjectType::~ProjectType() { - JuceModule::findAllModuleIDs(); - getAllTypes().removeValue (this); } @@ -884,9 +59,11 @@ const ProjectType* ProjectType::findType (const String& typeCode) return nullptr; } -void ProjectType::createRequiredModules (Project& project, OwnedArray& modules) const +void ProjectType::createRequiredModules (Project& project, const ModuleList& availableModules, OwnedArray& modules) const { - modules.add (new JuceLibraryModule()); + for (int i = 0; i < availableModules.modules.size(); ++i) + if (project.isModuleEnabled (availableModules.modules.getUnchecked(i)->uid)) + modules.add (availableModules.modules.getUnchecked(i)->create()); } //============================================================================== @@ -919,11 +96,6 @@ public: exporter.msvcIsWindowsSubsystem = true; exporter.msvcTargetSuffix = ".exe"; } - - void createRequiredModules (Project& project, OwnedArray& modules) const - { - ProjectType::createRequiredModules (project, modules); - } }; //============================================================================== @@ -955,11 +127,6 @@ public: exporter.msvcTargetSuffix = ".exe"; exporter.msvcExtraPreprocessorDefs.set ("_CONSOLE", ""); } - - void createRequiredModules (Project& project, OwnedArray& modules) const - { - ProjectType::createRequiredModules (project, modules); - } }; //============================================================================== @@ -988,13 +155,9 @@ public: exporter.makefileTargetSuffix = ".so"; - exporter.msvcTargetSuffix = ".lib"; - exporter.msvcExtraPreprocessorDefs.set ("_LIB", ""); - } + exporter.msvcTargetSuffix = exporter.getSetting (Ids::libraryType) == 2 ? ".dll" : ".lib"; - void createRequiredModules (Project& project, OwnedArray& modules) const - { - ProjectType::createRequiredModules (project, modules); + exporter.msvcExtraPreprocessorDefs.set ("_LIB", ""); } }; @@ -1116,15 +279,6 @@ public: exporter.makefileIsDLL = true; } - - void createRequiredModules (Project& project, OwnedArray& modules) const - { - ProjectType::createRequiredModules (project, modules); - - if (shouldBuildVST (project).getValue()) modules.add (new VSTLibraryModule()); - if (shouldBuildRTAS (project).getValue()) modules.add (new RTASLibraryModule()); - if (shouldBuildAU (project).getValue()) modules.add (new AULibraryModule()); - } }; //============================================================================== @@ -1150,11 +304,6 @@ public: exporter.makefileIsDLL = true; } - - void createRequiredModules (Project& project, OwnedArray& modules) const - { - ProjectType::createRequiredModules (project, modules); - } }; //============================================================================== diff --git a/extras/Introjucer/Source/Project/jucer_ProjectType.h b/extras/Introjucer/Source/Project/jucer_ProjectType.h index 7e30cb9f18..bf77f09c9d 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectType.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectType.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -27,23 +27,7 @@ #define __JUCER_PROJECTTYPE_JUCEHEADER__ #include "../jucer_Headers.h" -#include "jucer_Project.h" -class ProjectExporter; -class ProjectSaver; - -//============================================================================== -class LibraryModule -{ -public: - LibraryModule(); - virtual ~LibraryModule() {} - - virtual void prepareExporter (ProjectExporter&, ProjectSaver&) const = 0; - virtual void getHeaderFiles (Project&, StringArray& includePaths, StringArray& headerGuards) = 0; - virtual void addExtraSearchPaths (const ProjectExporter&, StringArray& paths) const = 0; - virtual void createPropertyEditors (const ProjectExporter&, Array &) const = 0; - virtual void getConfigFlags (Project&, OwnedArray&) const = 0; -}; +#include "jucer_Module.h" //============================================================================== @@ -74,7 +58,8 @@ public: virtual void setMissingProjectProperties (Project&) const = 0; virtual void createPropertyEditors (const Project&, Array &) const = 0; virtual void prepareExporter (ProjectExporter&) const = 0; - virtual void createRequiredModules (Project&, OwnedArray& modules) const; + virtual void createRequiredModules (Project&, const ModuleList& availableModules, + OwnedArray& modules) const; protected: ProjectType (const String& type, const String& desc); @@ -86,4 +71,4 @@ private: }; -#endif // __JUCE_PROJECTTYPE_H_C1C6BC3E__ +#endif // __JUCER_PROJECTTYPE_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Project/jucer_ResourceFile.cpp b/extras/Introjucer/Source/Project/jucer_ResourceFile.cpp index 0d5bdf4299..62463a5b5c 100644 --- a/extras/Introjucer/Source/Project/jucer_ResourceFile.cpp +++ b/extras/Introjucer/Source/Project/jucer_ResourceFile.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_ResourceFile.h b/extras/Introjucer/Source/Project/jucer_ResourceFile.h index 97f7268e3e..ea7d097ffd 100644 --- a/extras/Introjucer/Source/Project/jucer_ResourceFile.h +++ b/extras/Introjucer/Source/Project/jucer_ResourceFile.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp index 1748c06fc2..61e5c6c3dd 100644 --- a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp +++ b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -62,7 +62,7 @@ void GroupTreeViewItem::addFiles (const StringArray& files, int insertIndex) { const File file (files[i]); - if (item.addFile (file, insertIndex)) + if (item.addFile (file, insertIndex, true)) ++insertIndex; } } @@ -125,7 +125,7 @@ void GroupTreeViewItem::showPopupMenu() { case 1: triggerAsyncRename (item); break; case 2: deleteAllSelectedItems(); break; - case 3: item.sortAlphabetically(); break; + case 3: item.sortAlphabetically (false); break; default: processCreateFileMenuItem (res); break; } } diff --git a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.h b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.h index 829ea68dda..79057750c5 100644 --- a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.h +++ b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_CodeHelpers.cpp b/extras/Introjucer/Source/Utility/jucer_CodeHelpers.cpp index f5c23c47b3..cc048e18dd 100644 --- a/extras/Introjucer/Source/Utility/jucer_CodeHelpers.cpp +++ b/extras/Introjucer/Source/Utility/jucer_CodeHelpers.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -180,7 +180,10 @@ namespace CodeHelpers String createIncludeStatement (const String& includePath) { - return "#include \"" + includePath + "\""; + if (includePath.startsWithChar ('<') || includePath.startsWithChar ('"')) + return "#include " + includePath; + else + return "#include \"" + includePath + "\""; } String makeHeaderGuardName (const File& file) diff --git a/extras/Introjucer/Source/Utility/jucer_CodeHelpers.h b/extras/Introjucer/Source/Utility/jucer_CodeHelpers.h index e8468b420e..b8d0044ce6 100644 --- a/extras/Introjucer/Source/Utility/jucer_CodeHelpers.h +++ b/extras/Introjucer/Source/Utility/jucer_CodeHelpers.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_CODEUTILITIES_H_B86AA5D2__ -#define __JUCER_CODEUTILITIES_H_B86AA5D2__ +#ifndef __JUCER_CODEHELPERS_JUCEHEADER__ +#define __JUCER_CODEHELPERS_JUCEHEADER__ //============================================================================== @@ -59,4 +59,4 @@ namespace CodeHelpers } -#endif // __JUCER_CODEUTILITIES_H_B86AA5D2__ +#endif // __JUCER_CODEHELPERS_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Utility/jucer_Colours.h b/extras/Introjucer/Source/Utility/jucer_Colours.h index e2a75ba8c0..63f562cd0b 100644 --- a/extras/Introjucer/Source/Utility/jucer_Colours.h +++ b/extras/Introjucer/Source/Utility/jucer_Colours.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_FileHelpers.cpp b/extras/Introjucer/Source/Utility/jucer_FileHelpers.cpp index e8f8ba2bb0..b2429384c6 100644 --- a/extras/Introjucer/Source/Utility/jucer_FileHelpers.cpp +++ b/extras/Introjucer/Source/Utility/jucer_FileHelpers.cpp @@ -1,9 +1,24 @@ /* ============================================================================== - jucer_FileUtilities.cpp - Created: 14 May 2010 11:24:09pm - Author: Julian Storer + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 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. ============================================================================== */ @@ -66,7 +81,8 @@ namespace FileHelpers bool overwriteFileWithNewDataIfDifferent (const File& file, const String& newData) { - return overwriteFileWithNewDataIfDifferent (file, newData.toUTF8(), strlen ((const char*) newData.toUTF8())); + const char* const utf8 = newData.toUTF8(); + return overwriteFileWithNewDataIfDifferent (file, utf8, strlen (utf8)); } bool containsAnyNonHiddenFiles (const File& folder) @@ -129,7 +145,7 @@ namespace FileHelpers { return folder.getFileName().containsIgnoreCase ("juce") && folder.getChildFile ("juce.h").exists() - && folder.getChildFile ("juce_Config.h").exists(); + && folder.getChildFile ("modules").exists(); } static File lookInFolderForJuceFolder (const File& folder) diff --git a/extras/Introjucer/Source/Utility/jucer_FileHelpers.h b/extras/Introjucer/Source/Utility/jucer_FileHelpers.h index 3f451d90a6..ec03b10db5 100644 --- a/extras/Introjucer/Source/Utility/jucer_FileHelpers.h +++ b/extras/Introjucer/Source/Utility/jucer_FileHelpers.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_FILEUTILITIES_H_EEE25EE3__ -#define __JUCER_FILEUTILITIES_H_EEE25EE3__ +#ifndef __JUCER_FILEHELPERS_JUCEHEADER__ +#define __JUCER_FILEHELPERS_JUCEHEADER__ //============================================================================== @@ -83,4 +83,4 @@ private: }; -#endif // __JUCER_FILEUTILITIES_H_EEE25EE3__ +#endif // __JUCER_FILEHELPERS_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp b/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp index f5dd7b1f54..bef8ccf3d0 100644 --- a/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp +++ b/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h b/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h index c22214f462..d9d922c139 100644 --- a/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h +++ b/extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp index 4f023f17e6..a7b90da1bc 100644 --- a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp +++ b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h index c70b61b8f4..d643724338 100644 --- a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h +++ b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,7 +23,6 @@ ============================================================================== */ - //============================================================================== // String::hashCode64 actually hit some dupes, so this is a more powerful version. int64 hashCode64 (const String& s); diff --git a/extras/Introjucer/Source/Utility/jucer_PresetIDs.h b/extras/Introjucer/Source/Utility/jucer_PresetIDs.h index 2e8abcb2a1..86049b991d 100644 --- a/extras/Introjucer/Source/Utility/jucer_PresetIDs.h +++ b/extras/Introjucer/Source/Utility/jucer_PresetIDs.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_PRESETIDS_H_40E9E82E__ -#define __JUCER_PRESETIDS_H_40E9E82E__ +#ifndef __JUCER_PRESETIDS_JUCEHEADER__ +#define __JUCER_PRESETIDS_JUCEHEADER__ // Handy list of static Identifiers.. @@ -118,6 +118,7 @@ namespace Ids DECLARE_ID (focusOrder); DECLARE_ID (hidden); DECLARE_ID (useStdCall); + DECLARE_ID (showAllCode); DECLARE_ID (androidSDKPath); DECLARE_ID (androidNDKPath); DECLARE_ID (androidInternetNeeded); @@ -127,4 +128,4 @@ namespace Ids #undef DECLARE_ID } -#endif // __JUCER_PRESETIDS_H_40E9E82E__ +#endif // __JUCER_PRESETIDS_JUCEHEADER__ diff --git a/extras/Introjucer/Source/Utility/jucer_RelativePath.h b/extras/Introjucer/Source/Utility/jucer_RelativePath.h index 4499031132..288b0c2653 100644 --- a/extras/Introjucer/Source/Utility/jucer_RelativePath.h +++ b/extras/Introjucer/Source/Utility/jucer_RelativePath.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -116,7 +116,7 @@ private: static bool isAbsolute (const String& path) { return File::isAbsolutePath (path) - || path.startsWithChar ('/') // (needed because File::isAbsolutePath will ignore forward-slashes on win32) + || path.startsWithChar ('/') // (needed because File::isAbsolutePath will ignore forward-slashes on Windows) || path.startsWithChar ('$') || path.startsWithChar ('~') || (CharacterFunctions::isLetter (path[0]) && path[1] == ':') diff --git a/extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp b/extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp index 15c553b061..46449fffc3 100644 --- a/extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp +++ b/extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/Introjucer/Source/Utility/jucer_StoredSettings.h b/extras/Introjucer/Source/Utility/jucer_StoredSettings.h index bb5061022f..3bc522f381 100644 --- a/extras/Introjucer/Source/Utility/jucer_StoredSettings.h +++ b/extras/Introjucer/Source/Utility/jucer_StoredSettings.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -29,7 +29,7 @@ //============================================================================== /** - A singleton to hold the jucer's persistent settings, and to save them in a + A singleton to hold persistent settings, and to save them in a suitable PropertiesFile. */ class StoredSettings diff --git a/extras/Introjucer/Source/Utility/jucer_ValueSourceHelpers.h b/extras/Introjucer/Source/Utility/jucer_ValueSourceHelpers.h index a7ea1a121b..9735512455 100644 --- a/extras/Introjucer/Source/Utility/jucer_ValueSourceHelpers.h +++ b/extras/Introjucer/Source/Utility/jucer_ValueSourceHelpers.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ @@ -23,8 +23,8 @@ ============================================================================== */ -#ifndef __JUCER_VALUEREMAPPERSOURCE_JUCEHEADER__ -#define __JUCER_VALUEREMAPPERSOURCE_JUCEHEADER__ +#ifndef __JUCER_VALUESOURCEHELPERS_JUCEHEADER__ +#define __JUCER_VALUESOURCEHELPERS_JUCEHEADER__ //============================================================================== @@ -60,4 +60,4 @@ protected: }; -#endif // __JUCER_VALUEREMAPPERSOURCE_JUCEHEADER__ +#endif // __JUCER_VALUESOURCEHELPERS_JUCEHEADER__ diff --git a/extras/Introjucer/Source/jucer_Headers.h b/extras/Introjucer/Source/jucer_Headers.h index 446e0df52b..4fea7961b5 100644 --- a/extras/Introjucer/Source/jucer_Headers.h +++ b/extras/Introjucer/Source/jucer_Headers.h @@ -2,7 +2,7 @@ ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-10 by Raw Material Software Ltd. + Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ diff --git a/extras/JuceDemo/Builds/Android/jni/Android.mk b/extras/JuceDemo/Builds/Android/jni/Android.mk index 930c7f3c30..8650dec317 100644 --- a/extras/JuceDemo/Builds/Android/jni/Android.mk +++ b/extras/JuceDemo/Builds/Android/jni/Android.mk @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! LOCAL_PATH := $(call my-dir) @@ -31,10 +31,20 @@ LOCAL_SRC_FILES := \ ../../../Source/demos/WebBrowserDemo.cpp\ ../../../Source/demos/WidgetsDemo.cpp\ ../../../JuceLibraryCode/BinaryData.cpp\ - ../../../JuceLibraryCode/JuceLibraryCode1.cpp\ - ../../../JuceLibraryCode/JuceLibraryCode2.cpp\ - ../../../JuceLibraryCode/JuceLibraryCode3.cpp\ - ../../../JuceLibraryCode/JuceLibraryCode4.cpp\ + ../../../JuceLibraryCode/juce_audio_basics_wrapper.cpp\ + ../../../JuceLibraryCode/juce_audio_devices_wrapper.cpp\ + ../../../JuceLibraryCode/juce_audio_formats_wrapper.cpp\ + ../../../JuceLibraryCode/juce_audio_processors_wrapper.cpp\ + ../../../JuceLibraryCode/juce_audio_utils_wrapper.cpp\ + ../../../JuceLibraryCode/juce_core_wrapper.cpp\ + ../../../JuceLibraryCode/juce_cryptography_wrapper.cpp\ + ../../../JuceLibraryCode/juce_data_structures_wrapper.cpp\ + ../../../JuceLibraryCode/juce_events_wrapper.cpp\ + ../../../JuceLibraryCode/juce_graphics_wrapper.cpp\ + ../../../JuceLibraryCode/juce_gui_basics_wrapper.cpp\ + ../../../JuceLibraryCode/juce_gui_extra_wrapper.cpp\ + ../../../JuceLibraryCode/juce_opengl_wrapper.cpp\ + ../../../JuceLibraryCode/juce_video_wrapper.cpp\ ifeq ($(CONFIG),Debug) LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -O0 -D "JUCE_ANDROID=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" diff --git a/extras/JuceDemo/Builds/Android/jni/Application.mk b/extras/JuceDemo/Builds/Android/jni/Application.mk index 29d8ea0bbb..c23c57a17f 100644 --- a/extras/JuceDemo/Builds/Android/jni/Application.mk +++ b/extras/JuceDemo/Builds/Android/jni/Application.mk @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! APP_STL := gnustl_static APP_CPPFLAGS += -fsigned-char -fexceptions -frtti diff --git a/extras/JuceDemo/Builds/Android/local.properties b/extras/JuceDemo/Builds/Android/local.properties index a688c88909..77f7400469 100644 --- a/extras/JuceDemo/Builds/Android/local.properties +++ b/extras/JuceDemo/Builds/Android/local.properties @@ -1,5 +1,5 @@ # This file is used to override default values used by the Ant build system. -# It is automatically generated by the Jucer - DO NOT EDIT IT or your changes will be lost!. +# It is automatically generated by the Introjucer - DO NOT EDIT IT or your changes will be lost!. sdk.dir=${user.home}/SDKs/android-sdk-mac_x86 ndk.dir=${user.home}/SDKs/android-ndk-r5c diff --git a/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png index 97acb16b4e83f63e4ef15d12db9a04c8f91dfe99..2fc5caeabbcde6a483c53900bbb6a96c0f294395 100644 GIT binary patch literal 7082 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 diff --git a/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png index 7841a79ea09644bfc099b9e467a43d3a9a0984a4..75401b379257f419f071ed5269bf3c2662cc3a08 100644 GIT binary patch delta 3697 zcmV-%4vz7GAb}l_Gk*>^NklbMn)B5rjTDcXv4p_sA++>!uENJvP?cK376 zJAb_ACYO+qL}s4P=gqx0?>X=J{oZGJpZ9r>;K)TdO#=+4X@40lEwJlcEm>0#gHfsV#?Imw-m^Y=@?d9$9kVQSRG{x*Fz;JhMd4 zn-Rw4*A)ch!7zmLM-!Myi}o#T)W2149dL&?|8}3e_1&)JYJqLS(1}1j@F3 zKycpFv1Ql$+V2@ts#lcE9j$rty65 z4Nq>W+6uIzG-3`$VkiUz%3K0K{*uW>CoJ{0Jw4^>Nx~cU^bT)Z;Le8P)8W82=&S*e z_F)M{r@_>lAQpi@5IR1CO*esUf+k2tOm^J6T|O7jS$6l1mi0g@(2epB`w&z^Bp^^G z6LP_bHGkh8bIasF`vv7!PePaua%n;F9GHGHa{U_Qt1DshiD-+ig7+^5-3v!u2u%f8 zE3N?HXuuOhyKOaM!Wj7LBCwJm;OnQqW>=$Ue}C&Nw2S@)D(`}d)mT3}2{irSCrBGi ziFVy1h*B^7^S59aMCzmb^YPlcd0Ud_cbaA$a9|)3df$I!fOi2Qmy6!+5jIPP@!N%=GKRgV>e@4bn=@&V-P zyTIk@e*{f~Kpx`6i?AQQ9_#_l7y$X@W<=q1guWdBZ=Q$Tao+4x+O&#Qb=@0K8c5N{ zskK9gLPtfL{Htb7I(14(`<(oWJY_P{hJU&5Vf|<(a@*e&$bm!%NW=jaoRnaj_t_yJIW3M2?I04|?F zeqOAgqI66dDk}D9A(Maxc!8XMpMN&;`xBQ;)Uf(EUiGtRSKf>$KaoTF`V&oe?0*oA zNgM5=TcG77D7y$we;ZDE6=uH;qrMBar1bL1+>{f$6v#(ei4Ga6aJ~nCyc61Me(Vla z^!C_EC_EXmMnUDT&=#Eq1&?A~G8y#DA^MS2Tm^uE(IdY9bHu;h2>TncmVeHI#DDf= zB;umm&_W?Jx+oW&r=t8IfJy*UX$_>!CwtNKu@$+c0i(wXbq~z_8}c(9d+n#l+M}T0 zJn)<7Z$=Q`T?A%oV0^J|2J`{TM7#0)7ny|@DFClevr!;;d=T1UC zdK22>yU_pKjwqk0qDZC)kkKx1c@70Hbo9roke|GTbxuCAx%SYN8sNY_$esw&B78z2 z|7tcYL9J09G6H#;Kroz&m3za^12qG=wGuoTCLkpkZt(fAUt5WF-hT+}KU{-$?*_C# zY=%hmU;y3i;Lkefelg=r^p{$&uR0mI`5o~4`_~XCZG2t{x)&p0;7%m+bX^ak)+#-d zfCuo0jA$X6qw<`|$hG$zCXNd*4CMM%SPO#i@f+ytVu+K^1JhKN)7gdyk5-pkCfd^b z;Kcb@=Y)`{?ty{#Jbyw%e)$iT=~@y`mf@OIkX?Y9a6{wZ9hTQ$;1yWTjE|g++_h!! zhaf;m>}T%8S`a`?n1=pHrOI6DzJT#l5v4QGSMR}o`VQpEpZ9Mr{SGaVjWys2gDnY` zW(j{X7IN?!X$_<|S_eKqW33Rj#?LldAd9nX^JNAup(SKiPg#043rS~J|FUI=e zScnf{*856(Gq{x*`U-t`-EI#mW6(3BkPhgYN9zsSp0L^z4OeW5)CF?G8pN!5YAwhu zLX0Yh)HfJVH&jXj7+xJ|S-OK)q)jOODWsXFf#n{2oU}*@Wiue!2!NfkGLuN5(OZ|1fJ{YgloLy3r$bn90f@%Y z&c6ZuwN`lVS*(jok$bBVp?qYt0}L0|tqZZQnS-`!EBftgAr>7x(UUgXDd$3L9{}lXzSN;qds{2pRv-7|kBfYS7R(HvW%b$d#1Z4V-bj8f-vV)yHH#fWu zWyki9+B6XrXQ02@i3sFiEyzWFuvUT3lu#JD`UC<^hiC`(9p_=+I1l}@d(j{M6ftU& zTGee^nSYL%LR+#NHeRNT#n6ZyNZR$?u}+kC+D69gn?Ry5rPZanlT%$@1M1#Jzw;HW z3&umXR}G#t5pym?TlNqLfxUP-a$hZE4X_x6i=kyt|9wJ$OUJt7T+rNTw>*P3Z8jX( z4{a?lW&%_{1bY$y$dpCgFuJ;;u^4KHW~NQZLVp#LV(YZv##w*aJ9YH@F-mP)uSI{W z8Cm-|qF@xbI>F^fe)u}}iltz<4r9ks5lBP_=+7V`Q`mQ$kC-(V?H9j>PnN*f8VH?q zF4eZBjg8@>H^8QdgV#zEFj0l1?k6g1wp|t%a`b{R0trNR!@4sOb_%}KVbT)pcef+g zJ%6phA5J972kaq+PF+WCei!>!ZD?0q163_PCrE1w=ou5_(x{GjYaH-hsN%47 z2m#>0t()s!s(r3T9+U-J2{`^C>_=}p{C{S?uLOeN2@HN+rWgkDh5I3Ey!tJm?)e(- z>j=Dzs-Jc_c|>iO$qPS`aE68p8lDL1g7YD1UeaY+G$zBMs^& zg2scz*

sk4>~tP;e??B z@#n$k4~B|* zUYR8zOk28MPG;{sqpovi(ac36Wrs80~uzz zLKg6?qO>(gzC-hNFpmpu{0kyr?wq zTZ@C{{Hf;`W(CW0&<&x=fVx+mv}m3|qE33hA+Rk;WKS2{R@KK|i2B$6Zb$P*l>gPy zYxfZbI4>JYY%@?5fPY+|$RRQk2wyyP)bz#dpEr71z+ZCCSX|jIge4DOi4y{Jff+Ta z|MPC@KkJIWsO7xBqH5nqs1Vuc0B=GClfxeN4K+BYk5_{zlN#ZW32T~`bIQojxU0tc zzcVq~c$BXwKz4Z!+2gYC7I=FGh_@w(?&+rUiw+_U-RyDa)qmYz8{4q4IkMZ5@&Ib4 z_c_4#qt>HAk6VXxPOPCS0X`rEtBeHdSLvve7$`~rAX>$O#piU;!XT|*&U#>$S2UWB5Iz)AP ziv{V>Y&pQvd1_a?L*RfzCdx2hJNTyWN@No8qM}v6A(bXz(EB0?^zQmhdf$_XI4wS0 z;73Xz^Zs;E%#{H=J^TH=tzx6JkZvYJe63(00RLAa`n0~|%Z$&=c0}^Oh3JN0`U3Px P00000NkvXXu0mjf&FCUU delta 4084 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 mH3dhmUs0lbuvcs<$NvLwtCmDV|5@+=0000zd diff --git a/extras/JuceDemo/Builds/Linux/Makefile b/extras/JuceDemo/Builds/Linux/Makefile index 31decfca9c..5e28e20de9 100644 --- a/extras/JuceDemo/Builds/Linux/Makefile +++ b/extras/JuceDemo/Builds/Linux/Makefile @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! ifndef CONFIG CONFIG=Debug @@ -66,10 +66,20 @@ OBJECTS := \ $(OBJDIR)/WebBrowserDemo_be24b7bf.o \ $(OBJDIR)/WidgetsDemo_9419b474.o \ $(OBJDIR)/BinaryData_ce4232d4.o \ - $(OBJDIR)/JuceLibraryCode1_682c927f.o \ - $(OBJDIR)/JuceLibraryCode2_683aaa00.o \ - $(OBJDIR)/JuceLibraryCode3_6848c181.o \ - $(OBJDIR)/JuceLibraryCode4_6856d902.o \ + $(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o \ + $(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o \ + $(OBJDIR)/juce_audio_formats_wrapper_994a82de.o \ + $(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o \ + $(OBJDIR)/juce_audio_utils_wrapper_e9783ef3.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ + $(OBJDIR)/juce_cryptography_wrapper_8b556353.o \ + $(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o \ + $(OBJDIR)/juce_events_wrapper_a8dc8280.o \ + $(OBJDIR)/juce_graphics_wrapper_a0e77172.o \ + $(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o \ + $(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o \ + $(OBJDIR)/juce_opengl_wrapper_74bbb916.o \ + $(OBJDIR)/juce_video_wrapper_fcc67966.o \ .PHONY: clean @@ -201,24 +211,74 @@ $(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp @echo "Compiling BinaryData.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode1_682c927f.o: ../../JuceLibraryCode/JuceLibraryCode1.cpp +$(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o: ../../JuceLibraryCode/juce_audio_basics_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode1.cpp" + @echo "Compiling juce_audio_basics_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode2_683aaa00.o: ../../JuceLibraryCode/JuceLibraryCode2.cpp +$(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o: ../../JuceLibraryCode/juce_audio_devices_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode2.cpp" + @echo "Compiling juce_audio_devices_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode3_6848c181.o: ../../JuceLibraryCode/JuceLibraryCode3.cpp +$(OBJDIR)/juce_audio_formats_wrapper_994a82de.o: ../../JuceLibraryCode/juce_audio_formats_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode3.cpp" + @echo "Compiling juce_audio_formats_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode4_6856d902.o: ../../JuceLibraryCode/JuceLibraryCode4.cpp +$(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o: ../../JuceLibraryCode/juce_audio_processors_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode4.cpp" + @echo "Compiling juce_audio_processors_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_utils_wrapper_e9783ef3.o: ../../JuceLibraryCode/juce_audio_utils_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_utils_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_core_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_cryptography_wrapper_8b556353.o: ../../JuceLibraryCode/juce_cryptography_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_cryptography_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o: ../../JuceLibraryCode/juce_data_structures_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_data_structures_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_wrapper_a8dc8280.o: ../../JuceLibraryCode/juce_events_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_wrapper_a0e77172.o: ../../JuceLibraryCode/juce_graphics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o: ../../JuceLibraryCode/juce_gui_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o: ../../JuceLibraryCode/juce_gui_extra_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_opengl_wrapper_74bbb916.o: ../../JuceLibraryCode/juce_opengl_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_opengl_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_video_wrapper_fcc67966.o: ../../JuceLibraryCode/juce_video_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_video_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/JuceDemo/Builds/MacOSX/Icon.icns b/extras/JuceDemo/Builds/MacOSX/Icon.icns index 7763077cfb955f531f4e66a85568f41f7c75ce89..a1d2ba8423941483ac31efaf090732faf70ae952 100644 GIT binary patch literal 81944 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%0DPVM z6awn|M>X%zcjS}@Dk&AE?YejB?fp8Z#|GWF0L~@AIt@eOTXh{cX4(tqZPBjW-yMH? z+L%GzS|^4zuIs9s9*KMX4@3Yf&=JXPd*x1;wdi8GJG=1)7v7pNerT_@DNX$9yE)xZ z1|I)VasFRyqlaP{-qlZN-{&>|)XWmpE;S2(~DysIq0=sIBZT@O{fAzX9! zl-v8|SSoOA6k!z+p#)AOF4_-C6&1$NU-Nb8l&% z8jTXT8){D!3P^!k^%|o9t8?EGlV&aW#riHc{W<@MnG=Tf>6jK9+|Z+#3OvdH3(yi; z<@6glY1X3^v?OtD`MjAEhxhH2-ZZokB;O|SbsRtou>db3DYHwz5tC*<@ZO&{J>}~^ zJp0}QGbfJdo0B1{-)@wAg?@5?UV!KyDF-ld#(ggzE3Ylke*O1-GbRl0m(wb-`0777 z4Ak7C2+oTG$mu(L{Iogq^2(=)F0Pw9XWIB-ec8Pqs~-!S9mCx9w_pKQfMNixI`_#P zd*|H`t}KsBd}i^3ci%Z?XrE3Qi4p!@B~*V}Fn~P|z(7PoddFJ^-!Wy@{fiFYtV3Wr z{OO)7tkKFmmGbIZtjpax+Wg7mj}O_?&4IM)dFA z9u?ren0;}qf1MIk11|3MeL`bXv%2)n9W!X01BiGU)b+)9!iTspW^tk{vN0T0Z}QyQfXOeNeBC8A(w= z*a0ASVO;N|xOZ~r32M*-A`;Ttckh=wX3C5?55BNuPiePdT-v?t`3L9Bm^?bSU$=H? z@e%$F>S6~(8Fryqw!X+62(3HaGGN5GDKqCh_|(EuZ3H>J@$CiZeahJ31A2AJOo<8g z^^%)lY!B)Ho(MAz{7XF%wz}c;?w_j*XvyArL^by>1|GXz(T9RK>ka~Q};+Gc8yZ;{9d!MfD z)0;(y`l{V0g>PT-CkqWc8wEtfrDSAd1S7^yo;Lg52jeXc%^7b4!a`KGcPX2me zSN{5CuRb|{?gRJEo;GRBh(Ue2wa-YA8<5Jr`^GXhod$CIRU}5xzH6U>!$(h;I(^nX z_ul`&Lk~YZciy~tkFeo&?!yl~^uYc1-ZN|Z)Cr@959r;Mz3UsWZf5t9J^~DYn~>b= zdHV#(5p=nw|IiVm$4{Di*YugQX5W4HJ#%Ec=bpP~&z?DB`dw2ejUPQ?$Zfs4v_tQa zh7D*XW83x>L;*Md)${hn7PRE_tWMqg^dCHIILrJbBWjiQ~tQ z9X)E~u)+QNbnldv-i&kiu2=32c(llB1lR-@o7AFJ+fH43_U_w%z@WiHb909cXB(C~ zbm-tg18(cvyJy!_#M~7!NCii3fUW0+-M2v@*n1ll9TOWHr?=SHnCK|% z!3_z*4qUH#6}$cQIu5u2*bTdny&7=uvA=&nKwuDCU_gMsKldOv@WKvcw+i3>TQCBB z_jN5d_d3{m?de&+zL(zW*Z1_SSJ$HswqO_Rz*eZMz*ox#a7S!D$KG>S*IKpQ^j51D zH=#RY3%X-vZU0u&;25f58#*?@J37{|G`z*uckKGE#NF>|0P+>1U_*bh>7UAI;Pe~* EAODerLjV8( literal 81944 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 diff --git a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj index 19b4118261..00da5cfc2a 100644 --- a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj @@ -42,10 +42,20 @@ F5691895ACDC7B12DE88EFF4 = { isa = PBXBuildFile; fileRef = F2EB42A070E349D77ACF77C9; }; 4D5C0ED42C87FBE02A9C7BE6 = { isa = PBXBuildFile; fileRef = CF7FFEAFF4F386ED4DAED523; }; 80926D2B83ACF680958111EC = { isa = PBXBuildFile; fileRef = E6EF5CE04768BA5B10050D51; }; - 2201A04DDCFC361882F8EA62 = { isa = PBXBuildFile; fileRef = BA05C84C3258A1978AF3D357; }; - 2E98B1DEA8B7FC20ACCD2E6D = { isa = PBXBuildFile; fileRef = F42C91375F3314CA6EE65697; }; - 3A2EC17F8472C338D6A26278 = { isa = PBXBuildFile; fileRef = 4D526A336B2E97ED42CADAD7; }; - 36B5D100604D9A300187B773 = { isa = PBXBuildFile; fileRef = 8679333E781A0A0116AE5D26; }; + A4487956E52164EADBA0ADCE = { isa = PBXBuildFile; fileRef = 5C624870420A64817375E80C; }; + 6DE05ACEA26AB4EFA74D938A = { isa = PBXBuildFile; fileRef = A256BD38B526BD31BCC8CC46; }; + 6ECBF325EDA0A7AA33F7BD1A = { isa = PBXBuildFile; fileRef = AAA6022D779D9196AC995FAD; }; + 84C6BC024FF342D8A5A0C819 = { isa = PBXBuildFile; fileRef = 5CD2FFD07885CB23EA96439D; }; + 75AC5AD23DEEB9A0F47C20FD = { isa = PBXBuildFile; fileRef = C43C0FEA8C6649389137CD6D; }; + 260742CE2C8B22CDECF9F009 = { isa = PBXBuildFile; fileRef = AC0F0D8E68C280D7DA3CB7AE; }; + 8CC5384DA09DDA47D2821BA4 = { isa = PBXBuildFile; fileRef = 556C3FF5D74CD58C26FD4715; }; + E6506BB8B2D8A35B5199EFBB = { isa = PBXBuildFile; fileRef = A6DAC994119AA21BF2437B2B; }; + B051345886CF7C536C24768D = { isa = PBXBuildFile; fileRef = 4DE24B6BF0BE9EDD0136088D; }; + 913A0AB6A02BD387501CF6BA = { isa = PBXBuildFile; fileRef = 0676086AC62A9C4965AE1DBF; }; + 72B85CFE6809DE026C8BEAB0 = { isa = PBXBuildFile; fileRef = E8F179460A78DDE3B2515B00; }; + 7A762EB5EF0E15225A5DAD4B = { isa = PBXBuildFile; fileRef = 1C68AD2D46238734918891AA; }; + 6F39D6A482BE49E186E21477 = { isa = PBXBuildFile; fileRef = 0939766A2E18CC049FF79A30; }; + C015523AC4E5FE040F694CA4 = { isa = PBXBuildFile; fileRef = 9C72A7954ADF4933B43F5905; }; 7B6D428682221857EAEA1C7D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 6A7D4DC561F2DD95ABD76F0D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; 2B37CDCFCBC0AC0AEAA9A479 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -98,14 +108,806 @@ 013E12213AD7B4BEB28A31BE = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce.png; path = "../../Binary Data/juce.png"; sourceTree = "SOURCE_ROOT"; }; 3369CDF7AFD79D6F3B3744B1 = { isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Binary Data/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; C7327AD5191A22C1FBD4F5F9 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = treedemo.xml; path = "../../Binary Data/treedemo.xml"; sourceTree = "SOURCE_ROOT"; }; + 0210E40B65CE048C4D36CA7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C821CC3A0950A31EF07DCAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 28882231FDF17BE7154FE360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BF77641EFE8CB0975D4D467 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + B4495A353F3CAC7E1B0000A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 301005DBD15F650B925EDEDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 01EF127F367DA465F4C50F3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19DCA7F10F92814CF496AE38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + 75AB45B6383BFB920338F572 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 906DA445B4A0A9F7C7216579 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + C8C8367D1B7CA8FAB5C05637 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAFF320FB0F6088D8B72756B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + DCE46E3AA7D4477AD8165EFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 20726FD9F586FDE2CB429018 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 4E2C80547331D16C83FBDB63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + 6C0AA8ED7FE8C9879A322412 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26B6D558D9137A29F45FB313 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 3E51EC554FC0A07C1B762635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + D7A9161F6375DBD2D130AD33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 53BF5949EF368899AD4219F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B71FFCBC90081EC2AC7F8CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 652D751023C273215CC0F8D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A43CF3495BBB318A512E42F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 949FD08C39A395578622C884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C2461096CE5EA786A2F1E44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 8D95BD84486AEE72542E9D63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87B11CBD7F342D5AEA2A28F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 9B9AEE086C746E112EB50ACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 637A9CE3F17B6F72A5AAB7AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B08A25F990B3E7F37BF6A09D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 36C6813CCC38D0B8A95EC0EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CD17B6EAE1ACCDA87C49591 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 62BE59B9387C0717F60E8448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4297D3C9A6348BA224516847 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 86ABAADC7C86707CA168CA76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CD41473CA9951E5CEE2D7E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + 4BE9943D2BC3C60AF1AB241B = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + C48B01F7A9E1E059E313800D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + DDD45D9F6A6D78C4B4B274B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 548A30B1228458B693B9DD31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02C4FC5BDDCE845CCFE68108 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + AFA675B08A83E39ACD993256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4871CF72DFFB887451CE0D6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + F2141D8FF9DD47EE47289FD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + A206EAEAD3DF98EA82D5BEDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + 2DE4C2FA24465BACF11FC983 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 28AA02AD8E42F94D4D5345EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CEE98E3CE0E4A4174DE758D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + 95D5268551B694DDCE4186E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EB7CB398E4351B57247E649 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + B1D78C7DCB4E12FA062FF78E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 606271132A4EB371A229E0F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 755E388ABB2E0ADDE49226F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + ECCCEA377EEAE851FF35192D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + C73738EFC3DD7E725508EAE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + BDAABCE63FA7D1C2E989A2B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CFC484782F87154A1E75E40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + AD7B08CFB366A42332743423 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADC1AFDEA18BB2EFDA336B45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1EF9281E482B968EA8D4779F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D9251031A81B5CF2C843B47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA13FB1DDD68737542D98575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94DA91E8B082278F9A14CEFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + B926D464232B3BB1DC3BF3AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 938E19CE08914DFECEB7AF71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + D5A78FE1218ECC63124F8C92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 40975D2693E29684206C6505 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46223CF51A61C2ADC95009FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4EA3DB7587F630863A3693EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + E747D14FFAE7EA755A30B3A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E3DBA9F927667BC386A432A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + E242FD47FC44715A8593F3AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 588AC92B54989307FA16D710 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + 423E61161E465283730659A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 32268D55B7C74F4C101AA624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0ADCE1D14A449540F7D389E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 08FF0AD4801B146598F82D3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + 402576A746E2BA7883567D46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADC2252BD2D4F5538FCD9A00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + C901F12BE7634A7950548BCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 95C2A72AD5660572349E8B5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + F277DFB8EEE55D4937FA15B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 9058D37AB7D849D9B4676199 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 67AFA6333F63AD3B994993D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 3344A70FCDD784B37DBCC158 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + C814A111027DAC7F98798B2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + 377B969B90C21A3445C32FCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B522C55AB3A354D0EE770A71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + 41F181DACB4616FB2992756D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97481FA6736B14F4563FB2B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + F5CA0326AE54AD7152D9306C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + C39A8E1CC1B396BFA8254AC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 49CBF9DDF116C8581023EBD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10E25D20492F4DE177DF13D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 393AD0788AD728AE54428DCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E3A201F6EE63BC96C267FB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + FB94DF90C3B5625410089C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + D207DF5DA47AD3BB2AC008F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 7DF71E1257C51B571ECCD382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8AA9660180935779F2928906 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 6A84B1461BD5AD2E6CC463EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 810A49611D6D71936E7DEE5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 3554034E637CD420C22AF83D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1D0A5377E6D29C302BE09B5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + 3FEC5385AE95CA8192259DE8 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + DEE1FD0F518F4FE4ECBB9BFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + 979FD7AFFA113B4620DF71E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_formats.cpp"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.cpp"; sourceTree = "SOURCE_ROOT"; }; + B98541A5F98F5772D0D11A6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + F68B0F7EACD404EF4902D824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; + 240BD288F3408B117610BAF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42A858AABE6C264E35C506E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + C295AF7C201872B2F8BCE38C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E74D2B5966EDE613BB66F969 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 65AE892960E70DFFA91FC34F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CCF82CABFC7CD3828EA514E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + 350B3D6B87D3C8D2A89DC50E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0C2DF8EA8D21C76B535979F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7613C889F6A6284C8777083A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + B6F6E1B709580F82EF36963E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23AC4110CCE22DCB266C76A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; + 08CFF5E6CA0AEA75B829BDCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FC8CE63D01AAF72F4EA7EAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 46B03D581336D14F45CB7EF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B8CF62B65C4F32CDEE1EF6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + D2BA720C39A8E1CC1B396BFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 792453B5DBB03ACDD0665436 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; + EEDDE4BB8964782B039EBA0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 5869767E50249CC14AC86D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + DA41D6B9CB2BD0E38F11AFB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; + 95F27D183BDD95B97C36FC84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFDFA4FADE46C499D75FBF21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + AE52FA00D8312201F092FE17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; + FBC575692B67E16268C03F22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + 28DDAC3C82C7CFBCA368A4BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F7B5FC2FB64601A9322847B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; + 0F8BF051777FD461DEA0EB03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1796E2722F7F70338DAA4C25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 69B629403853AA619C94615F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3B2B1189687851319F8D622A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; + C22C2E25C13CE06BEC876609 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + 93D4362567EF7EE249D1F3A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EC01CB982BFEBFC4DE98273 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6331FE7EE3529F53E1D960C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnail.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C0CE77FA09B4149B5A6A10A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; + E5FFCA61985BF889693D5737 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 041FC0A6B3D2D205A44991A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; + 17F0BE5EC80371F744967B0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BCC05514DC58B654A414F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4816BB0A1BEC11A016974378 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C4B164709245243F01E9A78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 4013BE586FAB406432C1BEEE = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_utils/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3DC1260F6F22CBAA444C2E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_utils.h"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.h"; sourceTree = "SOURCE_ROOT"; }; + 24416D5ECA25FC37EAB2BDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; + 063037B8BE557D35FE9427C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9C5AC0DE7DC7C16EA8C93B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 8112661B4861C279ED1012BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 7E5EAA9EA45E5FC33E862D16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 2E85BCBDE3E20ED6F95AE135 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + E7DC7C16EA8C93B20BD5320B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + C8D91126B274C259088DD545 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + BFBA328841E9B5E0EC7E95F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + F1977AA1120CA5B5E723866C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9887417203C79CF75B9F83D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 1E66647BC38F2C05D5822AE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 292DEA7EAE860940C0886B4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 306A320D349DD3908BFFDF9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + E96469EE49F1B1E0CFAA538C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4E8A42564A48135F71101382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 738970A3440A71A1A9718FC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + A32FECD2A064A3D9689F0127 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 2FD33E0F933A7475B72085B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7609129372BC34EBD8AE4EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + C8A82485CBE3D5988E8C512B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74D0EF4A955F1407EE131141 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + D439F0CFBDB20D8BA9936172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9822A2466C7779EAED41B884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 874BD38924B7E497DFFA3297 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 33675B074C152815010E0FCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + D108F0D29C72AB0771056A43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 90113449B6DAC3C7C153DA33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 029E2574F4E658126B28A74D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 37AA83362EA4B4F06BFFE6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + B941BA189A71C84550072449 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 63988C030E5C13E60EF26383 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + FFEBE6C6663339B171BC01FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + CFD307B9919A9E3B96BFEB51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92AE75B3647098CC510466CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + B56E652FAD2C378EA0443850 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 2C33EC6420413E0CAAB7887A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + CF9860B08787A0B22044A248 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + E4F312D3E70F1C175BB5ADDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 1A177071A7BAEC2AC59CA2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 4C3B4219E7C2D68961FC1868 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 446AA543AEE4FE2ED677EC1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + CA63D088C939F2F855ACCDAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 8F30140612FF50387394FB1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 9FFC85C47CA3030875910F8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66F562F4792525F5908CC9E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + E760555233D13A9E2311F88F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + BC977C907C8F4F166CD26294 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 859B0FBD74282AC90C2C402D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + BD4F8792611E3EA1683AFC13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65C23643821D36E650CB1DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + C310445CCD405A3D4FFB54AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + CEBE1F81B541F2DE3D380B19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4B339F9CFE7934EDBD8FFE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 814BAF158759DE67B645C393 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 51E27A8505B842B4B444DC26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 777A30B991A93312852813BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + FB1E1ABCE03A45AE0E5712B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + B3D5338B24558EEDCBEC47A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DD387EC7A13E8463F3433D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 940D28704E70877158A0B253 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + B9358CFCFE279A5311C87CD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + C32FDA9ED5CA1971CD81C4AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2F781D5D214E4B41A545DE03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 1584D44D2952B9331D23F1FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 49516ABC2D374106A500FA5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 6298640CBAB1060EF5913837 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 10BE6CC45D3CA6C96BAB177F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 85AAA6DA2623F294BD833824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + D69EE578699DF38D2BE66099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 34C51F6BB36BC6356ADF32E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBF63FF3C4567CD563E4F7F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + A51FFF092902D75154EC627F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2567CA278A400B52E46FF274 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + D37C48E300D0216359C0E997 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 219AAB4EA20CA4330C81E626 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 043588B891656D382DE0A360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 2CBC1DF2BA7946F26A23C8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8904197F1519076280CEB88F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + 59C8A8FC8D7848C8B0652B36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4D7727B2083AFF3B36C2E677 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 25627AE84B36F28EA695C8F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 206E76A5E95E71C014FAC29E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + FF7D80067E120E8AA687924C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1BB9E81272C486C6052B7E00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + DCEC1BF462468083D438808F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1C0934F874622A828D25A46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 56CE53154BA1FBC3226EC4FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54E57399D7FC53F08FE3F2BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0C168469D44EF7D2926C6511 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D209984601CC1E682FF9064 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0A0EDDC54FF0EB2C6291CDAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54B4AB4059633CE1B324F077 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + A0780B8263E513F71B30E272 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + 5FAE6A5E96433512E674BD05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24E26C50B4A8E832080C5F61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 90D9F77E8E7EDC2E33A7C31A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADF2B1DAC135B68CD4B6720E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 702D6718F50A787997811078 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0E193F77CECB9A00DF50339 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 9C54ED678B0A6FD1DF14A3A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 67244EF4BA80FF0A9154A7C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + FB5BA72259C159D60DBE7E2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 390A4CABF25C731329DA019E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 2B8EBD56EEEA5C143CEA4253 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C973C66571E2962637625A52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9F3E12140129D6EC52A47DD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4B290BEB3D11D0E9D5BD4D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 081A449D053F2047E70010C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 0E0FA96BD552AE3562680054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6198C094148D5D1054FDD3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 22D9A9F931EF5E0F21CDAE40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E5CD452EBDF029F663A98C18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4C6C1B63664AFC984EBB1AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0F291F996C9885194532170 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 661FB5E457C3754FC17308F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F2E6416A52E2766F8821490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + F5C1A8287F0E150BA7CB93DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 941FB4565263F73753345AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 751FAC7542E81A5C433D8CEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFF5C17391E2AF077C7A4BD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + 5539D1BA408B12D138CB9733 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + B6BB75D678C7C4A737059B11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 0C387354D61FD7E6583CCE95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 2F86414308872736499C02B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 674BB7E7F20CCCF99FE1B72E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + F96289D7427562E2F4F1B20C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 69D51183BF7F82628DABC216 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 6AAE8FD78F62E27C954B3546 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1601ABB2AD716AFBAAA7D35E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 25243DD224A90732541E6165 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45ECA3D19E104B60E9D702B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + EC1D81103E0E33A595561271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1283125701BF9E97DEC4957C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + B0036BAED6F079F2B7D06F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E07576AF64364A9795E6BF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 43AB309EA53E6A826CD09B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E561B1E0E55CD49507434F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 89F86C80D4341EAA34A6F29F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 64CAD3312170E5DBE8AA8348 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + BB13144FD3BB91DC15D9AA3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B86DDE93207F29101A473B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + CA1329B5CA25D7E081BAD705 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEC2B87E2DDF944A23018D06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + EDCEF199352F46CFB6617CE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + D95B727C07CF687210A0F6B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 178E168940A70F4C014BB08B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + E890FCD0A70F254FB9A71E1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 622BD07C886D6A0CF184234E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D106B48F1EBDA833E822BB67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF9A8F5E876781E38DAD5437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2A079009E67A9E1060B752DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE99E7177710325DD24D9A4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 73E15D74B4DFFF343958E0C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + DE2F1DECB93E68D0677F04D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + D97D6F12470EB9280F7836FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC28076E92487621AA052C98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB0BCAA2C7B1EB686728A8CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 90727D848E066F87A06E68FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 94FDE3E9C11178E22B2FE85D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 8AC52C8993A3DB5AB950734B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + E2ACFF7A0DD149CF09C2A456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 62AA264130AEB57E8FE894BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 311C929BFDDF15E46F494CBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + FCAE15939C1518C440C3D2FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 09901706BF99A625649A0863 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 117BF51288AF1F231DB2A872 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 13513EE40AD6BAB30E26C88B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + CDA562DCC391C52498536C0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E570649CD01AAD17DBD9E7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D29426872C2E6110E8844E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FEC15CBD8E0402F376B6099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30E571D94DC4ED10C56D003C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7151A764624596455542FD09 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + AD0832D6F3AB6791E69314EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + C48263DD054DE03C909CBBA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D32323BB011BDBFEBF159FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; + 78F0EACFDE571530553B40E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 240587B599BDD28414DCEFA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; + A55CD2FFD07885CB23EA9643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; + 02C9E6DF7AB6EB4B7F1BADB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; + C623818CF3D2E330B204B41C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + B1592D2F30D12C6EFD1552CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8898DAB72C17D587EB057104 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; + 83EC802AE5B66A9550E792CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; + EFA0A385B661B4606A969464 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; + 499ADB134BAF9A23E402878F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 1139186CD1FDF228C071129B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; }; + B9F4F554436877EDFBD4CC96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CA3F6CEC6B33D2D0B03DCA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66018343321C29C9E424FC82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + F8C9EBCAFE42D2A16EDBE2DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE987CF4CE27BDBE2073253B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 1891AD01762292E7727D6F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + EFE6060C0638C49DC5E4F18F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07B57AB2EF2055DDA75A7E4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + D3C2ADD689B7C9675825D7D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E265A40056244CE47403EB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 65FD33B8E2EF0C4A7369A730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 624CC23973A125CB7BCAE2F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + 5F446A96BED7F585F66B9E7D = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 945D72F5A0E0CFF075FFFCCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 19EAA34BCB41071024A248CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A7DCC0474290572A4236A7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + E49D3B59703FBDDB86AAE641 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + CBF95C1BDDC667F72FC76F79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 9175514B7014D5CCE634B3D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 39DE08F9B0CB040518C747C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + A7992C306CEFE681608B13A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 29A38C66311AE71DC91CF439 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 83C95A4C2D86D529D861EE31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 064C101C015D3000DE7E02CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 89EB1136116ECC63BADDBF5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 05E0E331D082358CE4D07D70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 371AC755F11D82A159D53A22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03CFD2B9CA3FE198F657E2A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + D439CA229128977B2458D756 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 70F316EC3BE738FF149ECAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + CECEA2024CBAB3AC35C05B73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B4B91B220814CE75CF05A13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 7CF7717E78F5FEB6D8FB1FDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + 42E7482C8E71FEB9734DEF5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B0443979E3218D57C13F7D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + F068B3F83A99A151939E2A79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01CEE62F1189EA5E9A2381A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 71D5DB9DB6F0B57DD88665BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 643C064BF7A994919C4030F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + A97B19E92B9371F73DD4EAF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + F2E95E2AF9852B43DCBF04D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 343B9539AF1F75DDFDD5537E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F64B7F5C2EDA5650B7790491 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + 0E82DF0F521D54356AC2092B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + AB650D6A05C0704879D92693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 781A769FF7A7799E897E699C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C251E4615E9D4DFE3CE1668 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + C9074051672D1415A2CF0C0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + B8B085A7F4D5C59C7B01937A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 9E187A5A064CC3CD55BA5D76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 1214C104E827417A8EF02092 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 63BC4983AB677B34020A7E14 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 94121F83242BFF073C048DC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + D5538B33BDF1CA0139A0F904 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B8D17F77F2E2E7A2419CB17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + A889AB0F3F5A622CBB251F64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + 2FD607573BF08B2CACCC317F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFD5DFC9F607C8846B87BE71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + DF66BE2358584653924D6B4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83EB81439316AACC5C464B06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 7FD559C1F6C00FF00EDD94CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3948719F9EAE29D2D293B341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + 5CE2273D46160852405330D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 8B52D861ECC6A83BACFEE014 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 43883BEB4043ECB991681E14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 50D7C5B8301E8D8912EACB16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 694D7777B2A07009FC69843C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41B1C5BF544A1431985C1DD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + CD662E0EC25C2A5A8FAC4653 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F14967FE683B5F293223FC34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 50088489EC7B096F63049909 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E1061909F4EDFF8F54E3B6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + B2C10A531A57F19225B4AAB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DBC748317D662A49D782EC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 142C5FEF76D38928C3E85B9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 795D59A21ECEAB395EAA12E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + AA439A3EA1FD07432BB0B5CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFCFD6C11E070C60B03F0E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 88B8ED0AA4B130C1B7700730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + E0FC38D81C2060421DB7919B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8E524F198D43E4EAF7AEA37C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 334C9EC6327C30323BB99980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + FEB4B8DBF84A3E8D011DE6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + B9F3664FF2EA6070BC27BBA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 718D187AB6E9DF560A16ECEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + F737AF27EE6BAB6CF116BB2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 9282B1A67A71ABA32F5D0CAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + C14CB56C9AC7DFE91D4BE8B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82783BCA4DFB1C70D439DDD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + E50E62F86357572BAFCAE16F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8C92D9CD564B783D1D58528 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7D8663E700F665CAAC3054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + BD46AA53CFB52E5B15D35830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + EEB18650B8A4024B5511B962 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 28DB206834B927627974AA43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + FC1F4A2249B0BE8996FEC907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 189E385BD13EFEFE2E08F803 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 97A7E45925158D2DA073A44F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5957CF17600428D9E31F5E56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 0C4E749FC530DB9A1D080E01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + BD4DCC143D6C2DF5D27BB45C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + D0BD6251360BE7490470B7D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A79DF8F31DB68310EA4D618 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 7B23FC432DE96EC4EC884739 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + D94DCFC11C119FF14B1A5FE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 7F6D8BAB910B1A91E239FFC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 847B9959CEE17F7D28A4FBBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 4C5F7BADE443E620C956326E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D36C755D8BA15F5B5159CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 516E73B0C320FE8FD5C28985 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + F83266F6597B96E989CB24D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + F662A560041BAF34318CF6FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8CCC1C5439805F8F2461498 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 76437F9DC1ACAFFD9C4EF148 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 399ECF10BBD29B3C0FDCE79F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 3410FA9F21DC2C7479B4B5C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 2FF1C9B34A5D310E7255F138 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02D8F876F70B8AB5C140753B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C610E2F6133C4C335B52722 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFD3335A18DF9B183D15D28B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + E8D8F996D1A50BBE677256C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + B85981FA35B69A699D517725 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + FDA1E14DC4098AA8A10A7AA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + AB099E74A6260199CAB56B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E9F302DE7570731AF5780DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69133E69A29734D050F5D096 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + B0C1117A4D54308F25AEE311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 7DD0D59FF092E1EEC1512FB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F3662389073C657EC0BA7BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8936E5897F4455B7B8AB6421 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + AFDDFB2983E08695C6CA4C33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 539ACE1B0DF89E7B1FC3BF20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + B195625E3168FAC063ED4AD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA003A212A313C1924302A5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + E3060C6BA42B5BBCCF9EA2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2204FF31FFD65C8884F44F93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + 5CC7E4FBFEB7505786A509E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F3F40A799345E160AEAE247 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 640E8619D3411FD400D7E53A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F27E001D237BB52B607DE0BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 603684B851BE89291AC59B9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 61D4FF10830BBE09885CB8B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + DA376A104E6E88D7B1A029E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 48A8B3169E65395666DBAF32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2195543B341B32DD166CC53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + 1C57184B3DEADC988014F31F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB366EA56B5D73522519775F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 9B5039DB0C21013E554CAF25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0475A1674219CD5F69CCCD4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 50CF2628DC184A8A9F131192 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89EFCDFB088F88B55D089B0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + A5B009D9A8520EE4A5E352A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + A5829E55CE23AEE32B93F99A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + A3BC9AD4B7D7BFD168AC282A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA78762DCE67D140CD73C852 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A59D61B53561AD82205DD9B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4A95DBD3A4DB9B10C9EAB39D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 72CE316BC15E972EEEBAEDAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + D153857C14A4BAEA2419E2D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + DD3C934437272E8DA223EDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + B412F69EC877F8264F9D3E3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + B7C417BDE4BAB6C89A4EED91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54D1B9209178513F34645184 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + F58BC25FBC248CEEA4333F7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 039E9097BCDFDDB20CE31C60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 2146B9FB578039AAB718E5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 83D383C9AE6891C35CE161CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 396A1ABDB8E1374FF2537F22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + EE9E345FB715B1E9B4069F00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74D9E1D09FB0FB0EEFBD3606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 452F808B06D388A7F846AA57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F196E224EF52F32E3CD0412 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + B82096DB8866547441BB06F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23D48F461D6FAA4B583D1EE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + E2BB92E6C329EA535E1BF203 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C1A0D3CD9F76BDE9239F7FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 1CD3E52C9790FD96093F34A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F069D8FED8DD68F6B6A4ED0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + F286546479097D11645BAE39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13F3F329B4F79AF9036CBC6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4FBFF90AEC67D3880A4477EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9F0D485F5A802905E1CEEA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 0123A28567B7DFBBE03539AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F8DE145DFBD4E249C6350CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 8A7E9EE388B957C79C37718D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7332966389E99838048252B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + 182DA026F007BFFF64F6E3D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A7B8632DB9A038F3BD5CB2BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 77C1B68815EA0564CBB5EEA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 083EF9EA370E5409425A7678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07DD4B03D4BE988F37DF5F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 18E52CCD3C28217F4FA9EDF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4D839186E4C1603CE9806382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 102ADC17D5D8AB41AEE563C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAB73D3C21B0040B5E74F550 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + E09FC35A8FC09DBCDA490ACF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 272EFBDDE9EAC44AB1FB29AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 641DEADBC4E42606FA56F697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E32D68DA3B35C30F2526563A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 7F04FB22663B2DA2942F8FDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5DC0AC7F8634C8996D28F582 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 53756A7956431B6E058EFF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 08BC9AB8E942E2A6D06A8ADD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 7BCFBF5D405B179C7A4B314A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + 49B20B6F3A578F255E8EFFEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D5BEF363CA619B0CD32C907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 29020A4D93D4A2481FD8F382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5459E41641F8A8B63EA0C3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 6CCAA9A13BE00D110CCCC6B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DE5176B5B1563D250712B93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 47FE99E8EA120E1F73DFB9C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 162E80F51595D2E7C16242A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + DBB909679AD10C642370F3FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76575E4E6028876F950F1455 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9D7619718D7CC6D72AB2A5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE19C49671936C02C54CA659 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + 5BFB0065A4DD6BE555A5ABEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + DAECE87DC442032D79ADD613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 7546CFED0D976C353361D79A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BDF9D5B5EE2CE56D8DCE877 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + DC8055201A2D303C7F0538CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6455AAF76F63A5AF005B150 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7E8A8FEBC3C474CAE06ADF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9CF257A8792663A43552639 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + F00E622AE37E2DD4A04EE7CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0845481578E95EE156F30967 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + 139218E9D6D5A078FF58A417 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BE9D180A200AC0A15B75E9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 941A44F57D6415E845CA934F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5A9D4C013E87CDC5FBD477D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + E301A3CD4036E6E6038EFD16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00C4E097C1D4856FA6B4DAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 874976F4EA0F753B24438044 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A6B0E06CB2C33F89DDF1F01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 18ED3771E0A50CD816D2A6FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFD90D0BB35E30A29891649A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2EB42F1313E76B86AD2BB71E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80C5E9D58CCC2AE9107FB8B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + 5E17D037ABC657EBA07EAC68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAF4261C2F180AA5B65BD57A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + DC6052DD9293D5F2A39AA190 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47FC20961BAD642A858AABE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + 4180720250D61DEBE80EA304 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7176AC0C1FEF6703947F374D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + C85B784A5706205A94FE3DBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86ED84D148866631928AA6F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 26EEF91657546D70AB7B2709 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9183C2461096CE5EA786A2F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A01B82C705EF26CBB5B92DB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26DB4A3042598E95D58C9C05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 8B9A89E8A056BEAC561A80A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3160432DFC1EAF9FBF7E9564 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + FA4FA2F0710C5B84EB365687 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D744CC449B92F39574EBEF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 60840E1D24EF570F22E09E50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1A66263F1891A0B251C4C92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 7F3C9B5ACFD7F6AAFC09C234 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D8BB02F40FBE5659EE969B51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + D5DE9F5376B6B8DD5AFA7CE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5625C02A4FC4C755CB806717 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 113D26F57B2CD8179632D742 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3584DC98E105FB3F9FF90B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + 554DF8F88A7B831AC92DA90F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BC46CE051B4197498448563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + E48D4A08067E662AEEE3FF59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 32855B677E5C0467E99413C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + 3FB2775062292D1CFEC55DA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + E819A1BFA34BC635026C6693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + C2B4AA6084D771F955E1FEBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EDED66ECB6E9EC80C8E4BE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + 3C0C7225D6B36E61883A5D3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + E358D24FA3B568035930B037 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + AB415E8F30A47022E0AB89D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FF26B1BABF4E560301543BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + B2FE206075F9F778DAECF5A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41A545DE0315B36BE103F0AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + AFF2E7586D4EBC3A9A624133 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + 15CE14DEFD72F75DC92BC42E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 26D55684ADFB9C9934DFFB43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 73A03E444EF58D2CEDE7B752 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + 5EACCAB871208A99BCDE6810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 029FD3B879CAA86E19130146 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + A91FD1D47168A8AF40679AE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF0AE315E203DEC06307AD41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 2D0EF17B91F2CC705FAE4607 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94CA5C61232419F06E94F4F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 65EB1940B412485E03A3D915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4011021A504F57A62C50CF4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + B232A58E5216B61097402A49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C3E354EFAE6CA30DC2B28DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 85C2419FF027BE35D8DD8004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD06118C1A7DB2B815108D33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 3C742E763EA133E3931B5EB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8970E6607ECF286019E9FA13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + 061497E22C4E67CE892F4F87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72494272CE300F994D005659 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + 1F9F7F7F593F3B5592CB1061 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED91C66FD7D982DA1104E76A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D3E05DD199D36BA2B19DC43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3D17CF897668713E7031E673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1BE540AFF33D24BD3E5A288E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4E4309FCD9191B0FC0466DBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9A05E1DB132658212B0E51D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E645981CA10B8D5576462975 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94CCFFC1ADBC264B1DC39887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F11FD718D953943D6576572C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97A506FFA27B3C9801A87CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + F91150E97C6CDADE38C84F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EFBDE96D4211E697F43821CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 65A780DB6EFDB2F599FD2380 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35DA6512F84BA1C3CCDEC3B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2F5535CE15A1996FD473C697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19A9E3B96BFEB51BE10618AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + E1B19480FDBFA900F35AF1FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 85369DC5F12B3D3BC948DF17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C08F186E73B22E591F16AD67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C210F817CF0CB7CA84C761C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 164AA30B09A0724FCD01223E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ECAAB6B5DFBBF9BD0CD5F5A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 13032F93973B9427596CE33D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0F318A914330BA898B89E781 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + A3E91859477E5625D848F9EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + CE82075957F49EFD63376810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34A0FC3D36D12F6B31FDFF1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 870C076EBCABE3DD4EB5D91F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 403B741BE3D2707C1EF69B70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + D8E5F0C498A1B384975AB6DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 14E995251E19AB0690C4A577 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A27BA1448CCC9C8F351B72F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5F8F1FC976C8B55D43AAB52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8CC15CA05556342116EF46B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C374886F4409A5A6A7B80EC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA73AB79171906FDEEDAE61C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FDB212D2BC0152F4E74FEBF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EADCBDD77CEBE6041018ED3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F7DC6DAA511447FA98F327C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BB537F1AE8BD69BAF92FFDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 52DED83FF18C19AA26DB38FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5CDBC5F16FC4C828566E443 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + C40A6FDF64FB9212CDCD61B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + AA12481D838D026D315CEF80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74FFF0E08A2780C78EA13E75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + B4366D212482B2764F1D669B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22C3A8BE42CD5A5B6DF16DC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + F9B8E34C90732BC803EABFD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7256657E1BF8F2F6CE75F2E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B00B363C8CB643119E0969C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 524CDD5D2BD1C354BD5AAAEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 9090B115C3B62A21681876E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F18FCBE1E212F62E3287E970 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 65B3A8348A3D727E95D4C9F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A3D2DCDFE136837420BC105 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 14520843CF276BFDD546454B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + D10138F57CD1F48313E51610 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 424B8C2F15294922CB0A996F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + 09BBBD942839218FF8866B9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F13046936284D70C57621E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E4282B4BE7CEE1624379D62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + A1A18D8E9DCAE8D88900F297 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 3329CEAB7BDFC1F89DC2E652 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11F9A319F9C07F2071858B86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5121C279B202678849697048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 623CF7B0989D67045AE1665C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 2726421A3D9E25791FEA1CE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 299A52AC1688030D6F159B75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 315A2FF7CE056C02D2756437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + C117B9421807FD3ACD799FD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 8E6269D284D4C7E1E28121E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + D0256D08B11506D28F7FEFDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 048A5D3CA1AD56E75971FF98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEEEBDF5A079C2E492F466A5 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + FCEFF51F85E96360B6408A26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 964F76A26C5E1D812D77CD01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EE1E79E90B11F4B8956CC91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF57713844F7A5A1E697DE85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + A2CF12B19E4614F09660FD3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B383BD0C47E6BBAEA15740B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EE074728350828C88A5A274F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 8F41BB38841B484EE63AF6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 16B4B1BD53E04B6C655072AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 139A0F904A7A5CF7BC458D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0EF4DC413038BDCA5931030D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + E4DC76046FAB005F340CADB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A9E47D07EC9231EE725689C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 444C55DD8EE701930E0119A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D1F3368FBB6EA1B0E395410F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80219C0DFEE068E1AFB77DD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 35B84C6EFEE8EDA81B2CECDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 600485BEE68BDCCF068DFC7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97CAC309C391559FB944B75B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B6D3036283FDCEE97B8B0532 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 79171B6126FF71CEA1AF36BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 221B9433BF8FD422D9E7A306 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28D6521D55A093D390035C46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F0E8E9829E95E32163F45482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F23FA1819D68CFD815296D79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 4431D8080CE9594075F833ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 99FF73EB10EA291A28F7BEE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + 9B68C04DB60D30ECF294A575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + D57E232C5FA2DC3352B2FD60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 4D21EA1C858685693C6B3933 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF72289959650D1177F07F9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 77C5F7D331B1EA06BC33EBE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D3997A8434877DE8361FF40E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 621C0A10B10C7A54D0DFE222 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 2DC640F4EE63B61FA5939678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 303A455D4E0CD6DFF1FD5B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + B15E14ED7CA655AD841D5B34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB79F13A10D15E86A11FB48E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + 5F230AB00C842BEF7F5946EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 828065AD25DD3FA73A90EEE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + EAE1B79B3D4974D15F8A52FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 12B1B8A981AC3A10AAB25B17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 234F4FF80715D9AF48566F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 261A3EB888E5CC8ECC8EE1D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2276FB07A4DF1E45EE4DB845 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3E14DD1434886736A4068785 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + 5AA0BE330B0989B0BEB494A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3AC30A457CF73FFE522F45A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 004FE4B78A89723BD6FE4C83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F84AF9F674BED841E97320A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; + D06619F7C5ECFFF953A50101 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLPixelFormat.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 70CFFFF4235A2AB7832E2331 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4F9FE207892A3218D2CB374 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + DF720978B38045A5B750E17F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A528F1A3E485EE9406C59AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 44D5A8110CE894496E0A7718 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6B7855A37449D2D3664E2F4E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_opengl/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 956EEC0F9A7804692B5AB7A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../../modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; + 922662EF3F4C65D2F0769A90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; + D997ECF27F5E0D8634BB5FAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 53DC83C971FEBE8F42A31ACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 1D2E6D464E81D718E68C531C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; + 35B05701A265D800F245A5C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5405489B854BBCD01B70A2B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../../../modules/juce_video/native/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; + 92BE55DD9B11BF61D051E063 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../../../modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 87B68B1D54430FA9E894EF9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 693D6F5537644C7C53AAEE5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24D2C47DF6190643015D581D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1AE6237B9D0DA652DC6D07E0 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_video/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 94259F4AD89C143A6ACD1971 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_video.h"; path = "../../../../modules/juce_video/juce_video.h"; sourceTree = "SOURCE_ROOT"; }; + 96EEDFC99C39D23D8746C4BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_video.cpp"; path = "../../../../modules/juce_video/juce_video.cpp"; sourceTree = "SOURCE_ROOT"; }; EE37A0ECE471A928C6170F9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; E6EF5CE04768BA5B10050D51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; CC7EB9777A4DE3408705625C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; + 5C624870420A64817375E80C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A256BD38B526BD31BCC8CC46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_devices_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AAA6022D779D9196AC995FAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_formats_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 5CD2FFD07885CB23EA96439D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_processors_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + C43C0FEA8C6649389137CD6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_utils_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AC0F0D8E68C280D7DA3CB7AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 556C3FF5D74CD58C26FD4715 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography_wrapper.mm"; path = "../../JuceLibraryCode/juce_cryptography_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A6DAC994119AA21BF2437B2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 4DE24B6BF0BE9EDD0136088D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0676086AC62A9C4965AE1DBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + E8F179460A78DDE3B2515B00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1C68AD2D46238734918891AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0939766A2E18CC049FF79A30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl_wrapper.mm"; path = "../../JuceLibraryCode/juce_opengl_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 9C72A7954ADF4933B43F5905 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video_wrapper.mm"; path = "../../JuceLibraryCode/juce_video_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; A6B37799E63CCE882A3383FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - BA05C84C3258A1978AF3D357 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - F42C91375F3314CA6EE65697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - 4D526A336B2E97ED42CADAD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 8679333E781A0A0116AE5D26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; 1045A435754FDEACC6D7259C = { isa = PBXGroup; children = ( 0704E2D6B0D1B38FBBBC6B85, D793BFCCD11E218E5CED3320, @@ -148,15 +950,1002 @@ 18BDC68F9701862603871A7A, 1045A435754FDEACC6D7259C, 7B2518B268DCBBF7B74F2B1D ); name = "Juce Demo"; sourceTree = ""; }; + 5F68E4EBF694E51C52196038 = { isa = PBXGroup; children = ( + 0210E40B65CE048C4D36CA7D, + 1C821CC3A0950A31EF07DCAE, + 28882231FDF17BE7154FE360, + 2BF77641EFE8CB0975D4D467 ); name = buffers; sourceTree = ""; }; + 5F182ED7C22B82250FD9307D = { isa = PBXGroup; children = ( + B4495A353F3CAC7E1B0000A0, + 301005DBD15F650B925EDEDF, + 01EF127F367DA465F4C50F3F, + 19DCA7F10F92814CF496AE38, + 75AB45B6383BFB920338F572, + 906DA445B4A0A9F7C7216579, + C8C8367D1B7CA8FAB5C05637, + EAFF320FB0F6088D8B72756B, + DCE46E3AA7D4477AD8165EFA, + 20726FD9F586FDE2CB429018 ); name = midi; sourceTree = ""; }; + 65AF0F10064C101C015D3000 = { isa = PBXGroup; children = ( + 4E2C80547331D16C83FBDB63, + 6C0AA8ED7FE8C9879A322412, + 26B6D558D9137A29F45FB313, + 3E51EC554FC0A07C1B762635 ); name = effects; sourceTree = ""; }; + 127130A5BDDC80D2EFA81AB7 = { isa = PBXGroup; children = ( + D7A9161F6375DBD2D130AD33, + 53BF5949EF368899AD4219F4, + B71FFCBC90081EC2AC7F8CAB, + 652D751023C273215CC0F8D7, + 7A43CF3495BBB318A512E42F, + 949FD08C39A395578622C884, + 3C2461096CE5EA786A2F1E44, + 8D95BD84486AEE72542E9D63, + 87B11CBD7F342D5AEA2A28F2, + 9B9AEE086C746E112EB50ACC, + 637A9CE3F17B6F72A5AAB7AD, + B08A25F990B3E7F37BF6A09D, + 36C6813CCC38D0B8A95EC0EA, + 1CD17B6EAE1ACCDA87C49591, + 62BE59B9387C0717F60E8448, + 4297D3C9A6348BA224516847 ); name = sources; sourceTree = ""; }; + E6D0352F5EEC608B7033A5A2 = { isa = PBXGroup; children = ( + 86ABAADC7C86707CA168CA76, + 0CD41473CA9951E5CEE2D7E5 ); name = synthesisers; sourceTree = ""; }; + 490DD8FEC1D97C2CF18A02EE = { isa = PBXGroup; children = ( + 5F68E4EBF694E51C52196038, + 5F182ED7C22B82250FD9307D, + 65AF0F10064C101C015D3000, + 127130A5BDDC80D2EFA81AB7, + E6D0352F5EEC608B7033A5A2, + 4BE9943D2BC3C60AF1AB241B, + C48B01F7A9E1E059E313800D, + DDD45D9F6A6D78C4B4B274B5 ); name = "juce_audio_basics"; sourceTree = ""; }; + 34CBA7E15A8614DE4047D0B6 = { isa = PBXGroup; children = ( + 548A30B1228458B693B9DD31, + 02C4FC5BDDCE845CCFE68108, + AFA675B08A83E39ACD993256, + 4871CF72DFFB887451CE0D6A, + F2141D8FF9DD47EE47289FD6, + A206EAEAD3DF98EA82D5BEDD ); name = "audio_io"; sourceTree = ""; }; + 5F84142B998D47D4367B3E7E = { isa = PBXGroup; children = ( + 2DE4C2FA24465BACF11FC983, + 28AA02AD8E42F94D4D5345EC, + 1CEE98E3CE0E4A4174DE758D, + 95D5268551B694DDCE4186E5, + 5EB7CB398E4351B57247E649 ); name = "midi_io"; sourceTree = ""; }; + 1C89AAA7C7247D8B5D6BACED = { isa = PBXGroup; children = ( + B1D78C7DCB4E12FA062FF78E, + 606271132A4EB371A229E0F8, + 755E388ABB2E0ADDE49226F7, + ECCCEA377EEAE851FF35192D ); name = sources; sourceTree = ""; }; + 12B982373762043F81FB4590 = { isa = PBXGroup; children = ( + C73738EFC3DD7E725508EAE2, + BDAABCE63FA7D1C2E989A2B2, + 6CFC484782F87154A1E75E40 ); name = "audio_cd"; sourceTree = ""; }; + 2A55B251683A4DD470915CD6 = { isa = PBXGroup; children = ( + AD7B08CFB366A42332743423, + ADC1AFDEA18BB2EFDA336B45, + 1EF9281E482B968EA8D4779F, + 2D9251031A81B5CF2C843B47, + EA13FB1DDD68737542D98575, + 94DA91E8B082278F9A14CEFA, + B926D464232B3BB1DC3BF3AE, + 938E19CE08914DFECEB7AF71, + D5A78FE1218ECC63124F8C92, + 40975D2693E29684206C6505, + 46223CF51A61C2ADC95009FB, + 4EA3DB7587F630863A3693EA, + E747D14FFAE7EA755A30B3A2, + 2E3DBA9F927667BC386A432A, + E242FD47FC44715A8593F3AE, + 588AC92B54989307FA16D710, + 423E61161E465283730659A3, + 32268D55B7C74F4C101AA624 ); name = native; sourceTree = ""; }; + F367C338A5224C9213CB6609 = { isa = PBXGroup; children = ( + 34CBA7E15A8614DE4047D0B6, + 5F84142B998D47D4367B3E7E, + 1C89AAA7C7247D8B5D6BACED, + 12B982373762043F81FB4590, + 2A55B251683A4DD470915CD6, + A0ADCE1D14A449540F7D389E, + 08FF0AD4801B146598F82D3E, + 402576A746E2BA7883567D46 ); name = "juce_audio_devices"; sourceTree = ""; }; + 7545EF2861EC74E7F0701EF1 = { isa = PBXGroup; children = ( + ADC2252BD2D4F5538FCD9A00, + C901F12BE7634A7950548BCD, + 95C2A72AD5660572349E8B5D, + F277DFB8EEE55D4937FA15B3, + 9058D37AB7D849D9B4676199, + 67AFA6333F63AD3B994993D3, + 3344A70FCDD784B37DBCC158, + C814A111027DAC7F98798B2A, + 377B969B90C21A3445C32FCE, + B522C55AB3A354D0EE770A71, + 41F181DACB4616FB2992756D, + 97481FA6736B14F4563FB2B5 ); name = format; sourceTree = ""; }; + B5ED5E6584547689F8D7A38D = { isa = PBXGroup; children = ( + F5CA0326AE54AD7152D9306C, + C39A8E1CC1B396BFA8254AC2, + 49CBF9DDF116C8581023EBD6, + 10E25D20492F4DE177DF13D1, + 393AD0788AD728AE54428DCE, + 3E3A201F6EE63BC96C267FB5, + FB94DF90C3B5625410089C7B, + D207DF5DA47AD3BB2AC008F5, + 7DF71E1257C51B571ECCD382, + 8AA9660180935779F2928906, + 6A84B1461BD5AD2E6CC463EF, + 810A49611D6D71936E7DEE5D ); name = codecs; sourceTree = ""; }; + 6F10FB943DD0E03288A5FA02 = { isa = PBXGroup; children = ( + 3554034E637CD420C22AF83D, + 1D0A5377E6D29C302BE09B5C ); name = sampler; sourceTree = ""; }; + 95CF431E7EE9413FF48C0D6E = { isa = PBXGroup; children = ( + 7545EF2861EC74E7F0701EF1, + B5ED5E6584547689F8D7A38D, + 6F10FB943DD0E03288A5FA02, + 3FEC5385AE95CA8192259DE8, + DEE1FD0F518F4FE4ECBB9BFC, + 979FD7AFFA113B4620DF71E0 ); name = "juce_audio_formats"; sourceTree = ""; }; + 68E50F42BD0F124E89E2CC9A = { isa = PBXGroup; children = ( + B98541A5F98F5772D0D11A6F, + F68B0F7EACD404EF4902D824, + 240BD288F3408B117610BAF0, + 42A858AABE6C264E35C506E2, + C295AF7C201872B2F8BCE38C, + E74D2B5966EDE613BB66F969, + 65AE892960E70DFFA91FC34F, + 6CCF82CABFC7CD3828EA514E, + 350B3D6B87D3C8D2A89DC50E, + 0C2DF8EA8D21C76B535979F3, + 7613C889F6A6284C8777083A, + B6F6E1B709580F82EF36963E, + 23AC4110CCE22DCB266C76A6 ); name = processors; sourceTree = ""; }; + 378ED330774764AA665DB581 = { isa = PBXGroup; children = ( + 08CFF5E6CA0AEA75B829BDCD, + 3FC8CE63D01AAF72F4EA7EAF, + 46B03D581336D14F45CB7EF8, + 4B8CF62B65C4F32CDEE1EF6A ); name = format; sourceTree = ""; }; + 31B0F213666DFF342C2F31FB = { isa = PBXGroup; children = ( + D2BA720C39A8E1CC1B396BFA, + 792453B5DBB03ACDD0665436, + EEDDE4BB8964782B039EBA0A, + 5869767E50249CC14AC86D4F, + DA41D6B9CB2BD0E38F11AFB2, + 95F27D183BDD95B97C36FC84, + FFDFA4FADE46C499D75FBF21 ); name = "format_types"; sourceTree = ""; }; + 4FC748452E42CC700EEE0ADA = { isa = PBXGroup; children = ( + AE52FA00D8312201F092FE17, + FBC575692B67E16268C03F22, + 28DDAC3C82C7CFBCA368A4BA, + 2F7B5FC2FB64601A9322847B, + 0F8BF051777FD461DEA0EB03, + 1796E2722F7F70338DAA4C25 ); name = scanning; sourceTree = ""; }; + 93D8A503144AADF98DCFD0EC = { isa = PBXGroup; children = ( + 68E50F42BD0F124E89E2CC9A, + 378ED330774764AA665DB581, + 31B0F213666DFF342C2F31FB, + 4FC748452E42CC700EEE0ADA, + 69B629403853AA619C94615F, + 3B2B1189687851319F8D622A, + C22C2E25C13CE06BEC876609 ); name = "juce_audio_processors"; sourceTree = ""; }; + CA434F5DF551D188141C868B = { isa = PBXGroup; children = ( + 93D4362567EF7EE249D1F3A1, + 5EC01CB982BFEBFC4DE98273, + 6331FE7EE3529F53E1D960C6, + 8C0CE77FA09B4149B5A6A10A, + E5FFCA61985BF889693D5737, + 041FC0A6B3D2D205A44991A9, + 17F0BE5EC80371F744967B0B, + 9BCC05514DC58B654A414F98 ); name = gui; sourceTree = ""; }; + 0DCD3B0AA20EDF472F63AD81 = { isa = PBXGroup; children = ( + 4816BB0A1BEC11A016974378, + 2C4B164709245243F01E9A78 ); name = players; sourceTree = ""; }; + 887920741494A73F91150E97 = { isa = PBXGroup; children = ( + CA434F5DF551D188141C868B, + 0DCD3B0AA20EDF472F63AD81, + 4013BE586FAB406432C1BEEE, + 3DC1260F6F22CBAA444C2E31, + 24416D5ECA25FC37EAB2BDB6 ); name = "juce_audio_utils"; sourceTree = ""; }; + A6EC4A656C5D7458AC474BB4 = { isa = PBXGroup; children = ( + 063037B8BE557D35FE9427C9, + D9C5AC0DE7DC7C16EA8C93B2, + 8112661B4861C279ED1012BB, + 7E5EAA9EA45E5FC33E862D16, + 2E85BCBDE3E20ED6F95AE135, + E7DC7C16EA8C93B20BD5320B, + C8D91126B274C259088DD545, + BFBA328841E9B5E0EC7E95F4, + F1977AA1120CA5B5E723866C, + A9887417203C79CF75B9F83D, + 1E66647BC38F2C05D5822AE4, + 292DEA7EAE860940C0886B4F, + 306A320D349DD3908BFFDF9C, + E96469EE49F1B1E0CFAA538C, + 4E8A42564A48135F71101382, + 738970A3440A71A1A9718FC0, + A32FECD2A064A3D9689F0127, + 2FD33E0F933A7475B72085B4, + B7609129372BC34EBD8AE4EE ); name = text; sourceTree = ""; }; + 61657E4D7919CD678686F740 = { isa = PBXGroup; children = ( + C8A82485CBE3D5988E8C512B, + 74D0EF4A955F1407EE131141, + D439F0CFBDB20D8BA9936172, + 9822A2466C7779EAED41B884, + 874BD38924B7E497DFFA3297, + 33675B074C152815010E0FCE, + D108F0D29C72AB0771056A43, + 90113449B6DAC3C7C153DA33 ); name = maths; sourceTree = ""; }; + 3183649EE6C758E0BC836035 = { isa = PBXGroup; children = ( + 029E2574F4E658126B28A74D, + 37AA83362EA4B4F06BFFE6E7, + B941BA189A71C84550072449, + 63988C030E5C13E60EF26383, + FFEBE6C6663339B171BC01FF, + CFD307B9919A9E3B96BFEB51, + 92AE75B3647098CC510466CF, + B56E652FAD2C378EA0443850, + 2C33EC6420413E0CAAB7887A, + CF9860B08787A0B22044A248, + E4F312D3E70F1C175BB5ADDD, + 1A177071A7BAEC2AC59CA2AD ); name = memory; sourceTree = ""; }; + 23D4621D6F81D8EB817A3031 = { isa = PBXGroup; children = ( + 4C3B4219E7C2D68961FC1868, + 446AA543AEE4FE2ED677EC1B, + CA63D088C939F2F855ACCDAB, + 8F30140612FF50387394FB1D, + 9FFC85C47CA3030875910F8D, + 66F562F4792525F5908CC9E2, + E760555233D13A9E2311F88F, + BC977C907C8F4F166CD26294, + 859B0FBD74282AC90C2C402D, + BD4F8792611E3EA1683AFC13, + 65C23643821D36E650CB1DD4, + C310445CCD405A3D4FFB54AE, + CEBE1F81B541F2DE3D380B19, + A4B339F9CFE7934EDBD8FFE5, + 814BAF158759DE67B645C393, + 51E27A8505B842B4B444DC26, + 777A30B991A93312852813BC, + FB1E1ABCE03A45AE0E5712B0, + B3D5338B24558EEDCBEC47A4, + 2DD387EC7A13E8463F3433D1 ); name = containers; sourceTree = ""; }; + 420A8DE4E0228CBC3D953B00 = { isa = PBXGroup; children = ( + 940D28704E70877158A0B253, + B9358CFCFE279A5311C87CD6, + C32FDA9ED5CA1971CD81C4AC, + 2F781D5D214E4B41A545DE03, + 1584D44D2952B9331D23F1FD, + 49516ABC2D374106A500FA5F, + 6298640CBAB1060EF5913837, + 10BE6CC45D3CA6C96BAB177F, + 85AAA6DA2623F294BD833824, + D69EE578699DF38D2BE66099, + 34C51F6BB36BC6356ADF32E9, + BBF63FF3C4567CD563E4F7F4, + A51FFF092902D75154EC627F, + 2567CA278A400B52E46FF274, + D37C48E300D0216359C0E997, + 219AAB4EA20CA4330C81E626, + 043588B891656D382DE0A360 ); name = threads; sourceTree = ""; }; + FD3841B531C7CF731597A30E = { isa = PBXGroup; children = ( + 2CBC1DF2BA7946F26A23C8AE, + 8904197F1519076280CEB88F, + 59C8A8FC8D7848C8B0652B36, + 4D7727B2083AFF3B36C2E677, + 25627AE84B36F28EA695C8F9, + 206E76A5E95E71C014FAC29E ); name = time; sourceTree = ""; }; + 998AA364ACE311149F32578F = { isa = PBXGroup; children = ( + FF7D80067E120E8AA687924C, + 1BB9E81272C486C6052B7E00, + DCEC1BF462468083D438808F, + B1C0934F874622A828D25A46, + 56CE53154BA1FBC3226EC4FA, + 54E57399D7FC53F08FE3F2BE, + 0C168469D44EF7D2926C6511, + 5D209984601CC1E682FF9064, + 0A0EDDC54FF0EB2C6291CDAF, + 54B4AB4059633CE1B324F077, + A0780B8263E513F71B30E272, + 5FAE6A5E96433512E674BD05, + 24E26C50B4A8E832080C5F61 ); name = files; sourceTree = ""; }; + 21F975637CEC4E7C450C8E99 = { isa = PBXGroup; children = ( + 90D9F77E8E7EDC2E33A7C31A, + ADF2B1DAC135B68CD4B6720E, + 702D6718F50A787997811078, + A0E193F77CECB9A00DF50339, + 9C54ED678B0A6FD1DF14A3A9, + 67244EF4BA80FF0A9154A7C6, + FB5BA72259C159D60DBE7E2B, + 390A4CABF25C731329DA019E ); name = network; sourceTree = ""; }; + 26F33FD302B44F78DA992FCD = { isa = PBXGroup; children = ( + 2B8EBD56EEEA5C143CEA4253, + C973C66571E2962637625A52, + 9F3E12140129D6EC52A47DD0, + F4B290BEB3D11D0E9D5BD4D4, + 081A449D053F2047E70010C8, + 0E0FA96BD552AE3562680054, + C6198C094148D5D1054FDD3B, + 22D9A9F931EF5E0F21CDAE40, + E5CD452EBDF029F663A98C18, + 4C6C1B63664AFC984EBB1AA0, + C0F291F996C9885194532170, + 661FB5E457C3754FC17308F9, + 3F2E6416A52E2766F8821490, + F5C1A8287F0E150BA7CB93DE, + 941FB4565263F73753345AE8 ); name = streams; sourceTree = ""; }; + 4327159CB80E9FD2CB7A700E = { isa = PBXGroup; children = ( + 751FAC7542E81A5C433D8CEE, + CFF5C17391E2AF077C7A4BD9, + 5539D1BA408B12D138CB9733, + B6BB75D678C7C4A737059B11 ); name = logging; sourceTree = ""; }; + 7006BF00BED99951A91442A0 = { isa = PBXGroup; children = ( + 0C387354D61FD7E6583CCE95, + 2F86414308872736499C02B4, + 674BB7E7F20CCCF99FE1B72E, + F96289D7427562E2F4F1B20C, + 69D51183BF7F82628DABC216 ); name = system; sourceTree = ""; }; + ACAEBEDDA92CAE047F30EC0E = { isa = PBXGroup; children = ( + 6AAE8FD78F62E27C954B3546, + 1601ABB2AD716AFBAAA7D35E, + 25243DD224A90732541E6165, + 45ECA3D19E104B60E9D702B3 ); name = xml; sourceTree = ""; }; + AE4444936C725B2BC50E47C2 = { isa = PBXGroup; children = ( + EC1D81103E0E33A595561271, + 1283125701BF9E97DEC4957C ); name = json; sourceTree = ""; }; + DF737AB7702C8743595F801C = { isa = PBXGroup; children = ( + B0036BAED6F079F2B7D06F4B, + 9E07576AF64364A9795E6BF8, + 43AB309EA53E6A826CD09B48, + E561B1E0E55CD49507434F07, + 89F86C80D4341EAA34A6F29F, + 64CAD3312170E5DBE8AA8348 ); name = zip; sourceTree = ""; }; + 5CB8B1BA24EAE127201D572A = { isa = PBXGroup; children = ( + BB13144FD3BB91DC15D9AA3C, + 4B86DDE93207F29101A473B2 ); name = "unit_tests"; sourceTree = ""; }; + ED6DB2289BFF9CD9EBB3FA57 = { isa = PBXGroup; children = ( + CA1329B5CA25D7E081BAD705, + DEC2B87E2DDF944A23018D06, + EDCEF199352F46CFB6617CE2, + D95B727C07CF687210A0F6B3, + 178E168940A70F4C014BB08B ); name = misc; sourceTree = ""; }; + EB75031D414FF79274E6DCD5 = { isa = PBXGroup; children = ( + E890FCD0A70F254FB9A71E1A, + 622BD07C886D6A0CF184234E, + D106B48F1EBDA833E822BB67, + EF9A8F5E876781E38DAD5437, + 2A079009E67A9E1060B752DF, + DE99E7177710325DD24D9A4D, + 73E15D74B4DFFF343958E0C9, + DE2F1DECB93E68D0677F04D1, + D97D6F12470EB9280F7836FD, + EC28076E92487621AA052C98, + EB0BCAA2C7B1EB686728A8CC, + 90727D848E066F87A06E68FA, + 94FDE3E9C11178E22B2FE85D, + 8AC52C8993A3DB5AB950734B, + E2ACFF7A0DD149CF09C2A456, + 62AA264130AEB57E8FE894BE, + 311C929BFDDF15E46F494CBB, + FCAE15939C1518C440C3D2FD, + 09901706BF99A625649A0863, + 117BF51288AF1F231DB2A872, + 13513EE40AD6BAB30E26C88B, + CDA562DCC391C52498536C0B, + 2E570649CD01AAD17DBD9E7C, + 9D29426872C2E6110E8844E7, + 3FEC15CBD8E0402F376B6099, + 30E571D94DC4ED10C56D003C ); name = native; sourceTree = ""; }; + 5AA0A1F94D3BB760E7F0B6FA = { isa = PBXGroup; children = ( + A6EC4A656C5D7458AC474BB4, + 61657E4D7919CD678686F740, + 3183649EE6C758E0BC836035, + 23D4621D6F81D8EB817A3031, + 420A8DE4E0228CBC3D953B00, + FD3841B531C7CF731597A30E, + 998AA364ACE311149F32578F, + 21F975637CEC4E7C450C8E99, + 26F33FD302B44F78DA992FCD, + 4327159CB80E9FD2CB7A700E, + 7006BF00BED99951A91442A0, + ACAEBEDDA92CAE047F30EC0E, + AE4444936C725B2BC50E47C2, + DF737AB7702C8743595F801C, + 5CB8B1BA24EAE127201D572A, + ED6DB2289BFF9CD9EBB3FA57, + EB75031D414FF79274E6DCD5, + 7151A764624596455542FD09, + AD0832D6F3AB6791E69314EC, + C48263DD054DE03C909CBBA9 ); name = "juce_core"; sourceTree = ""; }; + E5B0983F7D1A403F2771C628 = { isa = PBXGroup; children = ( + 2D32323BB011BDBFEBF159FD, + 78F0EACFDE571530553B40E9, + 240587B599BDD28414DCEFA7, + A55CD2FFD07885CB23EA9643, + 02C9E6DF7AB6EB4B7F1BADB4, + C623818CF3D2E330B204B41C ); name = encryption; sourceTree = ""; }; + F89693FC360AED110B092BC6 = { isa = PBXGroup; children = ( + B1592D2F30D12C6EFD1552CA, + 8898DAB72C17D587EB057104, + 83EC802AE5B66A9550E792CC, + EFA0A385B661B4606A969464 ); name = hashing; sourceTree = ""; }; + 5B583EE18BCD9814D77CC79F = { isa = PBXGroup; children = ( + E5B0983F7D1A403F2771C628, + F89693FC360AED110B092BC6, + 499ADB134BAF9A23E402878F, + 1139186CD1FDF228C071129B, + B9F4F554436877EDFBD4CC96 ); name = "juce_cryptography"; sourceTree = ""; }; + 9C65E7F52E573A350DF8E9BA = { isa = PBXGroup; children = ( + 7CA3F6CEC6B33D2D0B03DCA0, + 66018343321C29C9E424FC82, + F8C9EBCAFE42D2A16EDBE2DF, + CE987CF4CE27BDBE2073253B ); name = values; sourceTree = ""; }; + 14943914DA17F0B0C9E11408 = { isa = PBXGroup; children = ( + 1891AD01762292E7727D6F47, + EFE6060C0638C49DC5E4F18F, + 07B57AB2EF2055DDA75A7E4F ); name = undomanager; sourceTree = ""; }; + F260C3BE7A062E1D407188B9 = { isa = PBXGroup; children = ( + D3C2ADD689B7C9675825D7D3, + 5E265A40056244CE47403EB7, + 65FD33B8E2EF0C4A7369A730, + 624CC23973A125CB7BCAE2F3 ); name = "app_properties"; sourceTree = ""; }; + 3F560869028EBE6C40A1A182 = { isa = PBXGroup; children = ( + 9C65E7F52E573A350DF8E9BA, + 14943914DA17F0B0C9E11408, + F260C3BE7A062E1D407188B9, + 5F446A96BED7F585F66B9E7D, + 945D72F5A0E0CFF075FFFCCB, + 19EAA34BCB41071024A248CD ); name = "juce_data_structures"; sourceTree = ""; }; + 0623E1C012A55B0F64F29B60 = { isa = PBXGroup; children = ( + 3A7DCC0474290572A4236A7C, + E49D3B59703FBDDB86AAE641, + CBF95C1BDDC667F72FC76F79, + 9175514B7014D5CCE634B3D5, + 39DE08F9B0CB040518C747C1, + A7992C306CEFE681608B13A5, + 29A38C66311AE71DC91CF439, + 83C95A4C2D86D529D861EE31, + 064C101C015D3000DE7E02CF, + 89EB1136116ECC63BADDBF5C, + 05E0E331D082358CE4D07D70 ); name = messages; sourceTree = ""; }; + 879BD8562CD5B2FF8DE4AFA1 = { isa = PBXGroup; children = ( + 371AC755F11D82A159D53A22, + 03CFD2B9CA3FE198F657E2A9, + D439CA229128977B2458D756, + 70F316EC3BE738FF149ECAAF ); name = timers; sourceTree = ""; }; + 620CBFD69394FE4B51F60619 = { isa = PBXGroup; children = ( + CECEA2024CBAB3AC35C05B73, + 9B4B91B220814CE75CF05A13, + 7CF7717E78F5FEB6D8FB1FDF, + 42E7482C8E71FEB9734DEF5C, + 9B0443979E3218D57C13F7D1, + F068B3F83A99A151939E2A79, + 01CEE62F1189EA5E9A2381A6, + 71D5DB9DB6F0B57DD88665BF, + 643C064BF7A994919C4030F7 ); name = broadcasters; sourceTree = ""; }; + 0C65851AD8B8F72B5022A7A0 = { isa = PBXGroup; children = ( + A97B19E92B9371F73DD4EAF1, + F2E95E2AF9852B43DCBF04D5, + 343B9539AF1F75DDFDD5537E, + F64B7F5C2EDA5650B7790491 ); name = interprocess; sourceTree = ""; }; + 02282B18FC7EF9236A50BA39 = { isa = PBXGroup; children = ( + 0E82DF0F521D54356AC2092B, + AB650D6A05C0704879D92693, + 781A769FF7A7799E897E699C, + 9C251E4615E9D4DFE3CE1668, + C9074051672D1415A2CF0C0F, + B8B085A7F4D5C59C7B01937A, + 9E187A5A064CC3CD55BA5D76, + 1214C104E827417A8EF02092 ); name = native; sourceTree = ""; }; + BD61C84DBF1CFFA5224D0D4C = { isa = PBXGroup; children = ( + 0623E1C012A55B0F64F29B60, + 879BD8562CD5B2FF8DE4AFA1, + 620CBFD69394FE4B51F60619, + 0C65851AD8B8F72B5022A7A0, + 02282B18FC7EF9236A50BA39, + 63BC4983AB677B34020A7E14, + 94121F83242BFF073C048DC8, + D5538B33BDF1CA0139A0F904 ); name = "juce_events"; sourceTree = ""; }; + 86D45CB4B1C570AA6560B736 = { isa = PBXGroup; children = ( + 4B8D17F77F2E2E7A2419CB17, + A889AB0F3F5A622CBB251F64, + 2FD607573BF08B2CACCC317F, + FFD5DFC9F607C8846B87BE71, + DF66BE2358584653924D6B4C, + 83EB81439316AACC5C464B06, + 7FD559C1F6C00FF00EDD94CE, + 3948719F9EAE29D2D293B341, + 5CE2273D46160852405330D4 ); name = colour; sourceTree = ""; }; + D89D9A869B175BE51DBF9DAA = { isa = PBXGroup; children = ( + 8B52D861ECC6A83BACFEE014, + 43883BEB4043ECB991681E14, + 50D7C5B8301E8D8912EACB16, + 694D7777B2A07009FC69843C, + 41B1C5BF544A1431985C1DD5, + CD662E0EC25C2A5A8FAC4653, + F14967FE683B5F293223FC34 ); name = contexts; sourceTree = ""; }; + 481415D34022D5A53E2C7DA3 = { isa = PBXGroup; children = ( + 50088489EC7B096F63049909, + 2E1061909F4EDFF8F54E3B6B, + B2C10A531A57F19225B4AAB9, + 3DBC748317D662A49D782EC2, + 142C5FEF76D38928C3E85B9D, + 795D59A21ECEAB395EAA12E5, + AA439A3EA1FD07432BB0B5CA, + AFCFD6C11E070C60B03F0E7A ); name = images; sourceTree = ""; }; + 92911A747FD880E409105884 = { isa = PBXGroup; children = ( + 88B8ED0AA4B130C1B7700730, + E0FC38D81C2060421DB7919B, + 8E524F198D43E4EAF7AEA37C ); name = "image_formats"; sourceTree = ""; }; + 118C27A77096E86054F70AC0 = { isa = PBXGroup; children = ( + 334C9EC6327C30323BB99980, + FEB4B8DBF84A3E8D011DE6D1, + B9F3664FF2EA6070BC27BBA2, + 718D187AB6E9DF560A16ECEB, + F737AF27EE6BAB6CF116BB2F, + 9282B1A67A71ABA32F5D0CAC, + C14CB56C9AC7DFE91D4BE8B4, + 82783BCA4DFB1C70D439DDD3, + E50E62F86357572BAFCAE16F, + A8C92D9CD564B783D1D58528, + 3F7D8663E700F665CAAC3054, + BD46AA53CFB52E5B15D35830, + EEB18650B8A4024B5511B962, + 28DB206834B927627974AA43, + FC1F4A2249B0BE8996FEC907, + 189E385BD13EFEFE2E08F803 ); name = geometry; sourceTree = ""; }; + B3D2C460CC5A2871A176953F = { isa = PBXGroup; children = ( + 97A7E45925158D2DA073A44F, + 5957CF17600428D9E31F5E56, + 0C4E749FC530DB9A1D080E01, + BD4DCC143D6C2DF5D27BB45C ); name = placement; sourceTree = ""; }; + 0148494282B9DA8092D43337 = { isa = PBXGroup; children = ( + D0BD6251360BE7490470B7D3, + 3A79DF8F31DB68310EA4D618, + 7B23FC432DE96EC4EC884739, + D94DCFC11C119FF14B1A5FE2, + 7F6D8BAB910B1A91E239FFC8, + 847B9959CEE17F7D28A4FBBF, + 4C5F7BADE443E620C956326E, + 9D36C755D8BA15F5B5159CAB, + 516E73B0C320FE8FD5C28985, + F83266F6597B96E989CB24D7 ); name = fonts; sourceTree = ""; }; + 301CB73D485B7EE2DEBE4BB9 = { isa = PBXGroup; children = ( + F662A560041BAF34318CF6FA, + C8CCC1C5439805F8F2461498, + 76437F9DC1ACAFFD9C4EF148, + 399ECF10BBD29B3C0FDCE79F, + 3410FA9F21DC2C7479B4B5C8 ); name = effects; sourceTree = ""; }; + 4F9EF9B91A34AF9114254A57 = { isa = PBXGroup; children = ( + 2FF1C9B34A5D310E7255F138, + 02D8F876F70B8AB5C140753B, + 0C610E2F6133C4C335B52722, + AFD3335A18DF9B183D15D28B, + E8D8F996D1A50BBE677256C3, + B85981FA35B69A699D517725, + FDA1E14DC4098AA8A10A7AA5, + AB099E74A6260199CAB56B63, + 2E9F302DE7570731AF5780DD ); name = native; sourceTree = ""; }; + 25C0C73E871A04B8785A68A1 = { isa = PBXGroup; children = ( + 86D45CB4B1C570AA6560B736, + D89D9A869B175BE51DBF9DAA, + 481415D34022D5A53E2C7DA3, + 92911A747FD880E409105884, + 118C27A77096E86054F70AC0, + B3D2C460CC5A2871A176953F, + 0148494282B9DA8092D43337, + 301CB73D485B7EE2DEBE4BB9, + 4F9EF9B91A34AF9114254A57, + 69133E69A29734D050F5D096, + B0C1117A4D54308F25AEE311, + 7DD0D59FF092E1EEC1512FB5 ); name = "juce_graphics"; sourceTree = ""; }; + C5CD445B22024CD1653D4E3D = { isa = PBXGroup; children = ( + 2F3662389073C657EC0BA7BD, + 8936E5897F4455B7B8AB6421, + AFDDFB2983E08695C6CA4C33, + 539ACE1B0DF89E7B1FC3BF20, + B195625E3168FAC063ED4AD4, + EA003A212A313C1924302A5C, + E3060C6BA42B5BBCCF9EA2AD, + 2204FF31FFD65C8884F44F93 ); name = components; sourceTree = ""; }; + BAECE29E24A168F87BFD6EBC = { isa = PBXGroup; children = ( + 5CC7E4FBFEB7505786A509E6, + 5F3F40A799345E160AEAE247, + 640E8619D3411FD400D7E53A, + F27E001D237BB52B607DE0BE, + 603684B851BE89291AC59B9D, + 61D4FF10830BBE09885CB8B6, + DA376A104E6E88D7B1A029E0, + 48A8B3169E65395666DBAF32, + E2195543B341B32DD166CC53, + 1C57184B3DEADC988014F31F, + EB366EA56B5D73522519775F, + 9B5039DB0C21013E554CAF25, + 0475A1674219CD5F69CCCD4C, + 50CF2628DC184A8A9F131192, + 89EFCDFB088F88B55D089B0B, + A5B009D9A8520EE4A5E352A7, + A5829E55CE23AEE32B93F99A ); name = mouse; sourceTree = ""; }; + 50085463EEB5F8367314CB99 = { isa = PBXGroup; children = ( + A3BC9AD4B7D7BFD168AC282A, + BA78762DCE67D140CD73C852, + A59D61B53561AD82205DD9B6, + 4A95DBD3A4DB9B10C9EAB39D, + 72CE316BC15E972EEEBAEDAE, + D153857C14A4BAEA2419E2D9, + DD3C934437272E8DA223EDB6, + B412F69EC877F8264F9D3E3B, + B7C417BDE4BAB6C89A4EED91, + 54D1B9209178513F34645184, + F58BC25FBC248CEEA4333F7D, + 039E9097BCDFDDB20CE31C60, + 2146B9FB578039AAB718E5C9 ); name = keyboard; sourceTree = ""; }; + FC2131AF37A533ABDD889670 = { isa = PBXGroup; children = ( + 83D383C9AE6891C35CE161CB, + 396A1ABDB8E1374FF2537F22, + EE9E345FB715B1E9B4069F00, + 74D9E1D09FB0FB0EEFBD3606, + 452F808B06D388A7F846AA57, + 5F196E224EF52F32E3CD0412, + B82096DB8866547441BB06F4, + 23D48F461D6FAA4B583D1EE0, + E2BB92E6C329EA535E1BF203, + 8C1A0D3CD9F76BDE9239F7FC, + 1CD3E52C9790FD96093F34A3, + 2F069D8FED8DD68F6B6A4ED0, + F286546479097D11645BAE39, + 13F3F329B4F79AF9036CBC6B, + 4FBFF90AEC67D3880A4477EB, + A9F0D485F5A802905E1CEEA6, + 0123A28567B7DFBBE03539AA, + 9F8DE145DFBD4E249C6350CE, + 8A7E9EE388B957C79C37718D, + 7332966389E99838048252B9, + 182DA026F007BFFF64F6E3D9, + A7B8632DB9A038F3BD5CB2BB, + 77C1B68815EA0564CBB5EEA4, + 083EF9EA370E5409425A7678, + 07DD4B03D4BE988F37DF5F4B, + 18E52CCD3C28217F4FA9EDF1, + 4D839186E4C1603CE9806382 ); name = widgets; sourceTree = ""; }; + 1E4CB6CFA0C59D5A6B162485 = { isa = PBXGroup; children = ( + 102ADC17D5D8AB41AEE563C0, + AAB73D3C21B0040B5E74F550, + E09FC35A8FC09DBCDA490ACF, + 272EFBDDE9EAC44AB1FB29AD, + 641DEADBC4E42606FA56F697, + E32D68DA3B35C30F2526563A, + 7F04FB22663B2DA2942F8FDE, + 5DC0AC7F8634C8996D28F582, + 53756A7956431B6E058EFF78, + 08BC9AB8E942E2A6D06A8ADD, + 7BCFBF5D405B179C7A4B314A, + 49B20B6F3A578F255E8EFFEE, + 2D5BEF363CA619B0CD32C907, + 29020A4D93D4A2481FD8F382, + F5459E41641F8A8B63EA0C3A, + 6CCAA9A13BE00D110CCCC6B3, + 3DE5176B5B1563D250712B93, + 47FE99E8EA120E1F73DFB9C7, + 162E80F51595D2E7C16242A6 ); name = windows; sourceTree = ""; }; + 3FE03B721D4A3A70E3ABC882 = { isa = PBXGroup; children = ( + DBB909679AD10C642370F3FB, + 76575E4E6028876F950F1455, + 9D7619718D7CC6D72AB2A5D4, + FE19C49671936C02C54CA659, + 5BFB0065A4DD6BE555A5ABEA, + DAECE87DC442032D79ADD613 ); name = menus; sourceTree = ""; }; + C94093E3E2C39782341227E8 = { isa = PBXGroup; children = ( + 7546CFED0D976C353361D79A, + 0BDF9D5B5EE2CE56D8DCE877, + DC8055201A2D303C7F0538CC, + D6455AAF76F63A5AF005B150, + 3F7E8A8FEBC3C474CAE06ADF, + E9CF257A8792663A43552639, + F00E622AE37E2DD4A04EE7CF, + 0845481578E95EE156F30967, + 139218E9D6D5A078FF58A417, + 9BE9D180A200AC0A15B75E9C, + 941A44F57D6415E845CA934F, + F5A9D4C013E87CDC5FBD477D, + E301A3CD4036E6E6038EFD16, + 00C4E097C1D4856FA6B4DAAF, + 874976F4EA0F753B24438044, + 6A6B0E06CB2C33F89DDF1F01, + 18ED3771E0A50CD816D2A6FA, + CFD90D0BB35E30A29891649A, + 2EB42F1313E76B86AD2BB71E, + 80C5E9D58CCC2AE9107FB8B7, + 5E17D037ABC657EBA07EAC68, + EAF4261C2F180AA5B65BD57A, + DC6052DD9293D5F2A39AA190, + 47FC20961BAD642A858AABE6, + 4180720250D61DEBE80EA304, + 7176AC0C1FEF6703947F374D, + C85B784A5706205A94FE3DBD, + 86ED84D148866631928AA6F2, + 26EEF91657546D70AB7B2709, + 9183C2461096CE5EA786A2F1, + A01B82C705EF26CBB5B92DB4, + 26DB4A3042598E95D58C9C05 ); name = layout; sourceTree = ""; }; + B0610859340FD533F8B22688 = { isa = PBXGroup; children = ( + 8B9A89E8A056BEAC561A80A4, + 3160432DFC1EAF9FBF7E9564, + FA4FA2F0710C5B84EB365687, + 0D744CC449B92F39574EBEF5, + 60840E1D24EF570F22E09E50, + B1A66263F1891A0B251C4C92, + 7F3C9B5ACFD7F6AAFC09C234, + D8BB02F40FBE5659EE969B51, + D5DE9F5376B6B8DD5AFA7CE8, + 5625C02A4FC4C755CB806717, + 113D26F57B2CD8179632D742, + D3584DC98E105FB3F9FF90B7, + 554DF8F88A7B831AC92DA90F, + 3BC46CE051B4197498448563, + E48D4A08067E662AEEE3FF59, + 32855B677E5C0467E99413C9, + 3FB2775062292D1CFEC55DA1, + E819A1BFA34BC635026C6693 ); name = buttons; sourceTree = ""; }; + C88502A9B91A856FED510539 = { isa = PBXGroup; children = ( + C2B4AA6084D771F955E1FEBD, + 8EDED66ECB6E9EC80C8E4BE3, + 3C0C7225D6B36E61883A5D3C, + E358D24FA3B568035930B037, + AB415E8F30A47022E0AB89D2, + 1FF26B1BABF4E560301543BC, + B2FE206075F9F778DAECF5A6, + 41A545DE0315B36BE103F0AC, + AFF2E7586D4EBC3A9A624133, + 15CE14DEFD72F75DC92BC42E, + 26D55684ADFB9C9934DFFB43, + 73A03E444EF58D2CEDE7B752, + 5EACCAB871208A99BCDE6810, + 029FD3B879CAA86E19130146 ); name = positioning; sourceTree = ""; }; + 33D4E375D98D6BB02FD88818 = { isa = PBXGroup; children = ( + A91FD1D47168A8AF40679AE9, + FF0AE315E203DEC06307AD41, + 2D0EF17B91F2CC705FAE4607, + 94CA5C61232419F06E94F4F4, + 65EB1940B412485E03A3D915, + 4011021A504F57A62C50CF4B, + B232A58E5216B61097402A49, + 1C3E354EFAE6CA30DC2B28DF, + 85C2419FF027BE35D8DD8004, + DD06118C1A7DB2B815108D33, + 3C742E763EA133E3931B5EB3, + 8970E6607ECF286019E9FA13, + 061497E22C4E67CE892F4F87, + 72494272CE300F994D005659, + 1F9F7F7F593F3B5592CB1061 ); name = drawables; sourceTree = ""; }; + 97AD50B854BD282AC8A1F32F = { isa = PBXGroup; children = ( + ED91C66FD7D982DA1104E76A, + 2D3E05DD199D36BA2B19DC43, + 3D17CF897668713E7031E673, + 1BE540AFF33D24BD3E5A288E, + 4E4309FCD9191B0FC0466DBF, + D9A05E1DB132658212B0E51D, + E645981CA10B8D5576462975, + 94CCFFC1ADBC264B1DC39887, + F11FD718D953943D6576572C, + 97A506FFA27B3C9801A87CC6, + F91150E97C6CDADE38C84F1C, + EFBDE96D4211E697F43821CD, + 65A780DB6EFDB2F599FD2380, + 35DA6512F84BA1C3CCDEC3B7 ); name = properties; sourceTree = ""; }; + E2AE9DBF82B5981BC7BD1E6F = { isa = PBXGroup; children = ( + 2F5535CE15A1996FD473C697, + 19A9E3B96BFEB51BE10618AE ); name = lookandfeel; sourceTree = ""; }; + DB2116783E0CB1C53295AC27 = { isa = PBXGroup; children = ( + E1B19480FDBFA900F35AF1FD, + 85369DC5F12B3D3BC948DF17, + C08F186E73B22E591F16AD67, + 5C210F817CF0CB7CA84C761C, + 164AA30B09A0724FCD01223E, + ECAAB6B5DFBBF9BD0CD5F5A3, + 13032F93973B9427596CE33D, + 0F318A914330BA898B89E781, + A3E91859477E5625D848F9EF, + CE82075957F49EFD63376810, + 34A0FC3D36D12F6B31FDFF1F, + 870C076EBCABE3DD4EB5D91F, + 403B741BE3D2707C1EF69B70, + D8E5F0C498A1B384975AB6DD, + 14E995251E19AB0690C4A577, + A27BA1448CCC9C8F351B72F2, + A5F8F1FC976C8B55D43AAB52, + 8CC15CA05556342116EF46B0, + C374886F4409A5A6A7B80EC1, + FA73AB79171906FDEEDAE61C, + FDB212D2BC0152F4E74FEBF3, + EADCBDD77CEBE6041018ED3B, + F7DC6DAA511447FA98F327C2, + 9BB537F1AE8BD69BAF92FFDE, + 52DED83FF18C19AA26DB38FA, + A5CDBC5F16FC4C828566E443 ); name = filebrowser; sourceTree = ""; }; + E2A1D9FE9AC8AFBEB906D012 = { isa = PBXGroup; children = ( + C40A6FDF64FB9212CDCD61B1, + AA12481D838D026D315CEF80, + 74FFF0E08A2780C78EA13E75, + B4366D212482B2764F1D669B, + 22C3A8BE42CD5A5B6DF16DC4, + F9B8E34C90732BC803EABFD3, + 7256657E1BF8F2F6CE75F2E1, + B00B363C8CB643119E0969C4, + 524CDD5D2BD1C354BD5AAAEF ); name = commands; sourceTree = ""; }; + 9DC523AB54117259531D1CA7 = { isa = PBXGroup; children = ( + 9090B115C3B62A21681876E0, + F18FCBE1E212F62E3287E970, + 65B3A8348A3D727E95D4C9F1, + 0A3D2DCDFE136837420BC105 ); name = misc; sourceTree = ""; }; + 17138A6E8BEC1222F139E4BD = { isa = PBXGroup; children = ( + 14520843CF276BFDD546454B, + D10138F57CD1F48313E51610, + 424B8C2F15294922CB0A996F ); name = application; sourceTree = ""; }; + B2979FB3E4771D5805398883 = { isa = PBXGroup; children = ( + 09BBBD942839218FF8866B9E, + F13046936284D70C57621E8B, + 1E4282B4BE7CEE1624379D62, + A1A18D8E9DCAE8D88900F297, + 3329CEAB7BDFC1F89DC2E652, + 11F9A319F9C07F2071858B86, + 5121C279B202678849697048, + 623CF7B0989D67045AE1665C, + 2726421A3D9E25791FEA1CE0, + 299A52AC1688030D6F159B75, + 315A2FF7CE056C02D2756437, + C117B9421807FD3ACD799FD5, + 8E6269D284D4C7E1E28121E4, + D0256D08B11506D28F7FEFDF, + 048A5D3CA1AD56E75971FF98 ); name = native; sourceTree = ""; }; + 82A38CF6071E5CFA563D24AC = { isa = PBXGroup; children = ( + C5CD445B22024CD1653D4E3D, + BAECE29E24A168F87BFD6EBC, + 50085463EEB5F8367314CB99, + FC2131AF37A533ABDD889670, + 1E4CB6CFA0C59D5A6B162485, + 3FE03B721D4A3A70E3ABC882, + C94093E3E2C39782341227E8, + B0610859340FD533F8B22688, + C88502A9B91A856FED510539, + 33D4E375D98D6BB02FD88818, + 97AD50B854BD282AC8A1F32F, + E2AE9DBF82B5981BC7BD1E6F, + DB2116783E0CB1C53295AC27, + E2A1D9FE9AC8AFBEB906D012, + 9DC523AB54117259531D1CA7, + 17138A6E8BEC1222F139E4BD, + B2979FB3E4771D5805398883, + DEEEBDF5A079C2E492F466A5, + FCEFF51F85E96360B6408A26, + 964F76A26C5E1D812D77CD01 ); name = "juce_gui_basics"; sourceTree = ""; }; + BD4E249C6350CE539DFE3B25 = { isa = PBXGroup; children = ( + 8EE1E79E90B11F4B8956CC91, + AF57713844F7A5A1E697DE85, + A2CF12B19E4614F09660FD3B, + 1B383BD0C47E6BBAEA15740B, + EE074728350828C88A5A274F, + 8F41BB38841B484EE63AF6D1, + 16B4B1BD53E04B6C655072AF ); name = "code_editor"; sourceTree = ""; }; + 308FD85F378E278C988848F9 = { isa = PBXGroup; children = ( + 139A0F904A7A5CF7BC458D4F, + 0EF4DC413038BDCA5931030D ); name = documents; sourceTree = ""; }; + 55B87F0D9430051B5EC0F762 = { isa = PBXGroup; children = ( + E4DC76046FAB005F340CADB4, + A9E47D07EC9231EE725689C5, + 444C55DD8EE701930E0119A0 ); name = embedding; sourceTree = ""; }; + BE2FCCC30B254193FAE6BF62 = { isa = PBXGroup; children = ( + D1F3368FBB6EA1B0E395410F, + 80219C0DFEE068E1AFB77DD2 ); name = lookandfeel; sourceTree = ""; }; + CF0BD861011D003482A09E57 = { isa = PBXGroup; children = ( + 35B84C6EFEE8EDA81B2CECDA, + 600485BEE68BDCCF068DFC7C, + 97CAC309C391559FB944B75B, + B6D3036283FDCEE97B8B0532, + 79171B6126FF71CEA1AF36BC, + 221B9433BF8FD422D9E7A306, + 28D6521D55A093D390035C46, + F0E8E9829E95E32163F45482, + F23FA1819D68CFD815296D79, + 4431D8080CE9594075F833ED, + 99FF73EB10EA291A28F7BEE8, + 9B68C04DB60D30ECF294A575, + D57E232C5FA2DC3352B2FD60, + 4D21EA1C858685693C6B3933, + CF72289959650D1177F07F9C, + 77C5F7D331B1EA06BC33EBE2 ); name = misc; sourceTree = ""; }; + 1AC99D3EEE323A04D3AE63F2 = { isa = PBXGroup; children = ( + D3997A8434877DE8361FF40E, + 621C0A10B10C7A54D0DFE222, + 2DC640F4EE63B61FA5939678, + 303A455D4E0CD6DFF1FD5B63, + B15E14ED7CA655AD841D5B34, + CB79F13A10D15E86A11FB48E, + 5F230AB00C842BEF7F5946EE, + 828065AD25DD3FA73A90EEE0, + EAE1B79B3D4974D15F8A52FB, + 12B1B8A981AC3A10AAB25B17, + 234F4FF80715D9AF48566F07, + 261A3EB888E5CC8ECC8EE1D5 ); name = native; sourceTree = ""; }; + EC7A8CA0D51712FAFE014D64 = { isa = PBXGroup; children = ( + BD4E249C6350CE539DFE3B25, + 308FD85F378E278C988848F9, + 55B87F0D9430051B5EC0F762, + BE2FCCC30B254193FAE6BF62, + CF0BD861011D003482A09E57, + 1AC99D3EEE323A04D3AE63F2, + 2276FB07A4DF1E45EE4DB845, + 3E14DD1434886736A4068785, + 5AA0BE330B0989B0BEB494A9 ); name = "juce_gui_extra"; sourceTree = ""; }; + 2AFD87CC8AFD1A446B75184A = { isa = PBXGroup; children = ( + B3AC30A457CF73FFE522F45A, + 004FE4B78A89723BD6FE4C83, + F84AF9F674BED841E97320A1, + D06619F7C5ECFFF953A50101 ); name = opengl; sourceTree = ""; }; + 8BACFE9F54494195BA7FF7D8 = { isa = PBXGroup; children = ( + 70CFFFF4235A2AB7832E2331, + F4F9FE207892A3218D2CB374, + DF720978B38045A5B750E17F, + 7A528F1A3E485EE9406C59AE, + 44D5A8110CE894496E0A7718 ); name = native; sourceTree = ""; }; + E50F4DA1FA6E717AF1876F8D = { isa = PBXGroup; children = ( + 2AFD87CC8AFD1A446B75184A, + 8BACFE9F54494195BA7FF7D8, + 6B7855A37449D2D3664E2F4E, + 956EEC0F9A7804692B5AB7A3, + 922662EF3F4C65D2F0769A90 ); name = "juce_opengl"; sourceTree = ""; }; + 5DE40BF538247E9887297ABF = { isa = PBXGroup; children = ( + D997ECF27F5E0D8634BB5FAF, + 53DC83C971FEBE8F42A31ACA ); name = playback; sourceTree = ""; }; + 5F3D9EA238ADD783EFD1DFE4 = { isa = PBXGroup; children = ( + 1D2E6D464E81D718E68C531C ); name = capture; sourceTree = ""; }; + 834F22276689685D839BD252 = { isa = PBXGroup; children = ( + 35B05701A265D800F245A5C4, + 5405489B854BBCD01B70A2B9, + 92BE55DD9B11BF61D051E063, + 87B68B1D54430FA9E894EF9B, + 693D6F5537644C7C53AAEE5B, + 24D2C47DF6190643015D581D ); name = native; sourceTree = ""; }; + C2D7D45941CBD473DD9BFDD3 = { isa = PBXGroup; children = ( + 5DE40BF538247E9887297ABF, + 5F3D9EA238ADD783EFD1DFE4, + 834F22276689685D839BD252, + 1AE6237B9D0DA652DC6D07E0, + 94259F4AD89C143A6ACD1971, + 96EEDFC99C39D23D8746C4BE ); name = "juce_video"; sourceTree = ""; }; + E5BF48D4F140A322338EE283 = { isa = PBXGroup; children = ( + 490DD8FEC1D97C2CF18A02EE, + F367C338A5224C9213CB6609, + 95CF431E7EE9413FF48C0D6E, + 93D8A503144AADF98DCFD0EC, + 887920741494A73F91150E97, + 5AA0A1F94D3BB760E7F0B6FA, + 5B583EE18BCD9814D77CC79F, + 3F560869028EBE6C40A1A182, + BD61C84DBF1CFFA5224D0D4C, + 25C0C73E871A04B8785A68A1, + 82A38CF6071E5CFA563D24AC, + EC7A8CA0D51712FAFE014D64, + E50F4DA1FA6E717AF1876F8D, + C2D7D45941CBD473DD9BFDD3 ); name = "Juce Modules"; sourceTree = ""; }; 4C2E644EAC72C263D09C74BB = { isa = PBXGroup; children = ( EE37A0ECE471A928C6170F9B, E6EF5CE04768BA5B10050D51, CC7EB9777A4DE3408705625C, - A6B37799E63CCE882A3383FB, - BA05C84C3258A1978AF3D357, - F42C91375F3314CA6EE65697, - 4D526A336B2E97ED42CADAD7, - 8679333E781A0A0116AE5D26 ); name = "Juce Library Code"; sourceTree = ""; }; + 5C624870420A64817375E80C, + A256BD38B526BD31BCC8CC46, + AAA6022D779D9196AC995FAD, + 5CD2FFD07885CB23EA96439D, + C43C0FEA8C6649389137CD6D, + AC0F0D8E68C280D7DA3CB7AE, + 556C3FF5D74CD58C26FD4715, + A6DAC994119AA21BF2437B2B, + 4DE24B6BF0BE9EDD0136088D, + 0676086AC62A9C4965AE1DBF, + E8F179460A78DDE3B2515B00, + 1C68AD2D46238734918891AA, + 0939766A2E18CC049FF79A30, + 9C72A7954ADF4933B43F5905, + A6B37799E63CCE882A3383FB ); name = "Juce Library Code"; sourceTree = ""; }; 019CD423F1EFF7A1A0A079DD = { isa = PBXGroup; children = ( 1A9DEA62F6A3CD1FB5CF105B, 4ADECB09FD213B2E910EA229 ); name = Resources; sourceTree = ""; }; @@ -177,6 +1966,7 @@ 39B98C60B57B831FE5215CDD ); name = Products; sourceTree = ""; }; 1609BCDD8EC2BA2A162B68F3 = { isa = PBXGroup; children = ( D6A4B94A747BFCF299B17932, + E5BF48D4F140A322338EE283, 4C2E644EAC72C263D09C74BB, 019CD423F1EFF7A1A0A079DD, 244B9AF7D858999910FD243E, @@ -277,10 +2067,20 @@ F5691895ACDC7B12DE88EFF4, 4D5C0ED42C87FBE02A9C7BE6, 80926D2B83ACF680958111EC, - 2201A04DDCFC361882F8EA62, - 2E98B1DEA8B7FC20ACCD2E6D, - 3A2EC17F8472C338D6A26278, - 36B5D100604D9A300187B773 ); runOnlyForDeploymentPostprocessing = 0; }; + A4487956E52164EADBA0ADCE, + 6DE05ACEA26AB4EFA74D938A, + 6ECBF325EDA0A7AA33F7BD1A, + 84C6BC024FF342D8A5A0C819, + 75AC5AD23DEEB9A0F47C20FD, + 260742CE2C8B22CDECF9F009, + 8CC5384DA09DDA47D2821BA4, + E6506BB8B2D8A35B5199EFBB, + B051345886CF7C536C24768D, + 913A0AB6A02BD387501CF6BA, + 72B85CFE6809DE026C8BEAB0, + 7A762EB5EF0E15225A5DAD4B, + 6F39D6A482BE49E186E21477, + C015523AC4E5FE040F694CA4 ); runOnlyForDeploymentPostprocessing = 0; }; 2E5F3CCB074AC0B18683A4F3 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 36AEC0EAE7AB9D061AD9EFEF, DEDBEF9AC48F8AD1502B6DC2, diff --git a/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj b/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj index dce0f77a99..4d0495a943 100644 --- a/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj +++ b/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj @@ -215,15 +215,4270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/JuceDemo/Builds/VisualStudio2005/icon.ico b/extras/JuceDemo/Builds/VisualStudio2005/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 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 T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj b/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj index 3838035562..230464f067 100644 --- a/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj +++ b/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj @@ -215,15 +215,4270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/JuceDemo/Builds/VisualStudio2008/icon.ico b/extras/JuceDemo/Builds/VisualStudio2008/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 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 T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj index bf4ac85c0b..c701b03556 100644 --- a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj +++ b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj @@ -144,11 +144,1068 @@ + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + - - - - + + + + + + + + + + + + + + @@ -160,6 +1217,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters index 27e96ed573..d6c56796e4 100644 --- a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters +++ b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters @@ -11,6 +11,300 @@ {2AA5AF01-B73D-17DA-570C-25BCC6A2DE34} + + {F842EDF7-A721-5611-7D34-D687130DB5AF} + + + {7DC92EF2-E271-9A9D-670B-D20E3BB1A433} + + + {953A48F2-5B19-40DB-D4D9-68702D2B7E55} + + + {876A26AF-3F56-0869-028E-BE6C40A1A182} + + + {0C3A88A6-68D6-21C8-3D84-1E4572BED74B} + + + {F310E954-1312-0901-03F2-DB22605C8D01} + + + {C78E3776-E6F7-3E8C-B749-98CBDDCE9B0E} + + + {C1B2B846-258B-F93D-4BE8-2CDB6C5E2C16} + + + {864799B4-25B5-64DC-72D7-01158CD83F5C} + + + {C9AC851B-4BFE-C2DD-2D08-94B0494999AB} + + + {70ABBDA7-2F37-4719-30E1-8CB310419BD1} + + + {04C4BB91-19BF-78C1-9227-341FF418F407} + + + {C47BB9B5-898E-0E88-CF3B-D9CC7B92D136} + + + {25FC82DD-463F-03B2-BA96-D16184210964} + + + {38543AD1-0534-1F95-2EFA-FD144E195253} + + + {668A5ED4-B060-3729-7F33-460E109BDBCE} + + + {07477328-9BBA-154C-8CA4-6B2A88124DDA} + + + {E0B0CD34-242F-5CDC-3B0E-6CA8D2BE8CBB} + + + {76811FA4-16E7-EA4C-F7C3-070E59E4E0A5} + + + {3932B99B-188D-7AF5-A665-E627AF7E00DD} + + + {156012C7-39A4-B321-EB15-BD8FFCF5495B} + + + {EDC253C0-6C50-56BE-FE17-56CC84696D46} + + + {B8D1E68E-A627-9E42-F223-EB098A584CE7} + + + {B55AA805-8BF6-0E87-F9A8-EDCACC5D1AE7} + + + {A5FF1519-1E24-11D7-2509-98A0D42A13A0} + + + {0950B058-AE5B-9D46-7088-E03C444D0F06} + + + {110A03A4-99F0-441B-D5B6-A74FFF0E08A2} + + + {D7459C19-374D-EBF2-B7EC-A8F9DC82E741} + + + {1C45EE46-3117-A859-CA98-06A747CB08E7} + + + {F8C2FA89-B782-8B08-3538-E554731603D6} + + + {DE4B5FB8-422B-CCF8-01DC-56AF98FA4C08} + + + {DD78461B-C718-578D-5B4B-735D64F85724} + + + {84719C40-C884-7A1C-8560-D3D822FDB0E1} + + + {FFAC3930-D516-902F-5C61-08568323330C} + + + {0BC6E7C2-9663-7337-062F-970900509712} + + + {3A35ABF7-E18A-4952-5915-A0E1928C53DC} + + + {5D80F2FA-AB7E-764A-2E18-6592C2B14DD7} + + + {39230F68-000A-4CAD-5D74-84BAF16E272F} + + + {09A609BD-B7DC-31A0-BD9C-E90FE0A4FFAE} + + + {1EE08F66-DBAE-C771-4494-58158DA3E8E3} + + + {F1B39DB8-0626-341D-E4D2-76F34BBBF046} + + + {94FE3E28-3828-47E0-1FDF-8176013BDB0D} + + + {101B74A4-0992-5DE8-5838-A808DDE8B7A3} + + + {81E4430F-8336-03D6-2E23-2F77A449AED3} + + + {5CD34F3A-F35F-5830-DE8A-1732DD84968C} + + + {4749AF67-BC46-FE1A-1907-A872742825AE} + + + {3D58C186-9603-64EB-6AB4-FE4C2582E3F6} + + + {58D114A5-0A45-AFE3-8FD5-91086EC144B6} + + + {092FFEA1-B1DD-E3B0-F622-FFF82E191BF4} + + + {D19F7DDF-AA91-367F-7E78-0F7689139649} + + + {221A04C3-46E0-25ED-0513-01F1DF98B7A6} + + + {39F0D56F-4316-F922-D5CA-85947579494C} + + + {C0804462-8683-F5B4-35C7-0F1AE996B629} + + + {0CAC698D-DB2F-4D66-245A-37F1310CF591} + + + {2A86729D-3CA8-6092-76D1-BBFAB48302BA} + + + {21A9F27B-BCC0-624D-9A36-88B47BD8D73F} + + + {A0F36010-FD26-9A02-A707-2524D866CEEB} + + + {3F824684-074B-B8A4-DC59-9FA2130B8B07} + + + {5086C76D-93A3-F4CD-261C-170B507AA20A} + + + {FB197235-391F-F615-38DF-64E37458A2C8} + + + {C245AE79-C1FD-1BC7-A240-D92685E39CED} + + + {9D69F675-30B3-E489-B83D-093CF74A81E9} + + + {95B19F07-6A2A-E1E6-9BD0-D57C1452FAAF} + + + {E71382FA-04DA-800E-6204-31FD1466270C} + + + {01C45013-2710-FE83-2E3B-5F7681DF9F18} + + + {94AC1409-AD42-20B6-8C9D-C4BC9E583E67} + + + {D53FD225-AF8F-5F19-7248-FA0A994B6E3B} + + + {BB0565EF-1117-CE48-B0C4-960A9CB8DD1F} + + + {16014E24-CC78-5E84-64C6-EE1BF3FDA49C} + + + {F9B05FE0-5C2F-42A8-102C-13F88E77AD34} + + + {8C3E1986-17AA-A915-13D0-4453AFFCBB1E} + + + {79B5AC4F-3FB5-ECA1-8C27-81CE05DEF3DA} + + + {9FAC018F-AB64-231D-97DA-EDC2CB323896} + + + {B384975A-B6DD-4E25-5FFE-3EAB799A5A68} + + + {DE0571DC-7C78-DB94-C2FF-920A5AB6D0FF} + + + {0C9063E0-CA59-B74B-7DAC-7E3C506A8325} + + + {CC50812F-047B-0A05-950E-322525ED72D2} + + + {BE9FC74F-A5FE-100D-1960-43C935C55E14} + + + {88FAEC05-1EE5-FD2B-CAA8-B6518C128B16} + + + {F5A19631-2F74-42A9-6077-9EC22B838128} + + + {91B974D2-D165-F4AB-9CC3-F90CE3247D61} + + + {80B64FE2-98A0-247F-46DB-AE6F0F774E0A} + + + {54FACAAC-45ED-C556-7508-13BC301C7411} + + + {C2FBFCFD-4D4D-D52B-35F5-18D93FB9FE7D} + + + {2482DD44-D4EA-9123-BE3D-4AE300D6A890} + + + {71CFB766-88E6-82E0-FB9D-3472EE482CBB} + + + {F1D1D500-7CF8-2E57-D5C9-A63A02DFE8B6} + + + {FF5C4F31-62C5-0D5F-D004-E8DAA7DA568A} + + + {7883B6D2-68CE-FABB-A6C3-28AE5594E88F} + + + {6ED2E9D2-03E8-CB5D-E6FB-A46F606E8CFC} + + + {0334B933-300F-41D5-DB61-A835920A62C4} + + + {E452BA21-77A6-AB4E-1136-6A411A69F202} + + + {2132A5BE-C307-0FB4-1DF1-3C95B267BF4C} + + + {4DE1B8E4-1197-8A19-85D9-EB034F793326} + + + {742FEFFC-9AC9-1450-ACD9-43D03CB726FE} + + + {CCFDA9A0-A76A-1EF9-F809-4A568555B8F4} + + + {5942FFF6-40C9-66AA-D151-FE08AF4A4889} + + + {886E27E5-5D57-DCC2-F42C-EC2AE2C6607C} + {F7048EA6-F4B2-F31B-E402-E05D678A1111} @@ -100,19 +394,1222 @@ Juce Demo\Binary Data + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\sampler + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\players + + + Juce Modules\juce_audio_utils + + + Juce Modules\juce_audio_utils + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl + + + Juce Modules\juce_opengl + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video + + + Juce Modules\juce_video + Juce Library Code - + Juce Library Code - + Juce Library Code - + Juce Library Code - + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + Juce Library Code @@ -144,6 +1641,1179 @@ Juce Demo\Demos + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\sampler + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\players + + + Juce Modules\juce_audio_utils + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl + + + Juce Modules\juce_video\playback + + + Juce Modules\juce_video\playback + + + Juce Modules\juce_video\capture + + + Juce Modules\juce_video + Juce Library Code diff --git a/extras/JuceDemo/Builds/VisualStudio2010/icon.ico b/extras/JuceDemo/Builds/VisualStudio2010/icon.ico index b5dbab53ed6707c286cedce1ddd8d2e7483ea233..9e457b5e6f161a6da3d7e577369878d60ceacc59 100644 GIT binary patch literal 82726 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%0Dp7sGEbzJu;;m~IP7<^kZJ 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 literal 82726 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 T&9x0wXLXgja7e1F3cC0&3~!3V diff --git a/extras/JuceDemo/Builds/iOS/Icon.icns b/extras/JuceDemo/Builds/iOS/Icon.icns index 7763077cfb955f531f4e66a85568f41f7c75ce89..a1d2ba8423941483ac31efaf090732faf70ae952 100644 GIT binary patch literal 81944 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%0DPVM z6awn|M>X%zcjS}@Dk&AE?YejB?fp8Z#|GWF0L~@AIt@eOTXh{cX4(tqZPBjW-yMH? z+L%GzS|^4zuIs9s9*KMX4@3Yf&=JXPd*x1;wdi8GJG=1)7v7pNerT_@DNX$9yE)xZ z1|I)VasFRyqlaP{-qlZN-{&>|)XWmpE;S2(~DysIq0=sIBZT@O{fAzX9! zl-v8|SSoOA6k!z+p#)AOF4_-C6&1$NU-Nb8l&% z8jTXT8){D!3P^!k^%|o9t8?EGlV&aW#riHc{W<@MnG=Tf>6jK9+|Z+#3OvdH3(yi; z<@6glY1X3^v?OtD`MjAEhxhH2-ZZokB;O|SbsRtou>db3DYHwz5tC*<@ZO&{J>}~^ zJp0}QGbfJdo0B1{-)@wAg?@5?UV!KyDF-ld#(ggzE3Ylke*O1-GbRl0m(wb-`0777 z4Ak7C2+oTG$mu(L{Iogq^2(=)F0Pw9XWIB-ec8Pqs~-!S9mCx9w_pKQfMNixI`_#P zd*|H`t}KsBd}i^3ci%Z?XrE3Qi4p!@B~*V}Fn~P|z(7PoddFJ^-!Wy@{fiFYtV3Wr z{OO)7tkKFmmGbIZtjpax+Wg7mj}O_?&4IM)dFA z9u?ren0;}qf1MIk11|3MeL`bXv%2)n9W!X01BiGU)b+)9!iTspW^tk{vN0T0Z}QyQfXOeNeBC8A(w= z*a0ASVO;N|xOZ~r32M*-A`;Ttckh=wX3C5?55BNuPiePdT-v?t`3L9Bm^?bSU$=H? z@e%$F>S6~(8Fryqw!X+62(3HaGGN5GDKqCh_|(EuZ3H>J@$CiZeahJ31A2AJOo<8g z^^%)lY!B)Ho(MAz{7XF%wz}c;?w_j*XvyArL^by>1|GXz(T9RK>ka~Q};+Gc8yZ;{9d!MfD z)0;(y`l{V0g>PT-CkqWc8wEtfrDSAd1S7^yo;Lg52jeXc%^7b4!a`KGcPX2me zSN{5CuRb|{?gRJEo;GRBh(Ue2wa-YA8<5Jr`^GXhod$CIRU}5xzH6U>!$(h;I(^nX z_ul`&Lk~YZciy~tkFeo&?!yl~^uYc1-ZN|Z)Cr@959r;Mz3UsWZf5t9J^~DYn~>b= zdHV#(5p=nw|IiVm$4{Di*YugQX5W4HJ#%Ec=bpP~&z?DB`dw2ejUPQ?$Zfs4v_tQa zh7D*XW83x>L;*Md)${hn7PRE_tWMqg^dCHIILrJbBWjiQ~tQ z9X)E~u)+QNbnldv-i&kiu2=32c(llB1lR-@o7AFJ+fH43_U_w%z@WiHb909cXB(C~ zbm-tg18(cvyJy!_#M~7!NCii3fUW0+-M2v@*n1ll9TOWHr?=SHnCK|% z!3_z*4qUH#6}$cQIu5u2*bTdny&7=uvA=&nKwuDCU_gMsKldOv@WKvcw+i3>TQCBB z_jN5d_d3{m?de&+zL(zW*Z1_SSJ$HswqO_Rz*eZMz*ox#a7S!D$KG>S*IKpQ^j51D zH=#RY3%X-vZU0u&;25f58#*?@J37{|G`z*uckKGE#NF>|0P+>1U_*bh>7UAI;Pe~* EAODerLjV8( literal 81944 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 diff --git a/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj b/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj index 6c93b035fc..94bc1db5a0 100644 --- a/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj @@ -37,10 +37,20 @@ F5691895ACDC7B12DE88EFF4 = { isa = PBXBuildFile; fileRef = F2EB42A070E349D77ACF77C9; }; 4D5C0ED42C87FBE02A9C7BE6 = { isa = PBXBuildFile; fileRef = CF7FFEAFF4F386ED4DAED523; }; 80926D2B83ACF680958111EC = { isa = PBXBuildFile; fileRef = E6EF5CE04768BA5B10050D51; }; - 2201A04DDCFC361882F8EA62 = { isa = PBXBuildFile; fileRef = BA05C84C3258A1978AF3D357; }; - 2E98B1DEA8B7FC20ACCD2E6D = { isa = PBXBuildFile; fileRef = F42C91375F3314CA6EE65697; }; - 3A2EC17F8472C338D6A26278 = { isa = PBXBuildFile; fileRef = 4D526A336B2E97ED42CADAD7; }; - 36B5D100604D9A300187B773 = { isa = PBXBuildFile; fileRef = 8679333E781A0A0116AE5D26; }; + A4487956E52164EADBA0ADCE = { isa = PBXBuildFile; fileRef = 5C624870420A64817375E80C; }; + 6DE05ACEA26AB4EFA74D938A = { isa = PBXBuildFile; fileRef = A256BD38B526BD31BCC8CC46; }; + 6ECBF325EDA0A7AA33F7BD1A = { isa = PBXBuildFile; fileRef = AAA6022D779D9196AC995FAD; }; + 84C6BC024FF342D8A5A0C819 = { isa = PBXBuildFile; fileRef = 5CD2FFD07885CB23EA96439D; }; + 75AC5AD23DEEB9A0F47C20FD = { isa = PBXBuildFile; fileRef = C43C0FEA8C6649389137CD6D; }; + 260742CE2C8B22CDECF9F009 = { isa = PBXBuildFile; fileRef = AC0F0D8E68C280D7DA3CB7AE; }; + 8CC5384DA09DDA47D2821BA4 = { isa = PBXBuildFile; fileRef = 556C3FF5D74CD58C26FD4715; }; + E6506BB8B2D8A35B5199EFBB = { isa = PBXBuildFile; fileRef = A6DAC994119AA21BF2437B2B; }; + B051345886CF7C536C24768D = { isa = PBXBuildFile; fileRef = 4DE24B6BF0BE9EDD0136088D; }; + 913A0AB6A02BD387501CF6BA = { isa = PBXBuildFile; fileRef = 0676086AC62A9C4965AE1DBF; }; + 72B85CFE6809DE026C8BEAB0 = { isa = PBXBuildFile; fileRef = E8F179460A78DDE3B2515B00; }; + 7A762EB5EF0E15225A5DAD4B = { isa = PBXBuildFile; fileRef = 1C68AD2D46238734918891AA; }; + 6F39D6A482BE49E186E21477 = { isa = PBXBuildFile; fileRef = 0939766A2E18CC049FF79A30; }; + C015523AC4E5FE040F694CA4 = { isa = PBXBuildFile; fileRef = 9C72A7954ADF4933B43F5905; }; 7B6D428682221857EAEA1C7D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 0D376A9686DFA1EAF983841C = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 1CFED196602026EF91937A0E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; @@ -88,14 +98,806 @@ 013E12213AD7B4BEB28A31BE = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce.png; path = "../../Binary Data/juce.png"; sourceTree = "SOURCE_ROOT"; }; 3369CDF7AFD79D6F3B3744B1 = { isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Binary Data/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; C7327AD5191A22C1FBD4F5F9 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = treedemo.xml; path = "../../Binary Data/treedemo.xml"; sourceTree = "SOURCE_ROOT"; }; + 0210E40B65CE048C4D36CA7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C821CC3A0950A31EF07DCAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 28882231FDF17BE7154FE360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BF77641EFE8CB0975D4D467 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + B4495A353F3CAC7E1B0000A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 301005DBD15F650B925EDEDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 01EF127F367DA465F4C50F3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19DCA7F10F92814CF496AE38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + 75AB45B6383BFB920338F572 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 906DA445B4A0A9F7C7216579 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + C8C8367D1B7CA8FAB5C05637 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAFF320FB0F6088D8B72756B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + DCE46E3AA7D4477AD8165EFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 20726FD9F586FDE2CB429018 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 4E2C80547331D16C83FBDB63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + 6C0AA8ED7FE8C9879A322412 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26B6D558D9137A29F45FB313 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 3E51EC554FC0A07C1B762635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + D7A9161F6375DBD2D130AD33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 53BF5949EF368899AD4219F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B71FFCBC90081EC2AC7F8CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 652D751023C273215CC0F8D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A43CF3495BBB318A512E42F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 949FD08C39A395578622C884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C2461096CE5EA786A2F1E44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 8D95BD84486AEE72542E9D63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87B11CBD7F342D5AEA2A28F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 9B9AEE086C746E112EB50ACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 637A9CE3F17B6F72A5AAB7AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B08A25F990B3E7F37BF6A09D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 36C6813CCC38D0B8A95EC0EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CD17B6EAE1ACCDA87C49591 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 62BE59B9387C0717F60E8448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4297D3C9A6348BA224516847 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 86ABAADC7C86707CA168CA76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CD41473CA9951E5CEE2D7E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + 4BE9943D2BC3C60AF1AB241B = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + C48B01F7A9E1E059E313800D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + DDD45D9F6A6D78C4B4B274B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 548A30B1228458B693B9DD31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02C4FC5BDDCE845CCFE68108 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + AFA675B08A83E39ACD993256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4871CF72DFFB887451CE0D6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + F2141D8FF9DD47EE47289FD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + A206EAEAD3DF98EA82D5BEDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + 2DE4C2FA24465BACF11FC983 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 28AA02AD8E42F94D4D5345EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CEE98E3CE0E4A4174DE758D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + 95D5268551B694DDCE4186E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EB7CB398E4351B57247E649 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + B1D78C7DCB4E12FA062FF78E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 606271132A4EB371A229E0F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 755E388ABB2E0ADDE49226F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + ECCCEA377EEAE851FF35192D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + C73738EFC3DD7E725508EAE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + BDAABCE63FA7D1C2E989A2B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CFC484782F87154A1E75E40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + AD7B08CFB366A42332743423 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADC1AFDEA18BB2EFDA336B45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1EF9281E482B968EA8D4779F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D9251031A81B5CF2C843B47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA13FB1DDD68737542D98575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94DA91E8B082278F9A14CEFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + B926D464232B3BB1DC3BF3AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 938E19CE08914DFECEB7AF71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + D5A78FE1218ECC63124F8C92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 40975D2693E29684206C6505 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46223CF51A61C2ADC95009FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4EA3DB7587F630863A3693EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + E747D14FFAE7EA755A30B3A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E3DBA9F927667BC386A432A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + E242FD47FC44715A8593F3AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 588AC92B54989307FA16D710 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + 423E61161E465283730659A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 32268D55B7C74F4C101AA624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0ADCE1D14A449540F7D389E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 08FF0AD4801B146598F82D3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + 402576A746E2BA7883567D46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADC2252BD2D4F5538FCD9A00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + C901F12BE7634A7950548BCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 95C2A72AD5660572349E8B5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + F277DFB8EEE55D4937FA15B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 9058D37AB7D849D9B4676199 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 67AFA6333F63AD3B994993D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 3344A70FCDD784B37DBCC158 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + C814A111027DAC7F98798B2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + 377B969B90C21A3445C32FCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B522C55AB3A354D0EE770A71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + 41F181DACB4616FB2992756D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97481FA6736B14F4563FB2B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + F5CA0326AE54AD7152D9306C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + C39A8E1CC1B396BFA8254AC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 49CBF9DDF116C8581023EBD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10E25D20492F4DE177DF13D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 393AD0788AD728AE54428DCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E3A201F6EE63BC96C267FB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + FB94DF90C3B5625410089C7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + D207DF5DA47AD3BB2AC008F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 7DF71E1257C51B571ECCD382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8AA9660180935779F2928906 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 6A84B1461BD5AD2E6CC463EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 810A49611D6D71936E7DEE5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 3554034E637CD420C22AF83D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1D0A5377E6D29C302BE09B5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + 3FEC5385AE95CA8192259DE8 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + DEE1FD0F518F4FE4ECBB9BFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + 979FD7AFFA113B4620DF71E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_formats.cpp"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.cpp"; sourceTree = "SOURCE_ROOT"; }; + B98541A5F98F5772D0D11A6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + F68B0F7EACD404EF4902D824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; + 240BD288F3408B117610BAF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42A858AABE6C264E35C506E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + C295AF7C201872B2F8BCE38C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E74D2B5966EDE613BB66F969 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 65AE892960E70DFFA91FC34F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CCF82CABFC7CD3828EA514E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + 350B3D6B87D3C8D2A89DC50E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0C2DF8EA8D21C76B535979F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7613C889F6A6284C8777083A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + B6F6E1B709580F82EF36963E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23AC4110CCE22DCB266C76A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; + 08CFF5E6CA0AEA75B829BDCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FC8CE63D01AAF72F4EA7EAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 46B03D581336D14F45CB7EF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B8CF62B65C4F32CDEE1EF6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + D2BA720C39A8E1CC1B396BFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 792453B5DBB03ACDD0665436 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; + EEDDE4BB8964782B039EBA0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 5869767E50249CC14AC86D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + DA41D6B9CB2BD0E38F11AFB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; + 95F27D183BDD95B97C36FC84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFDFA4FADE46C499D75FBF21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + AE52FA00D8312201F092FE17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; + FBC575692B67E16268C03F22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + 28DDAC3C82C7CFBCA368A4BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F7B5FC2FB64601A9322847B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; + 0F8BF051777FD461DEA0EB03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1796E2722F7F70338DAA4C25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 69B629403853AA619C94615F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3B2B1189687851319F8D622A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; + C22C2E25C13CE06BEC876609 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + 93D4362567EF7EE249D1F3A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EC01CB982BFEBFC4DE98273 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6331FE7EE3529F53E1D960C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnail.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C0CE77FA09B4149B5A6A10A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; + E5FFCA61985BF889693D5737 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 041FC0A6B3D2D205A44991A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; + 17F0BE5EC80371F744967B0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BCC05514DC58B654A414F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4816BB0A1BEC11A016974378 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C4B164709245243F01E9A78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 4013BE586FAB406432C1BEEE = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_utils/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3DC1260F6F22CBAA444C2E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_utils.h"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.h"; sourceTree = "SOURCE_ROOT"; }; + 24416D5ECA25FC37EAB2BDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; + 063037B8BE557D35FE9427C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9C5AC0DE7DC7C16EA8C93B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 8112661B4861C279ED1012BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 7E5EAA9EA45E5FC33E862D16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 2E85BCBDE3E20ED6F95AE135 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + E7DC7C16EA8C93B20BD5320B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + C8D91126B274C259088DD545 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + BFBA328841E9B5E0EC7E95F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + F1977AA1120CA5B5E723866C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9887417203C79CF75B9F83D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 1E66647BC38F2C05D5822AE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 292DEA7EAE860940C0886B4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 306A320D349DD3908BFFDF9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + E96469EE49F1B1E0CFAA538C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4E8A42564A48135F71101382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 738970A3440A71A1A9718FC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + A32FECD2A064A3D9689F0127 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 2FD33E0F933A7475B72085B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7609129372BC34EBD8AE4EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + C8A82485CBE3D5988E8C512B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74D0EF4A955F1407EE131141 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + D439F0CFBDB20D8BA9936172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9822A2466C7779EAED41B884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 874BD38924B7E497DFFA3297 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 33675B074C152815010E0FCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + D108F0D29C72AB0771056A43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 90113449B6DAC3C7C153DA33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 029E2574F4E658126B28A74D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 37AA83362EA4B4F06BFFE6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + B941BA189A71C84550072449 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 63988C030E5C13E60EF26383 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + FFEBE6C6663339B171BC01FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + CFD307B9919A9E3B96BFEB51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92AE75B3647098CC510466CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + B56E652FAD2C378EA0443850 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 2C33EC6420413E0CAAB7887A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + CF9860B08787A0B22044A248 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + E4F312D3E70F1C175BB5ADDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 1A177071A7BAEC2AC59CA2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 4C3B4219E7C2D68961FC1868 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 446AA543AEE4FE2ED677EC1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + CA63D088C939F2F855ACCDAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 8F30140612FF50387394FB1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 9FFC85C47CA3030875910F8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66F562F4792525F5908CC9E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + E760555233D13A9E2311F88F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + BC977C907C8F4F166CD26294 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 859B0FBD74282AC90C2C402D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + BD4F8792611E3EA1683AFC13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65C23643821D36E650CB1DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + C310445CCD405A3D4FFB54AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + CEBE1F81B541F2DE3D380B19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4B339F9CFE7934EDBD8FFE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 814BAF158759DE67B645C393 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 51E27A8505B842B4B444DC26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 777A30B991A93312852813BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + FB1E1ABCE03A45AE0E5712B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + B3D5338B24558EEDCBEC47A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DD387EC7A13E8463F3433D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 940D28704E70877158A0B253 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + B9358CFCFE279A5311C87CD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + C32FDA9ED5CA1971CD81C4AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2F781D5D214E4B41A545DE03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 1584D44D2952B9331D23F1FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 49516ABC2D374106A500FA5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 6298640CBAB1060EF5913837 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 10BE6CC45D3CA6C96BAB177F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 85AAA6DA2623F294BD833824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + D69EE578699DF38D2BE66099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 34C51F6BB36BC6356ADF32E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBF63FF3C4567CD563E4F7F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + A51FFF092902D75154EC627F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2567CA278A400B52E46FF274 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + D37C48E300D0216359C0E997 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 219AAB4EA20CA4330C81E626 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 043588B891656D382DE0A360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 2CBC1DF2BA7946F26A23C8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8904197F1519076280CEB88F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + 59C8A8FC8D7848C8B0652B36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4D7727B2083AFF3B36C2E677 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 25627AE84B36F28EA695C8F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 206E76A5E95E71C014FAC29E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + FF7D80067E120E8AA687924C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1BB9E81272C486C6052B7E00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + DCEC1BF462468083D438808F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1C0934F874622A828D25A46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 56CE53154BA1FBC3226EC4FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54E57399D7FC53F08FE3F2BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0C168469D44EF7D2926C6511 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D209984601CC1E682FF9064 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0A0EDDC54FF0EB2C6291CDAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54B4AB4059633CE1B324F077 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + A0780B8263E513F71B30E272 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + 5FAE6A5E96433512E674BD05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24E26C50B4A8E832080C5F61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 90D9F77E8E7EDC2E33A7C31A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADF2B1DAC135B68CD4B6720E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 702D6718F50A787997811078 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0E193F77CECB9A00DF50339 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 9C54ED678B0A6FD1DF14A3A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 67244EF4BA80FF0A9154A7C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + FB5BA72259C159D60DBE7E2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 390A4CABF25C731329DA019E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 2B8EBD56EEEA5C143CEA4253 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C973C66571E2962637625A52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9F3E12140129D6EC52A47DD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4B290BEB3D11D0E9D5BD4D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 081A449D053F2047E70010C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 0E0FA96BD552AE3562680054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6198C094148D5D1054FDD3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 22D9A9F931EF5E0F21CDAE40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E5CD452EBDF029F663A98C18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4C6C1B63664AFC984EBB1AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0F291F996C9885194532170 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 661FB5E457C3754FC17308F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F2E6416A52E2766F8821490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + F5C1A8287F0E150BA7CB93DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 941FB4565263F73753345AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 751FAC7542E81A5C433D8CEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFF5C17391E2AF077C7A4BD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + 5539D1BA408B12D138CB9733 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + B6BB75D678C7C4A737059B11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 0C387354D61FD7E6583CCE95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 2F86414308872736499C02B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 674BB7E7F20CCCF99FE1B72E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + F96289D7427562E2F4F1B20C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 69D51183BF7F82628DABC216 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 6AAE8FD78F62E27C954B3546 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1601ABB2AD716AFBAAA7D35E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 25243DD224A90732541E6165 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45ECA3D19E104B60E9D702B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + EC1D81103E0E33A595561271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1283125701BF9E97DEC4957C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + B0036BAED6F079F2B7D06F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E07576AF64364A9795E6BF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 43AB309EA53E6A826CD09B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E561B1E0E55CD49507434F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 89F86C80D4341EAA34A6F29F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 64CAD3312170E5DBE8AA8348 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + BB13144FD3BB91DC15D9AA3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B86DDE93207F29101A473B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + CA1329B5CA25D7E081BAD705 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEC2B87E2DDF944A23018D06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + EDCEF199352F46CFB6617CE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + D95B727C07CF687210A0F6B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 178E168940A70F4C014BB08B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + E890FCD0A70F254FB9A71E1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 622BD07C886D6A0CF184234E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D106B48F1EBDA833E822BB67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF9A8F5E876781E38DAD5437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2A079009E67A9E1060B752DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE99E7177710325DD24D9A4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 73E15D74B4DFFF343958E0C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + DE2F1DECB93E68D0677F04D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + D97D6F12470EB9280F7836FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC28076E92487621AA052C98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB0BCAA2C7B1EB686728A8CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 90727D848E066F87A06E68FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 94FDE3E9C11178E22B2FE85D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 8AC52C8993A3DB5AB950734B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + E2ACFF7A0DD149CF09C2A456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 62AA264130AEB57E8FE894BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 311C929BFDDF15E46F494CBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + FCAE15939C1518C440C3D2FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 09901706BF99A625649A0863 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 117BF51288AF1F231DB2A872 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 13513EE40AD6BAB30E26C88B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + CDA562DCC391C52498536C0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E570649CD01AAD17DBD9E7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D29426872C2E6110E8844E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FEC15CBD8E0402F376B6099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30E571D94DC4ED10C56D003C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7151A764624596455542FD09 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + AD0832D6F3AB6791E69314EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + C48263DD054DE03C909CBBA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D32323BB011BDBFEBF159FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; + 78F0EACFDE571530553B40E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 240587B599BDD28414DCEFA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; + A55CD2FFD07885CB23EA9643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; + 02C9E6DF7AB6EB4B7F1BADB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; + C623818CF3D2E330B204B41C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + B1592D2F30D12C6EFD1552CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8898DAB72C17D587EB057104 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; + 83EC802AE5B66A9550E792CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; + EFA0A385B661B4606A969464 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; + 499ADB134BAF9A23E402878F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 1139186CD1FDF228C071129B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; }; + B9F4F554436877EDFBD4CC96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CA3F6CEC6B33D2D0B03DCA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66018343321C29C9E424FC82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + F8C9EBCAFE42D2A16EDBE2DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE987CF4CE27BDBE2073253B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 1891AD01762292E7727D6F47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + EFE6060C0638C49DC5E4F18F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07B57AB2EF2055DDA75A7E4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + D3C2ADD689B7C9675825D7D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E265A40056244CE47403EB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 65FD33B8E2EF0C4A7369A730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 624CC23973A125CB7BCAE2F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + 5F446A96BED7F585F66B9E7D = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 945D72F5A0E0CFF075FFFCCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 19EAA34BCB41071024A248CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A7DCC0474290572A4236A7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + E49D3B59703FBDDB86AAE641 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + CBF95C1BDDC667F72FC76F79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 9175514B7014D5CCE634B3D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 39DE08F9B0CB040518C747C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + A7992C306CEFE681608B13A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 29A38C66311AE71DC91CF439 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 83C95A4C2D86D529D861EE31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 064C101C015D3000DE7E02CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 89EB1136116ECC63BADDBF5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 05E0E331D082358CE4D07D70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 371AC755F11D82A159D53A22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03CFD2B9CA3FE198F657E2A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + D439CA229128977B2458D756 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 70F316EC3BE738FF149ECAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + CECEA2024CBAB3AC35C05B73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B4B91B220814CE75CF05A13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 7CF7717E78F5FEB6D8FB1FDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + 42E7482C8E71FEB9734DEF5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B0443979E3218D57C13F7D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + F068B3F83A99A151939E2A79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01CEE62F1189EA5E9A2381A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 71D5DB9DB6F0B57DD88665BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 643C064BF7A994919C4030F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + A97B19E92B9371F73DD4EAF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + F2E95E2AF9852B43DCBF04D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 343B9539AF1F75DDFDD5537E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F64B7F5C2EDA5650B7790491 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + 0E82DF0F521D54356AC2092B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + AB650D6A05C0704879D92693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 781A769FF7A7799E897E699C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C251E4615E9D4DFE3CE1668 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + C9074051672D1415A2CF0C0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + B8B085A7F4D5C59C7B01937A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 9E187A5A064CC3CD55BA5D76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 1214C104E827417A8EF02092 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 63BC4983AB677B34020A7E14 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 94121F83242BFF073C048DC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + D5538B33BDF1CA0139A0F904 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B8D17F77F2E2E7A2419CB17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + A889AB0F3F5A622CBB251F64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + 2FD607573BF08B2CACCC317F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFD5DFC9F607C8846B87BE71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + DF66BE2358584653924D6B4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83EB81439316AACC5C464B06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 7FD559C1F6C00FF00EDD94CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3948719F9EAE29D2D293B341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + 5CE2273D46160852405330D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 8B52D861ECC6A83BACFEE014 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 43883BEB4043ECB991681E14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 50D7C5B8301E8D8912EACB16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 694D7777B2A07009FC69843C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41B1C5BF544A1431985C1DD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + CD662E0EC25C2A5A8FAC4653 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F14967FE683B5F293223FC34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 50088489EC7B096F63049909 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E1061909F4EDFF8F54E3B6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + B2C10A531A57F19225B4AAB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DBC748317D662A49D782EC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 142C5FEF76D38928C3E85B9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 795D59A21ECEAB395EAA12E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + AA439A3EA1FD07432BB0B5CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFCFD6C11E070C60B03F0E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 88B8ED0AA4B130C1B7700730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + E0FC38D81C2060421DB7919B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8E524F198D43E4EAF7AEA37C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 334C9EC6327C30323BB99980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + FEB4B8DBF84A3E8D011DE6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + B9F3664FF2EA6070BC27BBA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 718D187AB6E9DF560A16ECEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + F737AF27EE6BAB6CF116BB2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 9282B1A67A71ABA32F5D0CAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + C14CB56C9AC7DFE91D4BE8B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82783BCA4DFB1C70D439DDD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + E50E62F86357572BAFCAE16F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8C92D9CD564B783D1D58528 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7D8663E700F665CAAC3054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + BD46AA53CFB52E5B15D35830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + EEB18650B8A4024B5511B962 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 28DB206834B927627974AA43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + FC1F4A2249B0BE8996FEC907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 189E385BD13EFEFE2E08F803 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 97A7E45925158D2DA073A44F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5957CF17600428D9E31F5E56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 0C4E749FC530DB9A1D080E01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + BD4DCC143D6C2DF5D27BB45C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + D0BD6251360BE7490470B7D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A79DF8F31DB68310EA4D618 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 7B23FC432DE96EC4EC884739 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + D94DCFC11C119FF14B1A5FE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 7F6D8BAB910B1A91E239FFC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 847B9959CEE17F7D28A4FBBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 4C5F7BADE443E620C956326E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D36C755D8BA15F5B5159CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 516E73B0C320FE8FD5C28985 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + F83266F6597B96E989CB24D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + F662A560041BAF34318CF6FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8CCC1C5439805F8F2461498 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 76437F9DC1ACAFFD9C4EF148 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 399ECF10BBD29B3C0FDCE79F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 3410FA9F21DC2C7479B4B5C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 2FF1C9B34A5D310E7255F138 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02D8F876F70B8AB5C140753B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C610E2F6133C4C335B52722 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFD3335A18DF9B183D15D28B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + E8D8F996D1A50BBE677256C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + B85981FA35B69A699D517725 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + FDA1E14DC4098AA8A10A7AA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + AB099E74A6260199CAB56B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E9F302DE7570731AF5780DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69133E69A29734D050F5D096 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + B0C1117A4D54308F25AEE311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 7DD0D59FF092E1EEC1512FB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F3662389073C657EC0BA7BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8936E5897F4455B7B8AB6421 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + AFDDFB2983E08695C6CA4C33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 539ACE1B0DF89E7B1FC3BF20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + B195625E3168FAC063ED4AD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA003A212A313C1924302A5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + E3060C6BA42B5BBCCF9EA2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2204FF31FFD65C8884F44F93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + 5CC7E4FBFEB7505786A509E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F3F40A799345E160AEAE247 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 640E8619D3411FD400D7E53A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F27E001D237BB52B607DE0BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 603684B851BE89291AC59B9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 61D4FF10830BBE09885CB8B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + DA376A104E6E88D7B1A029E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 48A8B3169E65395666DBAF32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2195543B341B32DD166CC53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + 1C57184B3DEADC988014F31F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB366EA56B5D73522519775F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 9B5039DB0C21013E554CAF25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0475A1674219CD5F69CCCD4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 50CF2628DC184A8A9F131192 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89EFCDFB088F88B55D089B0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + A5B009D9A8520EE4A5E352A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + A5829E55CE23AEE32B93F99A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + A3BC9AD4B7D7BFD168AC282A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA78762DCE67D140CD73C852 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A59D61B53561AD82205DD9B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4A95DBD3A4DB9B10C9EAB39D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 72CE316BC15E972EEEBAEDAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + D153857C14A4BAEA2419E2D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + DD3C934437272E8DA223EDB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + B412F69EC877F8264F9D3E3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + B7C417BDE4BAB6C89A4EED91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54D1B9209178513F34645184 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + F58BC25FBC248CEEA4333F7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 039E9097BCDFDDB20CE31C60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 2146B9FB578039AAB718E5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 83D383C9AE6891C35CE161CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 396A1ABDB8E1374FF2537F22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + EE9E345FB715B1E9B4069F00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74D9E1D09FB0FB0EEFBD3606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 452F808B06D388A7F846AA57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F196E224EF52F32E3CD0412 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + B82096DB8866547441BB06F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23D48F461D6FAA4B583D1EE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + E2BB92E6C329EA535E1BF203 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C1A0D3CD9F76BDE9239F7FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 1CD3E52C9790FD96093F34A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F069D8FED8DD68F6B6A4ED0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + F286546479097D11645BAE39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13F3F329B4F79AF9036CBC6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4FBFF90AEC67D3880A4477EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9F0D485F5A802905E1CEEA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 0123A28567B7DFBBE03539AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F8DE145DFBD4E249C6350CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 8A7E9EE388B957C79C37718D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7332966389E99838048252B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + 182DA026F007BFFF64F6E3D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A7B8632DB9A038F3BD5CB2BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 77C1B68815EA0564CBB5EEA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 083EF9EA370E5409425A7678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07DD4B03D4BE988F37DF5F4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 18E52CCD3C28217F4FA9EDF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4D839186E4C1603CE9806382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 102ADC17D5D8AB41AEE563C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAB73D3C21B0040B5E74F550 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + E09FC35A8FC09DBCDA490ACF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 272EFBDDE9EAC44AB1FB29AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 641DEADBC4E42606FA56F697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E32D68DA3B35C30F2526563A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 7F04FB22663B2DA2942F8FDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5DC0AC7F8634C8996D28F582 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 53756A7956431B6E058EFF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 08BC9AB8E942E2A6D06A8ADD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 7BCFBF5D405B179C7A4B314A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + 49B20B6F3A578F255E8EFFEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D5BEF363CA619B0CD32C907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 29020A4D93D4A2481FD8F382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5459E41641F8A8B63EA0C3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 6CCAA9A13BE00D110CCCC6B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DE5176B5B1563D250712B93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 47FE99E8EA120E1F73DFB9C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 162E80F51595D2E7C16242A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + DBB909679AD10C642370F3FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76575E4E6028876F950F1455 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9D7619718D7CC6D72AB2A5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE19C49671936C02C54CA659 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + 5BFB0065A4DD6BE555A5ABEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + DAECE87DC442032D79ADD613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 7546CFED0D976C353361D79A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BDF9D5B5EE2CE56D8DCE877 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + DC8055201A2D303C7F0538CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6455AAF76F63A5AF005B150 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7E8A8FEBC3C474CAE06ADF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9CF257A8792663A43552639 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + F00E622AE37E2DD4A04EE7CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0845481578E95EE156F30967 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + 139218E9D6D5A078FF58A417 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BE9D180A200AC0A15B75E9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 941A44F57D6415E845CA934F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5A9D4C013E87CDC5FBD477D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + E301A3CD4036E6E6038EFD16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00C4E097C1D4856FA6B4DAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 874976F4EA0F753B24438044 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A6B0E06CB2C33F89DDF1F01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 18ED3771E0A50CD816D2A6FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFD90D0BB35E30A29891649A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2EB42F1313E76B86AD2BB71E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80C5E9D58CCC2AE9107FB8B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + 5E17D037ABC657EBA07EAC68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAF4261C2F180AA5B65BD57A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + DC6052DD9293D5F2A39AA190 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47FC20961BAD642A858AABE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + 4180720250D61DEBE80EA304 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7176AC0C1FEF6703947F374D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + C85B784A5706205A94FE3DBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86ED84D148866631928AA6F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 26EEF91657546D70AB7B2709 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9183C2461096CE5EA786A2F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A01B82C705EF26CBB5B92DB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26DB4A3042598E95D58C9C05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 8B9A89E8A056BEAC561A80A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3160432DFC1EAF9FBF7E9564 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + FA4FA2F0710C5B84EB365687 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D744CC449B92F39574EBEF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 60840E1D24EF570F22E09E50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1A66263F1891A0B251C4C92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 7F3C9B5ACFD7F6AAFC09C234 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D8BB02F40FBE5659EE969B51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + D5DE9F5376B6B8DD5AFA7CE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5625C02A4FC4C755CB806717 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 113D26F57B2CD8179632D742 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3584DC98E105FB3F9FF90B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + 554DF8F88A7B831AC92DA90F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BC46CE051B4197498448563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + E48D4A08067E662AEEE3FF59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 32855B677E5C0467E99413C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + 3FB2775062292D1CFEC55DA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + E819A1BFA34BC635026C6693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + C2B4AA6084D771F955E1FEBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EDED66ECB6E9EC80C8E4BE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + 3C0C7225D6B36E61883A5D3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + E358D24FA3B568035930B037 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + AB415E8F30A47022E0AB89D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FF26B1BABF4E560301543BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + B2FE206075F9F778DAECF5A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41A545DE0315B36BE103F0AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + AFF2E7586D4EBC3A9A624133 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + 15CE14DEFD72F75DC92BC42E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 26D55684ADFB9C9934DFFB43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 73A03E444EF58D2CEDE7B752 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + 5EACCAB871208A99BCDE6810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 029FD3B879CAA86E19130146 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + A91FD1D47168A8AF40679AE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF0AE315E203DEC06307AD41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 2D0EF17B91F2CC705FAE4607 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94CA5C61232419F06E94F4F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 65EB1940B412485E03A3D915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4011021A504F57A62C50CF4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + B232A58E5216B61097402A49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C3E354EFAE6CA30DC2B28DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 85C2419FF027BE35D8DD8004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD06118C1A7DB2B815108D33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 3C742E763EA133E3931B5EB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8970E6607ECF286019E9FA13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + 061497E22C4E67CE892F4F87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72494272CE300F994D005659 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + 1F9F7F7F593F3B5592CB1061 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED91C66FD7D982DA1104E76A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D3E05DD199D36BA2B19DC43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3D17CF897668713E7031E673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1BE540AFF33D24BD3E5A288E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4E4309FCD9191B0FC0466DBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9A05E1DB132658212B0E51D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E645981CA10B8D5576462975 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94CCFFC1ADBC264B1DC39887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F11FD718D953943D6576572C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97A506FFA27B3C9801A87CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + F91150E97C6CDADE38C84F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EFBDE96D4211E697F43821CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 65A780DB6EFDB2F599FD2380 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35DA6512F84BA1C3CCDEC3B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2F5535CE15A1996FD473C697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19A9E3B96BFEB51BE10618AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + E1B19480FDBFA900F35AF1FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 85369DC5F12B3D3BC948DF17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C08F186E73B22E591F16AD67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C210F817CF0CB7CA84C761C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 164AA30B09A0724FCD01223E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ECAAB6B5DFBBF9BD0CD5F5A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 13032F93973B9427596CE33D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0F318A914330BA898B89E781 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + A3E91859477E5625D848F9EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + CE82075957F49EFD63376810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34A0FC3D36D12F6B31FDFF1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 870C076EBCABE3DD4EB5D91F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 403B741BE3D2707C1EF69B70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + D8E5F0C498A1B384975AB6DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 14E995251E19AB0690C4A577 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A27BA1448CCC9C8F351B72F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5F8F1FC976C8B55D43AAB52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8CC15CA05556342116EF46B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C374886F4409A5A6A7B80EC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA73AB79171906FDEEDAE61C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FDB212D2BC0152F4E74FEBF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EADCBDD77CEBE6041018ED3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F7DC6DAA511447FA98F327C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BB537F1AE8BD69BAF92FFDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 52DED83FF18C19AA26DB38FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5CDBC5F16FC4C828566E443 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + C40A6FDF64FB9212CDCD61B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + AA12481D838D026D315CEF80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74FFF0E08A2780C78EA13E75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + B4366D212482B2764F1D669B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22C3A8BE42CD5A5B6DF16DC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + F9B8E34C90732BC803EABFD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7256657E1BF8F2F6CE75F2E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B00B363C8CB643119E0969C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 524CDD5D2BD1C354BD5AAAEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 9090B115C3B62A21681876E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F18FCBE1E212F62E3287E970 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 65B3A8348A3D727E95D4C9F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A3D2DCDFE136837420BC105 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 14520843CF276BFDD546454B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + D10138F57CD1F48313E51610 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 424B8C2F15294922CB0A996F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + 09BBBD942839218FF8866B9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F13046936284D70C57621E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E4282B4BE7CEE1624379D62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + A1A18D8E9DCAE8D88900F297 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 3329CEAB7BDFC1F89DC2E652 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11F9A319F9C07F2071858B86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5121C279B202678849697048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 623CF7B0989D67045AE1665C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 2726421A3D9E25791FEA1CE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 299A52AC1688030D6F159B75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 315A2FF7CE056C02D2756437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + C117B9421807FD3ACD799FD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 8E6269D284D4C7E1E28121E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + D0256D08B11506D28F7FEFDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 048A5D3CA1AD56E75971FF98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEEEBDF5A079C2E492F466A5 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + FCEFF51F85E96360B6408A26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 964F76A26C5E1D812D77CD01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EE1E79E90B11F4B8956CC91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF57713844F7A5A1E697DE85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + A2CF12B19E4614F09660FD3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B383BD0C47E6BBAEA15740B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EE074728350828C88A5A274F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 8F41BB38841B484EE63AF6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 16B4B1BD53E04B6C655072AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 139A0F904A7A5CF7BC458D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0EF4DC413038BDCA5931030D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + E4DC76046FAB005F340CADB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A9E47D07EC9231EE725689C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 444C55DD8EE701930E0119A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D1F3368FBB6EA1B0E395410F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80219C0DFEE068E1AFB77DD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 35B84C6EFEE8EDA81B2CECDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 600485BEE68BDCCF068DFC7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97CAC309C391559FB944B75B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B6D3036283FDCEE97B8B0532 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 79171B6126FF71CEA1AF36BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 221B9433BF8FD422D9E7A306 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28D6521D55A093D390035C46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F0E8E9829E95E32163F45482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F23FA1819D68CFD815296D79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 4431D8080CE9594075F833ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 99FF73EB10EA291A28F7BEE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + 9B68C04DB60D30ECF294A575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + D57E232C5FA2DC3352B2FD60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 4D21EA1C858685693C6B3933 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF72289959650D1177F07F9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 77C5F7D331B1EA06BC33EBE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D3997A8434877DE8361FF40E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 621C0A10B10C7A54D0DFE222 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 2DC640F4EE63B61FA5939678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 303A455D4E0CD6DFF1FD5B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + B15E14ED7CA655AD841D5B34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB79F13A10D15E86A11FB48E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + 5F230AB00C842BEF7F5946EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 828065AD25DD3FA73A90EEE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + EAE1B79B3D4974D15F8A52FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 12B1B8A981AC3A10AAB25B17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 234F4FF80715D9AF48566F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 261A3EB888E5CC8ECC8EE1D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2276FB07A4DF1E45EE4DB845 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3E14DD1434886736A4068785 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + 5AA0BE330B0989B0BEB494A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3AC30A457CF73FFE522F45A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 004FE4B78A89723BD6FE4C83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F84AF9F674BED841E97320A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; + D06619F7C5ECFFF953A50101 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLPixelFormat.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 70CFFFF4235A2AB7832E2331 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4F9FE207892A3218D2CB374 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + DF720978B38045A5B750E17F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A528F1A3E485EE9406C59AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 44D5A8110CE894496E0A7718 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6B7855A37449D2D3664E2F4E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_opengl/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 956EEC0F9A7804692B5AB7A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../../modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; + 922662EF3F4C65D2F0769A90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; + D997ECF27F5E0D8634BB5FAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 53DC83C971FEBE8F42A31ACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 1D2E6D464E81D718E68C531C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; + 35B05701A265D800F245A5C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5405489B854BBCD01B70A2B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../../../modules/juce_video/native/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; + 92BE55DD9B11BF61D051E063 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../../../modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 87B68B1D54430FA9E894EF9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 693D6F5537644C7C53AAEE5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24D2C47DF6190643015D581D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1AE6237B9D0DA652DC6D07E0 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_video/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 94259F4AD89C143A6ACD1971 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_video.h"; path = "../../../../modules/juce_video/juce_video.h"; sourceTree = "SOURCE_ROOT"; }; + 96EEDFC99C39D23D8746C4BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_video.cpp"; path = "../../../../modules/juce_video/juce_video.cpp"; sourceTree = "SOURCE_ROOT"; }; EE37A0ECE471A928C6170F9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; E6EF5CE04768BA5B10050D51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; CC7EB9777A4DE3408705625C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; + 5C624870420A64817375E80C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A256BD38B526BD31BCC8CC46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_devices_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AAA6022D779D9196AC995FAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_formats_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 5CD2FFD07885CB23EA96439D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_processors_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + C43C0FEA8C6649389137CD6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_utils_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AC0F0D8E68C280D7DA3CB7AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 556C3FF5D74CD58C26FD4715 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography_wrapper.mm"; path = "../../JuceLibraryCode/juce_cryptography_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A6DAC994119AA21BF2437B2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 4DE24B6BF0BE9EDD0136088D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0676086AC62A9C4965AE1DBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + E8F179460A78DDE3B2515B00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1C68AD2D46238734918891AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0939766A2E18CC049FF79A30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl_wrapper.mm"; path = "../../JuceLibraryCode/juce_opengl_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 9C72A7954ADF4933B43F5905 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video_wrapper.mm"; path = "../../JuceLibraryCode/juce_video_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; A6B37799E63CCE882A3383FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - BA05C84C3258A1978AF3D357 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - F42C91375F3314CA6EE65697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - 4D526A336B2E97ED42CADAD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 8679333E781A0A0116AE5D26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; 1045A435754FDEACC6D7259C = { isa = PBXGroup; children = ( 0704E2D6B0D1B38FBBBC6B85, D793BFCCD11E218E5CED3320, @@ -138,15 +940,1002 @@ 18BDC68F9701862603871A7A, 1045A435754FDEACC6D7259C, 7B2518B268DCBBF7B74F2B1D ); name = "Juce Demo"; sourceTree = ""; }; + 5F68E4EBF694E51C52196038 = { isa = PBXGroup; children = ( + 0210E40B65CE048C4D36CA7D, + 1C821CC3A0950A31EF07DCAE, + 28882231FDF17BE7154FE360, + 2BF77641EFE8CB0975D4D467 ); name = buffers; sourceTree = ""; }; + 5F182ED7C22B82250FD9307D = { isa = PBXGroup; children = ( + B4495A353F3CAC7E1B0000A0, + 301005DBD15F650B925EDEDF, + 01EF127F367DA465F4C50F3F, + 19DCA7F10F92814CF496AE38, + 75AB45B6383BFB920338F572, + 906DA445B4A0A9F7C7216579, + C8C8367D1B7CA8FAB5C05637, + EAFF320FB0F6088D8B72756B, + DCE46E3AA7D4477AD8165EFA, + 20726FD9F586FDE2CB429018 ); name = midi; sourceTree = ""; }; + 65AF0F10064C101C015D3000 = { isa = PBXGroup; children = ( + 4E2C80547331D16C83FBDB63, + 6C0AA8ED7FE8C9879A322412, + 26B6D558D9137A29F45FB313, + 3E51EC554FC0A07C1B762635 ); name = effects; sourceTree = ""; }; + 127130A5BDDC80D2EFA81AB7 = { isa = PBXGroup; children = ( + D7A9161F6375DBD2D130AD33, + 53BF5949EF368899AD4219F4, + B71FFCBC90081EC2AC7F8CAB, + 652D751023C273215CC0F8D7, + 7A43CF3495BBB318A512E42F, + 949FD08C39A395578622C884, + 3C2461096CE5EA786A2F1E44, + 8D95BD84486AEE72542E9D63, + 87B11CBD7F342D5AEA2A28F2, + 9B9AEE086C746E112EB50ACC, + 637A9CE3F17B6F72A5AAB7AD, + B08A25F990B3E7F37BF6A09D, + 36C6813CCC38D0B8A95EC0EA, + 1CD17B6EAE1ACCDA87C49591, + 62BE59B9387C0717F60E8448, + 4297D3C9A6348BA224516847 ); name = sources; sourceTree = ""; }; + E6D0352F5EEC608B7033A5A2 = { isa = PBXGroup; children = ( + 86ABAADC7C86707CA168CA76, + 0CD41473CA9951E5CEE2D7E5 ); name = synthesisers; sourceTree = ""; }; + 490DD8FEC1D97C2CF18A02EE = { isa = PBXGroup; children = ( + 5F68E4EBF694E51C52196038, + 5F182ED7C22B82250FD9307D, + 65AF0F10064C101C015D3000, + 127130A5BDDC80D2EFA81AB7, + E6D0352F5EEC608B7033A5A2, + 4BE9943D2BC3C60AF1AB241B, + C48B01F7A9E1E059E313800D, + DDD45D9F6A6D78C4B4B274B5 ); name = "juce_audio_basics"; sourceTree = ""; }; + 34CBA7E15A8614DE4047D0B6 = { isa = PBXGroup; children = ( + 548A30B1228458B693B9DD31, + 02C4FC5BDDCE845CCFE68108, + AFA675B08A83E39ACD993256, + 4871CF72DFFB887451CE0D6A, + F2141D8FF9DD47EE47289FD6, + A206EAEAD3DF98EA82D5BEDD ); name = "audio_io"; sourceTree = ""; }; + 5F84142B998D47D4367B3E7E = { isa = PBXGroup; children = ( + 2DE4C2FA24465BACF11FC983, + 28AA02AD8E42F94D4D5345EC, + 1CEE98E3CE0E4A4174DE758D, + 95D5268551B694DDCE4186E5, + 5EB7CB398E4351B57247E649 ); name = "midi_io"; sourceTree = ""; }; + 1C89AAA7C7247D8B5D6BACED = { isa = PBXGroup; children = ( + B1D78C7DCB4E12FA062FF78E, + 606271132A4EB371A229E0F8, + 755E388ABB2E0ADDE49226F7, + ECCCEA377EEAE851FF35192D ); name = sources; sourceTree = ""; }; + 12B982373762043F81FB4590 = { isa = PBXGroup; children = ( + C73738EFC3DD7E725508EAE2, + BDAABCE63FA7D1C2E989A2B2, + 6CFC484782F87154A1E75E40 ); name = "audio_cd"; sourceTree = ""; }; + 2A55B251683A4DD470915CD6 = { isa = PBXGroup; children = ( + AD7B08CFB366A42332743423, + ADC1AFDEA18BB2EFDA336B45, + 1EF9281E482B968EA8D4779F, + 2D9251031A81B5CF2C843B47, + EA13FB1DDD68737542D98575, + 94DA91E8B082278F9A14CEFA, + B926D464232B3BB1DC3BF3AE, + 938E19CE08914DFECEB7AF71, + D5A78FE1218ECC63124F8C92, + 40975D2693E29684206C6505, + 46223CF51A61C2ADC95009FB, + 4EA3DB7587F630863A3693EA, + E747D14FFAE7EA755A30B3A2, + 2E3DBA9F927667BC386A432A, + E242FD47FC44715A8593F3AE, + 588AC92B54989307FA16D710, + 423E61161E465283730659A3, + 32268D55B7C74F4C101AA624 ); name = native; sourceTree = ""; }; + F367C338A5224C9213CB6609 = { isa = PBXGroup; children = ( + 34CBA7E15A8614DE4047D0B6, + 5F84142B998D47D4367B3E7E, + 1C89AAA7C7247D8B5D6BACED, + 12B982373762043F81FB4590, + 2A55B251683A4DD470915CD6, + A0ADCE1D14A449540F7D389E, + 08FF0AD4801B146598F82D3E, + 402576A746E2BA7883567D46 ); name = "juce_audio_devices"; sourceTree = ""; }; + 7545EF2861EC74E7F0701EF1 = { isa = PBXGroup; children = ( + ADC2252BD2D4F5538FCD9A00, + C901F12BE7634A7950548BCD, + 95C2A72AD5660572349E8B5D, + F277DFB8EEE55D4937FA15B3, + 9058D37AB7D849D9B4676199, + 67AFA6333F63AD3B994993D3, + 3344A70FCDD784B37DBCC158, + C814A111027DAC7F98798B2A, + 377B969B90C21A3445C32FCE, + B522C55AB3A354D0EE770A71, + 41F181DACB4616FB2992756D, + 97481FA6736B14F4563FB2B5 ); name = format; sourceTree = ""; }; + B5ED5E6584547689F8D7A38D = { isa = PBXGroup; children = ( + F5CA0326AE54AD7152D9306C, + C39A8E1CC1B396BFA8254AC2, + 49CBF9DDF116C8581023EBD6, + 10E25D20492F4DE177DF13D1, + 393AD0788AD728AE54428DCE, + 3E3A201F6EE63BC96C267FB5, + FB94DF90C3B5625410089C7B, + D207DF5DA47AD3BB2AC008F5, + 7DF71E1257C51B571ECCD382, + 8AA9660180935779F2928906, + 6A84B1461BD5AD2E6CC463EF, + 810A49611D6D71936E7DEE5D ); name = codecs; sourceTree = ""; }; + 6F10FB943DD0E03288A5FA02 = { isa = PBXGroup; children = ( + 3554034E637CD420C22AF83D, + 1D0A5377E6D29C302BE09B5C ); name = sampler; sourceTree = ""; }; + 95CF431E7EE9413FF48C0D6E = { isa = PBXGroup; children = ( + 7545EF2861EC74E7F0701EF1, + B5ED5E6584547689F8D7A38D, + 6F10FB943DD0E03288A5FA02, + 3FEC5385AE95CA8192259DE8, + DEE1FD0F518F4FE4ECBB9BFC, + 979FD7AFFA113B4620DF71E0 ); name = "juce_audio_formats"; sourceTree = ""; }; + 68E50F42BD0F124E89E2CC9A = { isa = PBXGroup; children = ( + B98541A5F98F5772D0D11A6F, + F68B0F7EACD404EF4902D824, + 240BD288F3408B117610BAF0, + 42A858AABE6C264E35C506E2, + C295AF7C201872B2F8BCE38C, + E74D2B5966EDE613BB66F969, + 65AE892960E70DFFA91FC34F, + 6CCF82CABFC7CD3828EA514E, + 350B3D6B87D3C8D2A89DC50E, + 0C2DF8EA8D21C76B535979F3, + 7613C889F6A6284C8777083A, + B6F6E1B709580F82EF36963E, + 23AC4110CCE22DCB266C76A6 ); name = processors; sourceTree = ""; }; + 378ED330774764AA665DB581 = { isa = PBXGroup; children = ( + 08CFF5E6CA0AEA75B829BDCD, + 3FC8CE63D01AAF72F4EA7EAF, + 46B03D581336D14F45CB7EF8, + 4B8CF62B65C4F32CDEE1EF6A ); name = format; sourceTree = ""; }; + 31B0F213666DFF342C2F31FB = { isa = PBXGroup; children = ( + D2BA720C39A8E1CC1B396BFA, + 792453B5DBB03ACDD0665436, + EEDDE4BB8964782B039EBA0A, + 5869767E50249CC14AC86D4F, + DA41D6B9CB2BD0E38F11AFB2, + 95F27D183BDD95B97C36FC84, + FFDFA4FADE46C499D75FBF21 ); name = "format_types"; sourceTree = ""; }; + 4FC748452E42CC700EEE0ADA = { isa = PBXGroup; children = ( + AE52FA00D8312201F092FE17, + FBC575692B67E16268C03F22, + 28DDAC3C82C7CFBCA368A4BA, + 2F7B5FC2FB64601A9322847B, + 0F8BF051777FD461DEA0EB03, + 1796E2722F7F70338DAA4C25 ); name = scanning; sourceTree = ""; }; + 93D8A503144AADF98DCFD0EC = { isa = PBXGroup; children = ( + 68E50F42BD0F124E89E2CC9A, + 378ED330774764AA665DB581, + 31B0F213666DFF342C2F31FB, + 4FC748452E42CC700EEE0ADA, + 69B629403853AA619C94615F, + 3B2B1189687851319F8D622A, + C22C2E25C13CE06BEC876609 ); name = "juce_audio_processors"; sourceTree = ""; }; + CA434F5DF551D188141C868B = { isa = PBXGroup; children = ( + 93D4362567EF7EE249D1F3A1, + 5EC01CB982BFEBFC4DE98273, + 6331FE7EE3529F53E1D960C6, + 8C0CE77FA09B4149B5A6A10A, + E5FFCA61985BF889693D5737, + 041FC0A6B3D2D205A44991A9, + 17F0BE5EC80371F744967B0B, + 9BCC05514DC58B654A414F98 ); name = gui; sourceTree = ""; }; + 0DCD3B0AA20EDF472F63AD81 = { isa = PBXGroup; children = ( + 4816BB0A1BEC11A016974378, + 2C4B164709245243F01E9A78 ); name = players; sourceTree = ""; }; + 887920741494A73F91150E97 = { isa = PBXGroup; children = ( + CA434F5DF551D188141C868B, + 0DCD3B0AA20EDF472F63AD81, + 4013BE586FAB406432C1BEEE, + 3DC1260F6F22CBAA444C2E31, + 24416D5ECA25FC37EAB2BDB6 ); name = "juce_audio_utils"; sourceTree = ""; }; + A6EC4A656C5D7458AC474BB4 = { isa = PBXGroup; children = ( + 063037B8BE557D35FE9427C9, + D9C5AC0DE7DC7C16EA8C93B2, + 8112661B4861C279ED1012BB, + 7E5EAA9EA45E5FC33E862D16, + 2E85BCBDE3E20ED6F95AE135, + E7DC7C16EA8C93B20BD5320B, + C8D91126B274C259088DD545, + BFBA328841E9B5E0EC7E95F4, + F1977AA1120CA5B5E723866C, + A9887417203C79CF75B9F83D, + 1E66647BC38F2C05D5822AE4, + 292DEA7EAE860940C0886B4F, + 306A320D349DD3908BFFDF9C, + E96469EE49F1B1E0CFAA538C, + 4E8A42564A48135F71101382, + 738970A3440A71A1A9718FC0, + A32FECD2A064A3D9689F0127, + 2FD33E0F933A7475B72085B4, + B7609129372BC34EBD8AE4EE ); name = text; sourceTree = ""; }; + 61657E4D7919CD678686F740 = { isa = PBXGroup; children = ( + C8A82485CBE3D5988E8C512B, + 74D0EF4A955F1407EE131141, + D439F0CFBDB20D8BA9936172, + 9822A2466C7779EAED41B884, + 874BD38924B7E497DFFA3297, + 33675B074C152815010E0FCE, + D108F0D29C72AB0771056A43, + 90113449B6DAC3C7C153DA33 ); name = maths; sourceTree = ""; }; + 3183649EE6C758E0BC836035 = { isa = PBXGroup; children = ( + 029E2574F4E658126B28A74D, + 37AA83362EA4B4F06BFFE6E7, + B941BA189A71C84550072449, + 63988C030E5C13E60EF26383, + FFEBE6C6663339B171BC01FF, + CFD307B9919A9E3B96BFEB51, + 92AE75B3647098CC510466CF, + B56E652FAD2C378EA0443850, + 2C33EC6420413E0CAAB7887A, + CF9860B08787A0B22044A248, + E4F312D3E70F1C175BB5ADDD, + 1A177071A7BAEC2AC59CA2AD ); name = memory; sourceTree = ""; }; + 23D4621D6F81D8EB817A3031 = { isa = PBXGroup; children = ( + 4C3B4219E7C2D68961FC1868, + 446AA543AEE4FE2ED677EC1B, + CA63D088C939F2F855ACCDAB, + 8F30140612FF50387394FB1D, + 9FFC85C47CA3030875910F8D, + 66F562F4792525F5908CC9E2, + E760555233D13A9E2311F88F, + BC977C907C8F4F166CD26294, + 859B0FBD74282AC90C2C402D, + BD4F8792611E3EA1683AFC13, + 65C23643821D36E650CB1DD4, + C310445CCD405A3D4FFB54AE, + CEBE1F81B541F2DE3D380B19, + A4B339F9CFE7934EDBD8FFE5, + 814BAF158759DE67B645C393, + 51E27A8505B842B4B444DC26, + 777A30B991A93312852813BC, + FB1E1ABCE03A45AE0E5712B0, + B3D5338B24558EEDCBEC47A4, + 2DD387EC7A13E8463F3433D1 ); name = containers; sourceTree = ""; }; + 420A8DE4E0228CBC3D953B00 = { isa = PBXGroup; children = ( + 940D28704E70877158A0B253, + B9358CFCFE279A5311C87CD6, + C32FDA9ED5CA1971CD81C4AC, + 2F781D5D214E4B41A545DE03, + 1584D44D2952B9331D23F1FD, + 49516ABC2D374106A500FA5F, + 6298640CBAB1060EF5913837, + 10BE6CC45D3CA6C96BAB177F, + 85AAA6DA2623F294BD833824, + D69EE578699DF38D2BE66099, + 34C51F6BB36BC6356ADF32E9, + BBF63FF3C4567CD563E4F7F4, + A51FFF092902D75154EC627F, + 2567CA278A400B52E46FF274, + D37C48E300D0216359C0E997, + 219AAB4EA20CA4330C81E626, + 043588B891656D382DE0A360 ); name = threads; sourceTree = ""; }; + FD3841B531C7CF731597A30E = { isa = PBXGroup; children = ( + 2CBC1DF2BA7946F26A23C8AE, + 8904197F1519076280CEB88F, + 59C8A8FC8D7848C8B0652B36, + 4D7727B2083AFF3B36C2E677, + 25627AE84B36F28EA695C8F9, + 206E76A5E95E71C014FAC29E ); name = time; sourceTree = ""; }; + 998AA364ACE311149F32578F = { isa = PBXGroup; children = ( + FF7D80067E120E8AA687924C, + 1BB9E81272C486C6052B7E00, + DCEC1BF462468083D438808F, + B1C0934F874622A828D25A46, + 56CE53154BA1FBC3226EC4FA, + 54E57399D7FC53F08FE3F2BE, + 0C168469D44EF7D2926C6511, + 5D209984601CC1E682FF9064, + 0A0EDDC54FF0EB2C6291CDAF, + 54B4AB4059633CE1B324F077, + A0780B8263E513F71B30E272, + 5FAE6A5E96433512E674BD05, + 24E26C50B4A8E832080C5F61 ); name = files; sourceTree = ""; }; + 21F975637CEC4E7C450C8E99 = { isa = PBXGroup; children = ( + 90D9F77E8E7EDC2E33A7C31A, + ADF2B1DAC135B68CD4B6720E, + 702D6718F50A787997811078, + A0E193F77CECB9A00DF50339, + 9C54ED678B0A6FD1DF14A3A9, + 67244EF4BA80FF0A9154A7C6, + FB5BA72259C159D60DBE7E2B, + 390A4CABF25C731329DA019E ); name = network; sourceTree = ""; }; + 26F33FD302B44F78DA992FCD = { isa = PBXGroup; children = ( + 2B8EBD56EEEA5C143CEA4253, + C973C66571E2962637625A52, + 9F3E12140129D6EC52A47DD0, + F4B290BEB3D11D0E9D5BD4D4, + 081A449D053F2047E70010C8, + 0E0FA96BD552AE3562680054, + C6198C094148D5D1054FDD3B, + 22D9A9F931EF5E0F21CDAE40, + E5CD452EBDF029F663A98C18, + 4C6C1B63664AFC984EBB1AA0, + C0F291F996C9885194532170, + 661FB5E457C3754FC17308F9, + 3F2E6416A52E2766F8821490, + F5C1A8287F0E150BA7CB93DE, + 941FB4565263F73753345AE8 ); name = streams; sourceTree = ""; }; + 4327159CB80E9FD2CB7A700E = { isa = PBXGroup; children = ( + 751FAC7542E81A5C433D8CEE, + CFF5C17391E2AF077C7A4BD9, + 5539D1BA408B12D138CB9733, + B6BB75D678C7C4A737059B11 ); name = logging; sourceTree = ""; }; + 7006BF00BED99951A91442A0 = { isa = PBXGroup; children = ( + 0C387354D61FD7E6583CCE95, + 2F86414308872736499C02B4, + 674BB7E7F20CCCF99FE1B72E, + F96289D7427562E2F4F1B20C, + 69D51183BF7F82628DABC216 ); name = system; sourceTree = ""; }; + ACAEBEDDA92CAE047F30EC0E = { isa = PBXGroup; children = ( + 6AAE8FD78F62E27C954B3546, + 1601ABB2AD716AFBAAA7D35E, + 25243DD224A90732541E6165, + 45ECA3D19E104B60E9D702B3 ); name = xml; sourceTree = ""; }; + AE4444936C725B2BC50E47C2 = { isa = PBXGroup; children = ( + EC1D81103E0E33A595561271, + 1283125701BF9E97DEC4957C ); name = json; sourceTree = ""; }; + DF737AB7702C8743595F801C = { isa = PBXGroup; children = ( + B0036BAED6F079F2B7D06F4B, + 9E07576AF64364A9795E6BF8, + 43AB309EA53E6A826CD09B48, + E561B1E0E55CD49507434F07, + 89F86C80D4341EAA34A6F29F, + 64CAD3312170E5DBE8AA8348 ); name = zip; sourceTree = ""; }; + 5CB8B1BA24EAE127201D572A = { isa = PBXGroup; children = ( + BB13144FD3BB91DC15D9AA3C, + 4B86DDE93207F29101A473B2 ); name = "unit_tests"; sourceTree = ""; }; + ED6DB2289BFF9CD9EBB3FA57 = { isa = PBXGroup; children = ( + CA1329B5CA25D7E081BAD705, + DEC2B87E2DDF944A23018D06, + EDCEF199352F46CFB6617CE2, + D95B727C07CF687210A0F6B3, + 178E168940A70F4C014BB08B ); name = misc; sourceTree = ""; }; + EB75031D414FF79274E6DCD5 = { isa = PBXGroup; children = ( + E890FCD0A70F254FB9A71E1A, + 622BD07C886D6A0CF184234E, + D106B48F1EBDA833E822BB67, + EF9A8F5E876781E38DAD5437, + 2A079009E67A9E1060B752DF, + DE99E7177710325DD24D9A4D, + 73E15D74B4DFFF343958E0C9, + DE2F1DECB93E68D0677F04D1, + D97D6F12470EB9280F7836FD, + EC28076E92487621AA052C98, + EB0BCAA2C7B1EB686728A8CC, + 90727D848E066F87A06E68FA, + 94FDE3E9C11178E22B2FE85D, + 8AC52C8993A3DB5AB950734B, + E2ACFF7A0DD149CF09C2A456, + 62AA264130AEB57E8FE894BE, + 311C929BFDDF15E46F494CBB, + FCAE15939C1518C440C3D2FD, + 09901706BF99A625649A0863, + 117BF51288AF1F231DB2A872, + 13513EE40AD6BAB30E26C88B, + CDA562DCC391C52498536C0B, + 2E570649CD01AAD17DBD9E7C, + 9D29426872C2E6110E8844E7, + 3FEC15CBD8E0402F376B6099, + 30E571D94DC4ED10C56D003C ); name = native; sourceTree = ""; }; + 5AA0A1F94D3BB760E7F0B6FA = { isa = PBXGroup; children = ( + A6EC4A656C5D7458AC474BB4, + 61657E4D7919CD678686F740, + 3183649EE6C758E0BC836035, + 23D4621D6F81D8EB817A3031, + 420A8DE4E0228CBC3D953B00, + FD3841B531C7CF731597A30E, + 998AA364ACE311149F32578F, + 21F975637CEC4E7C450C8E99, + 26F33FD302B44F78DA992FCD, + 4327159CB80E9FD2CB7A700E, + 7006BF00BED99951A91442A0, + ACAEBEDDA92CAE047F30EC0E, + AE4444936C725B2BC50E47C2, + DF737AB7702C8743595F801C, + 5CB8B1BA24EAE127201D572A, + ED6DB2289BFF9CD9EBB3FA57, + EB75031D414FF79274E6DCD5, + 7151A764624596455542FD09, + AD0832D6F3AB6791E69314EC, + C48263DD054DE03C909CBBA9 ); name = "juce_core"; sourceTree = ""; }; + E5B0983F7D1A403F2771C628 = { isa = PBXGroup; children = ( + 2D32323BB011BDBFEBF159FD, + 78F0EACFDE571530553B40E9, + 240587B599BDD28414DCEFA7, + A55CD2FFD07885CB23EA9643, + 02C9E6DF7AB6EB4B7F1BADB4, + C623818CF3D2E330B204B41C ); name = encryption; sourceTree = ""; }; + F89693FC360AED110B092BC6 = { isa = PBXGroup; children = ( + B1592D2F30D12C6EFD1552CA, + 8898DAB72C17D587EB057104, + 83EC802AE5B66A9550E792CC, + EFA0A385B661B4606A969464 ); name = hashing; sourceTree = ""; }; + 5B583EE18BCD9814D77CC79F = { isa = PBXGroup; children = ( + E5B0983F7D1A403F2771C628, + F89693FC360AED110B092BC6, + 499ADB134BAF9A23E402878F, + 1139186CD1FDF228C071129B, + B9F4F554436877EDFBD4CC96 ); name = "juce_cryptography"; sourceTree = ""; }; + 9C65E7F52E573A350DF8E9BA = { isa = PBXGroup; children = ( + 7CA3F6CEC6B33D2D0B03DCA0, + 66018343321C29C9E424FC82, + F8C9EBCAFE42D2A16EDBE2DF, + CE987CF4CE27BDBE2073253B ); name = values; sourceTree = ""; }; + 14943914DA17F0B0C9E11408 = { isa = PBXGroup; children = ( + 1891AD01762292E7727D6F47, + EFE6060C0638C49DC5E4F18F, + 07B57AB2EF2055DDA75A7E4F ); name = undomanager; sourceTree = ""; }; + F260C3BE7A062E1D407188B9 = { isa = PBXGroup; children = ( + D3C2ADD689B7C9675825D7D3, + 5E265A40056244CE47403EB7, + 65FD33B8E2EF0C4A7369A730, + 624CC23973A125CB7BCAE2F3 ); name = "app_properties"; sourceTree = ""; }; + 3F560869028EBE6C40A1A182 = { isa = PBXGroup; children = ( + 9C65E7F52E573A350DF8E9BA, + 14943914DA17F0B0C9E11408, + F260C3BE7A062E1D407188B9, + 5F446A96BED7F585F66B9E7D, + 945D72F5A0E0CFF075FFFCCB, + 19EAA34BCB41071024A248CD ); name = "juce_data_structures"; sourceTree = ""; }; + 0623E1C012A55B0F64F29B60 = { isa = PBXGroup; children = ( + 3A7DCC0474290572A4236A7C, + E49D3B59703FBDDB86AAE641, + CBF95C1BDDC667F72FC76F79, + 9175514B7014D5CCE634B3D5, + 39DE08F9B0CB040518C747C1, + A7992C306CEFE681608B13A5, + 29A38C66311AE71DC91CF439, + 83C95A4C2D86D529D861EE31, + 064C101C015D3000DE7E02CF, + 89EB1136116ECC63BADDBF5C, + 05E0E331D082358CE4D07D70 ); name = messages; sourceTree = ""; }; + 879BD8562CD5B2FF8DE4AFA1 = { isa = PBXGroup; children = ( + 371AC755F11D82A159D53A22, + 03CFD2B9CA3FE198F657E2A9, + D439CA229128977B2458D756, + 70F316EC3BE738FF149ECAAF ); name = timers; sourceTree = ""; }; + 620CBFD69394FE4B51F60619 = { isa = PBXGroup; children = ( + CECEA2024CBAB3AC35C05B73, + 9B4B91B220814CE75CF05A13, + 7CF7717E78F5FEB6D8FB1FDF, + 42E7482C8E71FEB9734DEF5C, + 9B0443979E3218D57C13F7D1, + F068B3F83A99A151939E2A79, + 01CEE62F1189EA5E9A2381A6, + 71D5DB9DB6F0B57DD88665BF, + 643C064BF7A994919C4030F7 ); name = broadcasters; sourceTree = ""; }; + 0C65851AD8B8F72B5022A7A0 = { isa = PBXGroup; children = ( + A97B19E92B9371F73DD4EAF1, + F2E95E2AF9852B43DCBF04D5, + 343B9539AF1F75DDFDD5537E, + F64B7F5C2EDA5650B7790491 ); name = interprocess; sourceTree = ""; }; + 02282B18FC7EF9236A50BA39 = { isa = PBXGroup; children = ( + 0E82DF0F521D54356AC2092B, + AB650D6A05C0704879D92693, + 781A769FF7A7799E897E699C, + 9C251E4615E9D4DFE3CE1668, + C9074051672D1415A2CF0C0F, + B8B085A7F4D5C59C7B01937A, + 9E187A5A064CC3CD55BA5D76, + 1214C104E827417A8EF02092 ); name = native; sourceTree = ""; }; + BD61C84DBF1CFFA5224D0D4C = { isa = PBXGroup; children = ( + 0623E1C012A55B0F64F29B60, + 879BD8562CD5B2FF8DE4AFA1, + 620CBFD69394FE4B51F60619, + 0C65851AD8B8F72B5022A7A0, + 02282B18FC7EF9236A50BA39, + 63BC4983AB677B34020A7E14, + 94121F83242BFF073C048DC8, + D5538B33BDF1CA0139A0F904 ); name = "juce_events"; sourceTree = ""; }; + 86D45CB4B1C570AA6560B736 = { isa = PBXGroup; children = ( + 4B8D17F77F2E2E7A2419CB17, + A889AB0F3F5A622CBB251F64, + 2FD607573BF08B2CACCC317F, + FFD5DFC9F607C8846B87BE71, + DF66BE2358584653924D6B4C, + 83EB81439316AACC5C464B06, + 7FD559C1F6C00FF00EDD94CE, + 3948719F9EAE29D2D293B341, + 5CE2273D46160852405330D4 ); name = colour; sourceTree = ""; }; + D89D9A869B175BE51DBF9DAA = { isa = PBXGroup; children = ( + 8B52D861ECC6A83BACFEE014, + 43883BEB4043ECB991681E14, + 50D7C5B8301E8D8912EACB16, + 694D7777B2A07009FC69843C, + 41B1C5BF544A1431985C1DD5, + CD662E0EC25C2A5A8FAC4653, + F14967FE683B5F293223FC34 ); name = contexts; sourceTree = ""; }; + 481415D34022D5A53E2C7DA3 = { isa = PBXGroup; children = ( + 50088489EC7B096F63049909, + 2E1061909F4EDFF8F54E3B6B, + B2C10A531A57F19225B4AAB9, + 3DBC748317D662A49D782EC2, + 142C5FEF76D38928C3E85B9D, + 795D59A21ECEAB395EAA12E5, + AA439A3EA1FD07432BB0B5CA, + AFCFD6C11E070C60B03F0E7A ); name = images; sourceTree = ""; }; + 92911A747FD880E409105884 = { isa = PBXGroup; children = ( + 88B8ED0AA4B130C1B7700730, + E0FC38D81C2060421DB7919B, + 8E524F198D43E4EAF7AEA37C ); name = "image_formats"; sourceTree = ""; }; + 118C27A77096E86054F70AC0 = { isa = PBXGroup; children = ( + 334C9EC6327C30323BB99980, + FEB4B8DBF84A3E8D011DE6D1, + B9F3664FF2EA6070BC27BBA2, + 718D187AB6E9DF560A16ECEB, + F737AF27EE6BAB6CF116BB2F, + 9282B1A67A71ABA32F5D0CAC, + C14CB56C9AC7DFE91D4BE8B4, + 82783BCA4DFB1C70D439DDD3, + E50E62F86357572BAFCAE16F, + A8C92D9CD564B783D1D58528, + 3F7D8663E700F665CAAC3054, + BD46AA53CFB52E5B15D35830, + EEB18650B8A4024B5511B962, + 28DB206834B927627974AA43, + FC1F4A2249B0BE8996FEC907, + 189E385BD13EFEFE2E08F803 ); name = geometry; sourceTree = ""; }; + B3D2C460CC5A2871A176953F = { isa = PBXGroup; children = ( + 97A7E45925158D2DA073A44F, + 5957CF17600428D9E31F5E56, + 0C4E749FC530DB9A1D080E01, + BD4DCC143D6C2DF5D27BB45C ); name = placement; sourceTree = ""; }; + 0148494282B9DA8092D43337 = { isa = PBXGroup; children = ( + D0BD6251360BE7490470B7D3, + 3A79DF8F31DB68310EA4D618, + 7B23FC432DE96EC4EC884739, + D94DCFC11C119FF14B1A5FE2, + 7F6D8BAB910B1A91E239FFC8, + 847B9959CEE17F7D28A4FBBF, + 4C5F7BADE443E620C956326E, + 9D36C755D8BA15F5B5159CAB, + 516E73B0C320FE8FD5C28985, + F83266F6597B96E989CB24D7 ); name = fonts; sourceTree = ""; }; + 301CB73D485B7EE2DEBE4BB9 = { isa = PBXGroup; children = ( + F662A560041BAF34318CF6FA, + C8CCC1C5439805F8F2461498, + 76437F9DC1ACAFFD9C4EF148, + 399ECF10BBD29B3C0FDCE79F, + 3410FA9F21DC2C7479B4B5C8 ); name = effects; sourceTree = ""; }; + 4F9EF9B91A34AF9114254A57 = { isa = PBXGroup; children = ( + 2FF1C9B34A5D310E7255F138, + 02D8F876F70B8AB5C140753B, + 0C610E2F6133C4C335B52722, + AFD3335A18DF9B183D15D28B, + E8D8F996D1A50BBE677256C3, + B85981FA35B69A699D517725, + FDA1E14DC4098AA8A10A7AA5, + AB099E74A6260199CAB56B63, + 2E9F302DE7570731AF5780DD ); name = native; sourceTree = ""; }; + 25C0C73E871A04B8785A68A1 = { isa = PBXGroup; children = ( + 86D45CB4B1C570AA6560B736, + D89D9A869B175BE51DBF9DAA, + 481415D34022D5A53E2C7DA3, + 92911A747FD880E409105884, + 118C27A77096E86054F70AC0, + B3D2C460CC5A2871A176953F, + 0148494282B9DA8092D43337, + 301CB73D485B7EE2DEBE4BB9, + 4F9EF9B91A34AF9114254A57, + 69133E69A29734D050F5D096, + B0C1117A4D54308F25AEE311, + 7DD0D59FF092E1EEC1512FB5 ); name = "juce_graphics"; sourceTree = ""; }; + C5CD445B22024CD1653D4E3D = { isa = PBXGroup; children = ( + 2F3662389073C657EC0BA7BD, + 8936E5897F4455B7B8AB6421, + AFDDFB2983E08695C6CA4C33, + 539ACE1B0DF89E7B1FC3BF20, + B195625E3168FAC063ED4AD4, + EA003A212A313C1924302A5C, + E3060C6BA42B5BBCCF9EA2AD, + 2204FF31FFD65C8884F44F93 ); name = components; sourceTree = ""; }; + BAECE29E24A168F87BFD6EBC = { isa = PBXGroup; children = ( + 5CC7E4FBFEB7505786A509E6, + 5F3F40A799345E160AEAE247, + 640E8619D3411FD400D7E53A, + F27E001D237BB52B607DE0BE, + 603684B851BE89291AC59B9D, + 61D4FF10830BBE09885CB8B6, + DA376A104E6E88D7B1A029E0, + 48A8B3169E65395666DBAF32, + E2195543B341B32DD166CC53, + 1C57184B3DEADC988014F31F, + EB366EA56B5D73522519775F, + 9B5039DB0C21013E554CAF25, + 0475A1674219CD5F69CCCD4C, + 50CF2628DC184A8A9F131192, + 89EFCDFB088F88B55D089B0B, + A5B009D9A8520EE4A5E352A7, + A5829E55CE23AEE32B93F99A ); name = mouse; sourceTree = ""; }; + 50085463EEB5F8367314CB99 = { isa = PBXGroup; children = ( + A3BC9AD4B7D7BFD168AC282A, + BA78762DCE67D140CD73C852, + A59D61B53561AD82205DD9B6, + 4A95DBD3A4DB9B10C9EAB39D, + 72CE316BC15E972EEEBAEDAE, + D153857C14A4BAEA2419E2D9, + DD3C934437272E8DA223EDB6, + B412F69EC877F8264F9D3E3B, + B7C417BDE4BAB6C89A4EED91, + 54D1B9209178513F34645184, + F58BC25FBC248CEEA4333F7D, + 039E9097BCDFDDB20CE31C60, + 2146B9FB578039AAB718E5C9 ); name = keyboard; sourceTree = ""; }; + FC2131AF37A533ABDD889670 = { isa = PBXGroup; children = ( + 83D383C9AE6891C35CE161CB, + 396A1ABDB8E1374FF2537F22, + EE9E345FB715B1E9B4069F00, + 74D9E1D09FB0FB0EEFBD3606, + 452F808B06D388A7F846AA57, + 5F196E224EF52F32E3CD0412, + B82096DB8866547441BB06F4, + 23D48F461D6FAA4B583D1EE0, + E2BB92E6C329EA535E1BF203, + 8C1A0D3CD9F76BDE9239F7FC, + 1CD3E52C9790FD96093F34A3, + 2F069D8FED8DD68F6B6A4ED0, + F286546479097D11645BAE39, + 13F3F329B4F79AF9036CBC6B, + 4FBFF90AEC67D3880A4477EB, + A9F0D485F5A802905E1CEEA6, + 0123A28567B7DFBBE03539AA, + 9F8DE145DFBD4E249C6350CE, + 8A7E9EE388B957C79C37718D, + 7332966389E99838048252B9, + 182DA026F007BFFF64F6E3D9, + A7B8632DB9A038F3BD5CB2BB, + 77C1B68815EA0564CBB5EEA4, + 083EF9EA370E5409425A7678, + 07DD4B03D4BE988F37DF5F4B, + 18E52CCD3C28217F4FA9EDF1, + 4D839186E4C1603CE9806382 ); name = widgets; sourceTree = ""; }; + 1E4CB6CFA0C59D5A6B162485 = { isa = PBXGroup; children = ( + 102ADC17D5D8AB41AEE563C0, + AAB73D3C21B0040B5E74F550, + E09FC35A8FC09DBCDA490ACF, + 272EFBDDE9EAC44AB1FB29AD, + 641DEADBC4E42606FA56F697, + E32D68DA3B35C30F2526563A, + 7F04FB22663B2DA2942F8FDE, + 5DC0AC7F8634C8996D28F582, + 53756A7956431B6E058EFF78, + 08BC9AB8E942E2A6D06A8ADD, + 7BCFBF5D405B179C7A4B314A, + 49B20B6F3A578F255E8EFFEE, + 2D5BEF363CA619B0CD32C907, + 29020A4D93D4A2481FD8F382, + F5459E41641F8A8B63EA0C3A, + 6CCAA9A13BE00D110CCCC6B3, + 3DE5176B5B1563D250712B93, + 47FE99E8EA120E1F73DFB9C7, + 162E80F51595D2E7C16242A6 ); name = windows; sourceTree = ""; }; + 3FE03B721D4A3A70E3ABC882 = { isa = PBXGroup; children = ( + DBB909679AD10C642370F3FB, + 76575E4E6028876F950F1455, + 9D7619718D7CC6D72AB2A5D4, + FE19C49671936C02C54CA659, + 5BFB0065A4DD6BE555A5ABEA, + DAECE87DC442032D79ADD613 ); name = menus; sourceTree = ""; }; + C94093E3E2C39782341227E8 = { isa = PBXGroup; children = ( + 7546CFED0D976C353361D79A, + 0BDF9D5B5EE2CE56D8DCE877, + DC8055201A2D303C7F0538CC, + D6455AAF76F63A5AF005B150, + 3F7E8A8FEBC3C474CAE06ADF, + E9CF257A8792663A43552639, + F00E622AE37E2DD4A04EE7CF, + 0845481578E95EE156F30967, + 139218E9D6D5A078FF58A417, + 9BE9D180A200AC0A15B75E9C, + 941A44F57D6415E845CA934F, + F5A9D4C013E87CDC5FBD477D, + E301A3CD4036E6E6038EFD16, + 00C4E097C1D4856FA6B4DAAF, + 874976F4EA0F753B24438044, + 6A6B0E06CB2C33F89DDF1F01, + 18ED3771E0A50CD816D2A6FA, + CFD90D0BB35E30A29891649A, + 2EB42F1313E76B86AD2BB71E, + 80C5E9D58CCC2AE9107FB8B7, + 5E17D037ABC657EBA07EAC68, + EAF4261C2F180AA5B65BD57A, + DC6052DD9293D5F2A39AA190, + 47FC20961BAD642A858AABE6, + 4180720250D61DEBE80EA304, + 7176AC0C1FEF6703947F374D, + C85B784A5706205A94FE3DBD, + 86ED84D148866631928AA6F2, + 26EEF91657546D70AB7B2709, + 9183C2461096CE5EA786A2F1, + A01B82C705EF26CBB5B92DB4, + 26DB4A3042598E95D58C9C05 ); name = layout; sourceTree = ""; }; + B0610859340FD533F8B22688 = { isa = PBXGroup; children = ( + 8B9A89E8A056BEAC561A80A4, + 3160432DFC1EAF9FBF7E9564, + FA4FA2F0710C5B84EB365687, + 0D744CC449B92F39574EBEF5, + 60840E1D24EF570F22E09E50, + B1A66263F1891A0B251C4C92, + 7F3C9B5ACFD7F6AAFC09C234, + D8BB02F40FBE5659EE969B51, + D5DE9F5376B6B8DD5AFA7CE8, + 5625C02A4FC4C755CB806717, + 113D26F57B2CD8179632D742, + D3584DC98E105FB3F9FF90B7, + 554DF8F88A7B831AC92DA90F, + 3BC46CE051B4197498448563, + E48D4A08067E662AEEE3FF59, + 32855B677E5C0467E99413C9, + 3FB2775062292D1CFEC55DA1, + E819A1BFA34BC635026C6693 ); name = buttons; sourceTree = ""; }; + C88502A9B91A856FED510539 = { isa = PBXGroup; children = ( + C2B4AA6084D771F955E1FEBD, + 8EDED66ECB6E9EC80C8E4BE3, + 3C0C7225D6B36E61883A5D3C, + E358D24FA3B568035930B037, + AB415E8F30A47022E0AB89D2, + 1FF26B1BABF4E560301543BC, + B2FE206075F9F778DAECF5A6, + 41A545DE0315B36BE103F0AC, + AFF2E7586D4EBC3A9A624133, + 15CE14DEFD72F75DC92BC42E, + 26D55684ADFB9C9934DFFB43, + 73A03E444EF58D2CEDE7B752, + 5EACCAB871208A99BCDE6810, + 029FD3B879CAA86E19130146 ); name = positioning; sourceTree = ""; }; + 33D4E375D98D6BB02FD88818 = { isa = PBXGroup; children = ( + A91FD1D47168A8AF40679AE9, + FF0AE315E203DEC06307AD41, + 2D0EF17B91F2CC705FAE4607, + 94CA5C61232419F06E94F4F4, + 65EB1940B412485E03A3D915, + 4011021A504F57A62C50CF4B, + B232A58E5216B61097402A49, + 1C3E354EFAE6CA30DC2B28DF, + 85C2419FF027BE35D8DD8004, + DD06118C1A7DB2B815108D33, + 3C742E763EA133E3931B5EB3, + 8970E6607ECF286019E9FA13, + 061497E22C4E67CE892F4F87, + 72494272CE300F994D005659, + 1F9F7F7F593F3B5592CB1061 ); name = drawables; sourceTree = ""; }; + 97AD50B854BD282AC8A1F32F = { isa = PBXGroup; children = ( + ED91C66FD7D982DA1104E76A, + 2D3E05DD199D36BA2B19DC43, + 3D17CF897668713E7031E673, + 1BE540AFF33D24BD3E5A288E, + 4E4309FCD9191B0FC0466DBF, + D9A05E1DB132658212B0E51D, + E645981CA10B8D5576462975, + 94CCFFC1ADBC264B1DC39887, + F11FD718D953943D6576572C, + 97A506FFA27B3C9801A87CC6, + F91150E97C6CDADE38C84F1C, + EFBDE96D4211E697F43821CD, + 65A780DB6EFDB2F599FD2380, + 35DA6512F84BA1C3CCDEC3B7 ); name = properties; sourceTree = ""; }; + E2AE9DBF82B5981BC7BD1E6F = { isa = PBXGroup; children = ( + 2F5535CE15A1996FD473C697, + 19A9E3B96BFEB51BE10618AE ); name = lookandfeel; sourceTree = ""; }; + DB2116783E0CB1C53295AC27 = { isa = PBXGroup; children = ( + E1B19480FDBFA900F35AF1FD, + 85369DC5F12B3D3BC948DF17, + C08F186E73B22E591F16AD67, + 5C210F817CF0CB7CA84C761C, + 164AA30B09A0724FCD01223E, + ECAAB6B5DFBBF9BD0CD5F5A3, + 13032F93973B9427596CE33D, + 0F318A914330BA898B89E781, + A3E91859477E5625D848F9EF, + CE82075957F49EFD63376810, + 34A0FC3D36D12F6B31FDFF1F, + 870C076EBCABE3DD4EB5D91F, + 403B741BE3D2707C1EF69B70, + D8E5F0C498A1B384975AB6DD, + 14E995251E19AB0690C4A577, + A27BA1448CCC9C8F351B72F2, + A5F8F1FC976C8B55D43AAB52, + 8CC15CA05556342116EF46B0, + C374886F4409A5A6A7B80EC1, + FA73AB79171906FDEEDAE61C, + FDB212D2BC0152F4E74FEBF3, + EADCBDD77CEBE6041018ED3B, + F7DC6DAA511447FA98F327C2, + 9BB537F1AE8BD69BAF92FFDE, + 52DED83FF18C19AA26DB38FA, + A5CDBC5F16FC4C828566E443 ); name = filebrowser; sourceTree = ""; }; + E2A1D9FE9AC8AFBEB906D012 = { isa = PBXGroup; children = ( + C40A6FDF64FB9212CDCD61B1, + AA12481D838D026D315CEF80, + 74FFF0E08A2780C78EA13E75, + B4366D212482B2764F1D669B, + 22C3A8BE42CD5A5B6DF16DC4, + F9B8E34C90732BC803EABFD3, + 7256657E1BF8F2F6CE75F2E1, + B00B363C8CB643119E0969C4, + 524CDD5D2BD1C354BD5AAAEF ); name = commands; sourceTree = ""; }; + 9DC523AB54117259531D1CA7 = { isa = PBXGroup; children = ( + 9090B115C3B62A21681876E0, + F18FCBE1E212F62E3287E970, + 65B3A8348A3D727E95D4C9F1, + 0A3D2DCDFE136837420BC105 ); name = misc; sourceTree = ""; }; + 17138A6E8BEC1222F139E4BD = { isa = PBXGroup; children = ( + 14520843CF276BFDD546454B, + D10138F57CD1F48313E51610, + 424B8C2F15294922CB0A996F ); name = application; sourceTree = ""; }; + B2979FB3E4771D5805398883 = { isa = PBXGroup; children = ( + 09BBBD942839218FF8866B9E, + F13046936284D70C57621E8B, + 1E4282B4BE7CEE1624379D62, + A1A18D8E9DCAE8D88900F297, + 3329CEAB7BDFC1F89DC2E652, + 11F9A319F9C07F2071858B86, + 5121C279B202678849697048, + 623CF7B0989D67045AE1665C, + 2726421A3D9E25791FEA1CE0, + 299A52AC1688030D6F159B75, + 315A2FF7CE056C02D2756437, + C117B9421807FD3ACD799FD5, + 8E6269D284D4C7E1E28121E4, + D0256D08B11506D28F7FEFDF, + 048A5D3CA1AD56E75971FF98 ); name = native; sourceTree = ""; }; + 82A38CF6071E5CFA563D24AC = { isa = PBXGroup; children = ( + C5CD445B22024CD1653D4E3D, + BAECE29E24A168F87BFD6EBC, + 50085463EEB5F8367314CB99, + FC2131AF37A533ABDD889670, + 1E4CB6CFA0C59D5A6B162485, + 3FE03B721D4A3A70E3ABC882, + C94093E3E2C39782341227E8, + B0610859340FD533F8B22688, + C88502A9B91A856FED510539, + 33D4E375D98D6BB02FD88818, + 97AD50B854BD282AC8A1F32F, + E2AE9DBF82B5981BC7BD1E6F, + DB2116783E0CB1C53295AC27, + E2A1D9FE9AC8AFBEB906D012, + 9DC523AB54117259531D1CA7, + 17138A6E8BEC1222F139E4BD, + B2979FB3E4771D5805398883, + DEEEBDF5A079C2E492F466A5, + FCEFF51F85E96360B6408A26, + 964F76A26C5E1D812D77CD01 ); name = "juce_gui_basics"; sourceTree = ""; }; + BD4E249C6350CE539DFE3B25 = { isa = PBXGroup; children = ( + 8EE1E79E90B11F4B8956CC91, + AF57713844F7A5A1E697DE85, + A2CF12B19E4614F09660FD3B, + 1B383BD0C47E6BBAEA15740B, + EE074728350828C88A5A274F, + 8F41BB38841B484EE63AF6D1, + 16B4B1BD53E04B6C655072AF ); name = "code_editor"; sourceTree = ""; }; + 308FD85F378E278C988848F9 = { isa = PBXGroup; children = ( + 139A0F904A7A5CF7BC458D4F, + 0EF4DC413038BDCA5931030D ); name = documents; sourceTree = ""; }; + 55B87F0D9430051B5EC0F762 = { isa = PBXGroup; children = ( + E4DC76046FAB005F340CADB4, + A9E47D07EC9231EE725689C5, + 444C55DD8EE701930E0119A0 ); name = embedding; sourceTree = ""; }; + BE2FCCC30B254193FAE6BF62 = { isa = PBXGroup; children = ( + D1F3368FBB6EA1B0E395410F, + 80219C0DFEE068E1AFB77DD2 ); name = lookandfeel; sourceTree = ""; }; + CF0BD861011D003482A09E57 = { isa = PBXGroup; children = ( + 35B84C6EFEE8EDA81B2CECDA, + 600485BEE68BDCCF068DFC7C, + 97CAC309C391559FB944B75B, + B6D3036283FDCEE97B8B0532, + 79171B6126FF71CEA1AF36BC, + 221B9433BF8FD422D9E7A306, + 28D6521D55A093D390035C46, + F0E8E9829E95E32163F45482, + F23FA1819D68CFD815296D79, + 4431D8080CE9594075F833ED, + 99FF73EB10EA291A28F7BEE8, + 9B68C04DB60D30ECF294A575, + D57E232C5FA2DC3352B2FD60, + 4D21EA1C858685693C6B3933, + CF72289959650D1177F07F9C, + 77C5F7D331B1EA06BC33EBE2 ); name = misc; sourceTree = ""; }; + 1AC99D3EEE323A04D3AE63F2 = { isa = PBXGroup; children = ( + D3997A8434877DE8361FF40E, + 621C0A10B10C7A54D0DFE222, + 2DC640F4EE63B61FA5939678, + 303A455D4E0CD6DFF1FD5B63, + B15E14ED7CA655AD841D5B34, + CB79F13A10D15E86A11FB48E, + 5F230AB00C842BEF7F5946EE, + 828065AD25DD3FA73A90EEE0, + EAE1B79B3D4974D15F8A52FB, + 12B1B8A981AC3A10AAB25B17, + 234F4FF80715D9AF48566F07, + 261A3EB888E5CC8ECC8EE1D5 ); name = native; sourceTree = ""; }; + EC7A8CA0D51712FAFE014D64 = { isa = PBXGroup; children = ( + BD4E249C6350CE539DFE3B25, + 308FD85F378E278C988848F9, + 55B87F0D9430051B5EC0F762, + BE2FCCC30B254193FAE6BF62, + CF0BD861011D003482A09E57, + 1AC99D3EEE323A04D3AE63F2, + 2276FB07A4DF1E45EE4DB845, + 3E14DD1434886736A4068785, + 5AA0BE330B0989B0BEB494A9 ); name = "juce_gui_extra"; sourceTree = ""; }; + 2AFD87CC8AFD1A446B75184A = { isa = PBXGroup; children = ( + B3AC30A457CF73FFE522F45A, + 004FE4B78A89723BD6FE4C83, + F84AF9F674BED841E97320A1, + D06619F7C5ECFFF953A50101 ); name = opengl; sourceTree = ""; }; + 8BACFE9F54494195BA7FF7D8 = { isa = PBXGroup; children = ( + 70CFFFF4235A2AB7832E2331, + F4F9FE207892A3218D2CB374, + DF720978B38045A5B750E17F, + 7A528F1A3E485EE9406C59AE, + 44D5A8110CE894496E0A7718 ); name = native; sourceTree = ""; }; + E50F4DA1FA6E717AF1876F8D = { isa = PBXGroup; children = ( + 2AFD87CC8AFD1A446B75184A, + 8BACFE9F54494195BA7FF7D8, + 6B7855A37449D2D3664E2F4E, + 956EEC0F9A7804692B5AB7A3, + 922662EF3F4C65D2F0769A90 ); name = "juce_opengl"; sourceTree = ""; }; + 5DE40BF538247E9887297ABF = { isa = PBXGroup; children = ( + D997ECF27F5E0D8634BB5FAF, + 53DC83C971FEBE8F42A31ACA ); name = playback; sourceTree = ""; }; + 5F3D9EA238ADD783EFD1DFE4 = { isa = PBXGroup; children = ( + 1D2E6D464E81D718E68C531C ); name = capture; sourceTree = ""; }; + 834F22276689685D839BD252 = { isa = PBXGroup; children = ( + 35B05701A265D800F245A5C4, + 5405489B854BBCD01B70A2B9, + 92BE55DD9B11BF61D051E063, + 87B68B1D54430FA9E894EF9B, + 693D6F5537644C7C53AAEE5B, + 24D2C47DF6190643015D581D ); name = native; sourceTree = ""; }; + C2D7D45941CBD473DD9BFDD3 = { isa = PBXGroup; children = ( + 5DE40BF538247E9887297ABF, + 5F3D9EA238ADD783EFD1DFE4, + 834F22276689685D839BD252, + 1AE6237B9D0DA652DC6D07E0, + 94259F4AD89C143A6ACD1971, + 96EEDFC99C39D23D8746C4BE ); name = "juce_video"; sourceTree = ""; }; + E5BF48D4F140A322338EE283 = { isa = PBXGroup; children = ( + 490DD8FEC1D97C2CF18A02EE, + F367C338A5224C9213CB6609, + 95CF431E7EE9413FF48C0D6E, + 93D8A503144AADF98DCFD0EC, + 887920741494A73F91150E97, + 5AA0A1F94D3BB760E7F0B6FA, + 5B583EE18BCD9814D77CC79F, + 3F560869028EBE6C40A1A182, + BD61C84DBF1CFFA5224D0D4C, + 25C0C73E871A04B8785A68A1, + 82A38CF6071E5CFA563D24AC, + EC7A8CA0D51712FAFE014D64, + E50F4DA1FA6E717AF1876F8D, + C2D7D45941CBD473DD9BFDD3 ); name = "Juce Modules"; sourceTree = ""; }; 4C2E644EAC72C263D09C74BB = { isa = PBXGroup; children = ( EE37A0ECE471A928C6170F9B, E6EF5CE04768BA5B10050D51, CC7EB9777A4DE3408705625C, - A6B37799E63CCE882A3383FB, - BA05C84C3258A1978AF3D357, - F42C91375F3314CA6EE65697, - 4D526A336B2E97ED42CADAD7, - 8679333E781A0A0116AE5D26 ); name = "Juce Library Code"; sourceTree = ""; }; + 5C624870420A64817375E80C, + A256BD38B526BD31BCC8CC46, + AAA6022D779D9196AC995FAD, + 5CD2FFD07885CB23EA96439D, + C43C0FEA8C6649389137CD6D, + AC0F0D8E68C280D7DA3CB7AE, + 556C3FF5D74CD58C26FD4715, + A6DAC994119AA21BF2437B2B, + 4DE24B6BF0BE9EDD0136088D, + 0676086AC62A9C4965AE1DBF, + E8F179460A78DDE3B2515B00, + 1C68AD2D46238734918891AA, + 0939766A2E18CC049FF79A30, + 9C72A7954ADF4933B43F5905, + A6B37799E63CCE882A3383FB ); name = "Juce Library Code"; sourceTree = ""; }; 019CD423F1EFF7A1A0A079DD = { isa = PBXGroup; children = ( 1A9DEA62F6A3CD1FB5CF105B, 4ADECB09FD213B2E910EA229 ); name = Resources; sourceTree = ""; }; @@ -162,6 +1951,7 @@ 39B98C60B57B831FE5215CDD ); name = Products; sourceTree = ""; }; 1609BCDD8EC2BA2A162B68F3 = { isa = PBXGroup; children = ( D6A4B94A747BFCF299B17932, + E5BF48D4F140A322338EE283, 4C2E644EAC72C263D09C74BB, 019CD423F1EFF7A1A0A079DD, 244B9AF7D858999910FD243E, @@ -265,10 +2055,20 @@ F5691895ACDC7B12DE88EFF4, 4D5C0ED42C87FBE02A9C7BE6, 80926D2B83ACF680958111EC, - 2201A04DDCFC361882F8EA62, - 2E98B1DEA8B7FC20ACCD2E6D, - 3A2EC17F8472C338D6A26278, - 36B5D100604D9A300187B773 ); runOnlyForDeploymentPostprocessing = 0; }; + A4487956E52164EADBA0ADCE, + 6DE05ACEA26AB4EFA74D938A, + 6ECBF325EDA0A7AA33F7BD1A, + 84C6BC024FF342D8A5A0C819, + 75AC5AD23DEEB9A0F47C20FD, + 260742CE2C8B22CDECF9F009, + 8CC5384DA09DDA47D2821BA4, + E6506BB8B2D8A35B5199EFBB, + B051345886CF7C536C24768D, + 913A0AB6A02BD387501CF6BA, + 72B85CFE6809DE026C8BEAB0, + 7A762EB5EF0E15225A5DAD4B, + 6F39D6A482BE49E186E21477, + C015523AC4E5FE040F694CA4 ); runOnlyForDeploymentPostprocessing = 0; }; 2E5F3CCB074AC0B18683A4F3 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 36AEC0EAE7AB9D061AD9EFEF, 7938A4501BDD574C4121B988, diff --git a/extras/JuceDemo/Juce Demo.jucer b/extras/JuceDemo/Juce Demo.jucer index 7338693643..9ee5ed61c6 100644 --- a/extras/JuceDemo/Juce Demo.jucer +++ b/extras/JuceDemo/Juce Demo.jucer @@ -108,15 +108,25 @@ - + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/JuceDemo/JuceLibraryCode/AppConfig.h b/extras/JuceDemo/JuceLibraryCode/AppConfig.h index b40b66507e..dd59f43100 100644 --- a/extras/JuceDemo/JuceLibraryCode/AppConfig.h +++ b/extras/JuceDemo/JuceLibraryCode/AppConfig.h @@ -3,39 +3,66 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h + Any commented-out settings will assume their default values. */ -//#define JUCE_FORCE_DEBUG -//#define JUCE_LOG_ASSERTIONS +//============================================================================== +// juce_audio_devices flags: + //#define JUCE_ASIO //#define JUCE_WASAPI //#define JUCE_DIRECTSOUND -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION //#define JUCE_ALSA -//#define JUCE_QUICKTIME -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D +//#define JUCE_JACK +//#define JUCE_USE_CDREADER +//#define JUCE_USE_CDBURNER + +//============================================================================== +// juce_audio_formats flags: + //#define JUCE_USE_FLAC //#define JUCE_USE_OGGVORBIS -//#define JUCE_USE_CDBURNER -//#define JUCE_USE_CDREADER -//#define JUCE_USE_CAMERA + +//============================================================================== +// juce_audio_processors flags: + +#define JUCE_PLUGINHOST_VST 0 +#define JUCE_PLUGINHOST_AU 0 + +//============================================================================== +// juce_core flags: + +//#define JUCE_FORCE_DEBUG +//#define JUCE_LOG_ASSERTIONS +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +//#define JUCE_USE_COREIMAGE_LOADER + +//============================================================================== +// juce_gui_basics flags: + //#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA //#define JUCE_USE_XSHM //#define JUCE_USE_XRENDER //#define JUCE_USE_XCURSOR -#define JUCE_PLUGINHOST_VST 0 -#define JUCE_PLUGINHOST_AU 0 -//#define JUCE_ONLY_BUILD_CORE_LIBRARY + +//============================================================================== +// juce_gui_extra flags: + //#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS + +//============================================================================== +// juce_video flags: + +//#define JUCE_DIRECTSHOW +//#define JUCE_MEDIAFOUNDATION +//#define JUCE_QUICKTIME +//#define JUCE_USE_CAMERA diff --git a/extras/JuceDemo/JuceLibraryCode/JuceHeader.h b/extras/JuceDemo/JuceLibraryCode/JuceHeader.h index 9306f73603..0371cd1584 100644 --- a/extras/JuceDemo/JuceLibraryCode/JuceHeader.h +++ b/extras/JuceDemo/JuceLibraryCode/JuceHeader.h @@ -4,8 +4,8 @@ project - if you alter its contents, your changes may be overwritten! This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration options for your app. */ @@ -14,9 +14,28 @@ #define __APPHEADERFILE_SLVVV6J__ #include "AppConfig.h" -#include "../../../juce_amalgamated.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_cryptography/juce_cryptography.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" +#include "../../../modules/juce_opengl/juce_opengl.h" +#include "../../../modules/juce_video/juce_video.h" #include "BinaryData.h" +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif + namespace ProjectInfo { const char* const projectName = "Juce Demo"; diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.cpp b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.cpp deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.mm b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.mm deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode1.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.cpp b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.cpp deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.mm b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.mm deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode2.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.cpp b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.cpp deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.mm b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.mm deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode3.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.cpp b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.cpp deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.mm b/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.mm deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/JuceDemo/JuceLibraryCode/JuceLibraryCode4.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/ReadMe.txt b/extras/JuceDemo/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.cpp new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.mm new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_devices_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.cpp new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.mm new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_formats_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.cpp new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.mm new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_processors_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.cpp new file mode 100644 index 0000000000..39d0c55c57 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.mm new file mode 100644 index 0000000000..39d0c55c57 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_audio_utils_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.cpp new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.mm new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_cryptography_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.cpp new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.mm new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_opengl_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.cpp b/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.cpp new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.mm b/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.mm new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/JuceDemo/JuceLibraryCode/juce_video_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/JuceDemo/Source/demos/AudioDemoPlaybackPage.cpp b/extras/JuceDemo/Source/demos/AudioDemoPlaybackPage.cpp index c4a0e1d21e..b9a6fbcf2d 100644 --- a/extras/JuceDemo/Source/demos/AudioDemoPlaybackPage.cpp +++ b/extras/JuceDemo/Source/demos/AudioDemoPlaybackPage.cpp @@ -301,6 +301,7 @@ void AudioDemoPlaybackPage::loadFileIntoTransport (const File& audioFile) // ..and plug it into our transport source transportSource.setSource (currentAudioFileSource, 32768, // tells it to buffer this many samples ahead + &thread, // this is the background thread to use for reading-ahead reader->sampleRate); } } diff --git a/extras/JuceDemo/Source/demos/AudioDemoTabComponent.cpp b/extras/JuceDemo/Source/demos/AudioDemoTabComponent.cpp index 00874879a9..09ea5b0cdb 100644 --- a/extras/JuceDemo/Source/demos/AudioDemoTabComponent.cpp +++ b/extras/JuceDemo/Source/demos/AudioDemoTabComponent.cpp @@ -53,7 +53,7 @@ void LiveAudioInputDisplayComp::paint (Graphics& g) const float midY = getHeight() * 0.5f; int sampleNum = (nextSample + numElementsInArray (samples) - 1); - for (int x = jmin (getWidth(), numElementsInArray (samples)); --x >= 0;) + for (int x = jmin (getWidth(), (int) numElementsInArray (samples)); --x >= 0;) { const float sampleSize = midY * samples [sampleNum-- % numElementsInArray (samples)]; g.drawVerticalLine (x, midY - sampleSize, midY + sampleSize); diff --git a/extras/amalgamator/Amalgamator.jucer b/extras/amalgamator/Amalgamator.jucer deleted file mode 100644 index 44037ce364..0000000000 --- a/extras/amalgamator/Amalgamator.jucer +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/extras/amalgamator/Builds/Linux/Makefile b/extras/amalgamator/Builds/Linux/Makefile deleted file mode 100644 index 2b59cdc8d8..0000000000 --- a/extras/amalgamator/Builds/Linux/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! - -ifndef CONFIG - CONFIG=Debug -endif - -ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native -endif - -# (this disables dependency generation if multiple architectures are set) -DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) - -ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - TARGET := amalgamator - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) -endif - -ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" - TARGET := amalgamator - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) -endif - -OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/JuceLibraryCode_9800db7c.o \ - -.PHONY: clean - -$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) - @echo Linking Amalgamator - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) - @$(BLDCMD) - -clean: - @echo Cleaning Amalgamator - -@rm -f $(OUTDIR)/$(TARGET) - -@rm -rf $(OBJDIR)/* - -@rm -rf $(OBJDIR) - -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/JuceLibraryCode_9800db7c.o: ../../JuceLibraryCode/JuceLibraryCode.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - --include $(OBJECTS:%.o=%.d) diff --git a/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj b/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj deleted file mode 100644 index 087493a1a8..0000000000 --- a/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj +++ /dev/null @@ -1,160 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - - F5A1BB88887D285B1DBA1FA4 = { isa = PBXBuildFile; fileRef = 3B604C2333F4A4ACEDDA5D33; }; - 9DCEEA3865611526540CAE87 = { isa = PBXBuildFile; fileRef = 3960376212D469EABEC890C3; }; - 519A1FD5D107BA064C820D19 = { isa = PBXBuildFile; fileRef = EA2AB86C7C92284FED89D52F; }; - 376EF5B6F7CC60A16F29D132 = { isa = PBXBuildFile; fileRef = A9275AFEFE04A58B574DF783; }; - AC1C38A76EA577862230F779 = { isa = PBXBuildFile; fileRef = D00199E68400301A480EC13C; }; - 02FD972668E37139AC6FDB95 = { isa = PBXBuildFile; fileRef = 9A6FC8308FE6F40E6D90B404; }; - F8EB5CA1A095AB47E5FD296F = { isa = PBXBuildFile; fileRef = FBDB5BE674CCA98DEAFF320F; }; - 804677E715BD0D17AB576A99 = { isa = PBXBuildFile; fileRef = 44DC6A5C8B7FDF348BB1B939; }; - 88941AD8669C6AF9710FE99D = { isa = PBXBuildFile; fileRef = 0D21F7B58311040CB1C01680; }; - B1AED479824B53CD42E2CF43 = { isa = PBXBuildFile; fileRef = 099980A9C6DE98B28A9113C0; }; - 14235D597C71A211C34E35D7 = { isa = PBXBuildFile; fileRef = BFB630386598A251EE72BEFC; }; - CBF16BDB96F6205FF62563ED = { isa = PBXBuildFile; fileRef = 6ADD725F5D8C431F3ED44379; }; - E88444FD7BDE1A966EC392A5 = { isa = PBXBuildFile; fileRef = 195A51222E92C3A93F2D6FFA; }; - 4D2A24E908E9A226C5A3D259 = { isa = PBXBuildFile; fileRef = F4A7A8C689EAE11C52879AFF; }; - 3B604C2333F4A4ACEDDA5D33 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 3960376212D469EABEC890C3 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - EA2AB86C7C92284FED89D52F = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - A9275AFEFE04A58B574DF783 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - D00199E68400301A480EC13C = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 9A6FC8308FE6F40E6D90B404 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - FBDB5BE674CCA98DEAFF320F = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - 44DC6A5C8B7FDF348BB1B939 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - 0D21F7B58311040CB1C01680 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; - 099980A9C6DE98B28A9113C0 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - BFB630386598A251EE72BEFC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; - 6ADD725F5D8C431F3ED44379 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - F8AC870D665D0F64E9129D83 = { isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = amalgamator; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 195A51222E92C3A93F2D6FFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - AE2AAA898543257DC9074051 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 65A77136970E59DD3E14B4B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - F4A7A8C689EAE11C52879AFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode.mm; path = ../../JuceLibraryCode/JuceLibraryCode.mm; sourceTree = "SOURCE_ROOT"; }; - 412B173788F325BD8BA9D522 = { isa = PBXGroup; children = ( - 195A51222E92C3A93F2D6FFA ); name = Source; sourceTree = ""; }; - 5DCB99F3A59154C29483AE9B = { isa = PBXGroup; children = ( - 412B173788F325BD8BA9D522 ); name = Amalgamator; sourceTree = ""; }; - 1B116FEC4D544DB8E38CB571 = { isa = PBXGroup; children = ( - AE2AAA898543257DC9074051, - 65A77136970E59DD3E14B4B1, - F4A7A8C689EAE11C52879AFF ); name = "Juce Library Code"; sourceTree = ""; }; - C08FDFC0A2B182F6A490BA93 = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; - E33E9595882A25EE14ED65F4 = { isa = PBXGroup; children = ( - 3B604C2333F4A4ACEDDA5D33, - 3960376212D469EABEC890C3, - EA2AB86C7C92284FED89D52F, - A9275AFEFE04A58B574DF783, - D00199E68400301A480EC13C, - 9A6FC8308FE6F40E6D90B404, - FBDB5BE674CCA98DEAFF320F, - 44DC6A5C8B7FDF348BB1B939, - 0D21F7B58311040CB1C01680, - 099980A9C6DE98B28A9113C0, - BFB630386598A251EE72BEFC, - 6ADD725F5D8C431F3ED44379 ); name = Frameworks; sourceTree = ""; }; - FE436211E76A80250EE3B950 = { isa = PBXGroup; children = ( - F8AC870D665D0F64E9129D83 ); name = Products; sourceTree = ""; }; - E50CA77A2F94357F191CA9B8 = { isa = PBXGroup; children = ( - 5DCB99F3A59154C29483AE9B, - 1B116FEC4D544DB8E38CB571, - C08FDFC0A2B182F6A490BA93, - E33E9595882A25EE14ED65F4, - FE436211E76A80250EE3B950 ); name = Source; sourceTree = ""; }; - B35E392A6BCC0FB318E537E2 = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "/usr/bin"; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - ONLY_ACTIVE_ARCH = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_DEBUG=1", - "DEBUG=1", - "JUCE_ObjCExtraSuffix=OTDGfH", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; - 4DFAC29D863495AD1E31B6B9 = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = " $(inherited)"; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "/usr/bin"; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_NDEBUG=1", - "NDEBUG=1", - "JUCE_ObjCExtraSuffix=OTDGfH", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; - 4EAD81574ACF05AC27D04B76 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "amalgamator"; }; name = Debug; }; - 322333C2238617224CAE5D89 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "amalgamator"; }; name = Release; }; - FA25EC7DB69A3A88993F2853 = { isa = XCConfigurationList; buildConfigurations = ( - 4EAD81574ACF05AC27D04B76, - 322333C2238617224CAE5D89 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 9257F9B896FDE4D0483F4D47 = { isa = XCConfigurationList; buildConfigurations = ( - B35E392A6BCC0FB318E537E2, - 4DFAC29D863495AD1E31B6B9 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 6D960AB00F450781A680A10C = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 492D061FDF3111EE0092E6B8 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E88444FD7BDE1A966EC392A5, - 4D2A24E908E9A226C5A3D259 ); runOnlyForDeploymentPostprocessing = 0; }; - ED422768B82C5C079964D4A9 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5A1BB88887D285B1DBA1FA4, - 9DCEEA3865611526540CAE87, - 519A1FD5D107BA064C820D19, - 376EF5B6F7CC60A16F29D132, - AC1C38A76EA577862230F779, - 02FD972668E37139AC6FDB95, - F8EB5CA1A095AB47E5FD296F, - 804677E715BD0D17AB576A99, - 88941AD8669C6AF9710FE99D, - B1AED479824B53CD42E2CF43, - 14235D597C71A211C34E35D7, - CBF16BDB96F6205FF62563ED ); runOnlyForDeploymentPostprocessing = 0; }; - C15E717C5DA07024CAFE5177 = { isa = PBXNativeTarget; buildConfigurationList = 9257F9B896FDE4D0483F4D47; buildPhases = ( - 6D960AB00F450781A680A10C, - 492D061FDF3111EE0092E6B8, - ED422768B82C5C079964D4A9 ); buildRules = ( ); dependencies = ( ); name = Amalgamator; productName = Amalgamator; productReference = F8AC870D665D0F64E9129D83; productInstallPath = /usr/bin; productType = "com.apple.product-type.tool"; }; - BC0813C44DC69E1626F486CE = { isa = PBXProject; buildConfigurationList = FA25EC7DB69A3A88993F2853; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = E50CA77A2F94357F191CA9B8; projectDirPath = ""; projectRoot = ""; targets = ( C15E717C5DA07024CAFE5177 ); }; - }; - rootObject = BC0813C44DC69E1626F486CE; -} diff --git a/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.sln b/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.sln deleted file mode 100644 index 595304e802..0000000000 --- a/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -# Visual C++ Express 2005 -Project("{23A76270-2B37-F8DD-86F3-00609C833A1B}") = "Amalgamator", "Amalgamator.vcproj", "{4285DA55-C038-FF64-E3EC-DA7F0E5D4310}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Debug|Win32.ActiveCfg = Debug|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Debug|Win32.Build.0 = Debug|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Release|Win32.ActiveCfg = Release|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.vcproj b/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.vcproj deleted file mode 100644 index 1506d0bfb1..0000000000 --- a/extras/amalgamator/Builds/VisualStudio2005/Amalgamator.vcproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.sln b/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.sln deleted file mode 100644 index 31ae5d4f33..0000000000 --- a/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{23A76270-2B37-F8DD-86F3-00609C833A1B}") = "Amalgamator", "Amalgamator.vcproj", "{4285DA55-C038-FF64-E3EC-DA7F0E5D4310}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Debug|Win32.ActiveCfg = Debug|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Debug|Win32.Build.0 = Debug|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Release|Win32.ActiveCfg = Release|Win32 - {4285DA55-C038-FF64-E3EC-DA7F0E5D4310}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.vcproj b/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.vcproj deleted file mode 100644 index 003b4cc83a..0000000000 --- a/extras/amalgamator/Builds/VisualStudio2008/Amalgamator.vcproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/amalgamator/JuceLibraryCode/AppConfig.h b/extras/amalgamator/JuceLibraryCode/AppConfig.h deleted file mode 100644 index 6a17588079..0000000000 --- a/extras/amalgamator/JuceLibraryCode/AppConfig.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! - - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h - -*/ - -//#define JUCE_FORCE_DEBUG -//#define JUCE_LOG_ASSERTIONS -//#define JUCE_ASIO -//#define JUCE_WASAPI -//#define JUCE_DIRECTSOUND -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION -//#define JUCE_ALSA -//#define JUCE_QUICKTIME -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D -//#define JUCE_USE_FLAC -//#define JUCE_USE_OGGVORBIS -//#define JUCE_USE_CDBURNER -//#define JUCE_USE_CDREADER -//#define JUCE_USE_CAMERA -//#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA -//#define JUCE_USE_XSHM -//#define JUCE_USE_XRENDER -//#define JUCE_USE_XCURSOR -//#define JUCE_PLUGINHOST_VST -//#define JUCE_PLUGINHOST_AU -#define JUCE_ONLY_BUILD_CORE_LIBRARY 1 -//#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS diff --git a/extras/amalgamator/JuceLibraryCode/JuceHeader.h b/extras/amalgamator/JuceLibraryCode/JuceHeader.h deleted file mode 100644 index f3e3554e0f..0000000000 --- a/extras/amalgamator/JuceLibraryCode/JuceHeader.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration - options for your app. - -*/ - -#ifndef __APPHEADERFILE_TVOT0OBQ__ -#define __APPHEADERFILE_TVOT0OBQ__ - -#include "AppConfig.h" -#include "../../../juce_amalgamated.h" - -namespace ProjectInfo -{ - const char* const projectName = "Amalgamator"; - const char* const versionString = "1.0.0"; - const int versionNumber = 0x10000; -} - -#endif // __APPHEADERFILE_TVOT0OBQ__ diff --git a/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.cpp b/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.cpp deleted file mode 100644 index c7ea82f558..0000000000 --- a/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated_template.cpp" diff --git a/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.mm b/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.mm deleted file mode 100644 index c7ea82f558..0000000000 --- a/extras/amalgamator/JuceLibraryCode/JuceLibraryCode.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated_template.cpp" diff --git a/extras/amalgamator/Source/Main.cpp b/extras/amalgamator/Source/Main.cpp deleted file mode 100644 index dafa8e16f9..0000000000 --- a/extras/amalgamator/Source/Main.cpp +++ /dev/null @@ -1,402 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 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 "../JuceLibraryCode/JuceHeader.h" - - -//============================================================================== -static bool matchesWildcard (const String& filename, const StringArray& wildcards) -{ - for (int i = wildcards.size(); --i >= 0;) - if (filename.matchesWildcard (wildcards[i], true)) - return true; - - return false; -} - -static bool canFileBeReincluded (const File& f) -{ - String content (f.loadFileAsString()); - - for (;;) - { - content = content.trimStart(); - - if (content.startsWith ("//")) - content = content.fromFirstOccurrenceOf ("\n", false, false); - else if (content.startsWith ("/*")) - content = content.fromFirstOccurrenceOf ("*/", false, false); - else - break; - } - - StringArray lines; - lines.addLines (content); - lines.trim(); - lines.removeEmptyStrings(); - - const String l1 (lines[0].removeCharacters (" \t").trim()); - const String l2 (lines[1].removeCharacters (" \t").trim()); - - if (l1.replace ("#ifndef", "#define") == l2) - return false; - - return true; -} - -static int64 calculateStreamHashCode (InputStream& in) -{ - int64 t = 0; - - const int bufferSize = 4096; - HeapBlock buffer; - buffer.malloc (bufferSize); - - for (;;) - { - const int num = in.read (buffer, bufferSize); - - if (num <= 0) - break; - - for (int i = 0; i < num; ++i) - t = t * 65599 + buffer[i]; - } - - return t; -} - -static int64 calculateFileHashCode (const File& file) -{ - ScopedPointer stream (file.createInputStream()); - return stream != 0 ? calculateStreamHashCode (*stream) : 0; -} - - -//============================================================================== -static bool parseFile (const File& rootFolder, - const File& newTargetFile, - OutputStream& dest, - const File& file, - StringArray& alreadyIncludedFiles, - const StringArray& includesToIgnore, - const StringArray& wildcards, - bool isOuterFile, - bool stripCommentBlocks) -{ - if (! file.exists()) - { - std::cout << "!! ERROR - file doesn't exist!"; - return false; - } - - StringArray lines; - lines.addLines (file.loadFileAsString()); - - if (lines.size() == 0) - { - std::cout << "!! ERROR - input file was empty: " << file.getFullPathName(); - return false; - } - - bool lastLineWasBlank = true; - - for (int i = 0; i < lines.size(); ++i) - { - String line (lines[i]); - String trimmed (line.trimStart()); - - if ((! isOuterFile) && trimmed.startsWith ("//================================================================")) - line = String::empty; - - if (trimmed.startsWithChar ('#') - && trimmed.removeCharacters (" \t").startsWithIgnoreCase ("#include\"")) - { - const int endOfInclude = line.indexOfChar (line.indexOfChar ('\"') + 1, '\"') + 1; - const String lineUpToEndOfInclude (line.substring (0, endOfInclude)); - const String lineAfterInclude (line.substring (endOfInclude)); - - const String filename (line.fromFirstOccurrenceOf ("\"", false, false) - .upToLastOccurrenceOf ("\"", false, false)); - const File targetFile (file.getSiblingFile (filename)); - - if (targetFile.exists() && targetFile.isAChildOf (rootFolder)) - { - if (matchesWildcard (filename.replaceCharacter ('\\', '/'), wildcards) - && ! includesToIgnore.contains (targetFile.getFileName())) - { - if (line.containsIgnoreCase ("FORCE_AMALGAMATOR_INCLUDE") - || ! alreadyIncludedFiles.contains (targetFile.getFullPathName())) - { - if (! canFileBeReincluded (targetFile)) - alreadyIncludedFiles.add (targetFile.getFullPathName()); - - dest << newLine << "/*** Start of inlined file: " << targetFile.getFileName() << " ***/" << newLine; - - if (! parseFile (rootFolder, newTargetFile, - dest, targetFile, alreadyIncludedFiles, includesToIgnore, - wildcards, false, stripCommentBlocks)) - { - return false; - } - - dest << "/*** End of inlined file: " << targetFile.getFileName() << " ***/" << newLine << newLine; - - line = lineAfterInclude; - } - else - { - line = String::empty; - } - } - else - { - line = lineUpToEndOfInclude.upToFirstOccurrenceOf ("\"", true, false) - + targetFile.getRelativePathFrom (newTargetFile.getParentDirectory()) - .replaceCharacter ('\\', '/') - + "\"" - + lineAfterInclude; - } - } - } - - if ((stripCommentBlocks || i == 0) && trimmed.startsWith ("/*") && (i > 10 || ! isOuterFile)) - { - int originalI = i; - String originalLine = line; - - for (;;) - { - int end = line.indexOf ("*/"); - - if (end >= 0) - { - line = line.substring (end + 2); - - // If our comment appeared just before an assertion, leave it in, as it - // might be useful.. - if (lines [i + 1].contains ("assert") - || lines [i + 2].contains ("assert")) - { - i = originalI; - line = originalLine; - } - - break; - } - - line = lines [++i]; - - if (i >= lines.size()) - break; - } - - line = line.trimEnd(); - if (line.isEmpty()) - continue; - } - - line = line.trimEnd(); - - { - // Turn initial spaces into tabs.. - int numIntialSpaces = 0; - int len = line.length(); - while (numIntialSpaces < len && line [numIntialSpaces] == ' ') - ++numIntialSpaces; - - if (numIntialSpaces > 0) - { - int tabSize = 4; - int numTabs = numIntialSpaces / tabSize; - line = String::repeatedString ("\t", numTabs) + line.substring (numTabs * tabSize); - } - - if (! line.containsChar ('"')) - { - // turn large areas of spaces into tabs - this will mess up alignment a bit, but - // it's only the amalgamated file, so doesn't matter... - line = line.replace (" ", "\t", false); - line = line.replace (" ", "\t", false); - } - } - - if (line.isNotEmpty() || ! lastLineWasBlank) - dest << line << newLine; - - lastLineWasBlank = line.isEmpty(); - } - - return true; -} - -//============================================================================== -static bool munge (const File& templateFile, const File& targetFile, const String& wildcard, - StringArray& alreadyIncludedFiles, const StringArray& includesToIgnore) -{ - if (! templateFile.existsAsFile()) - { - std::cout << " The template file doesn't exist!\n\n"; - return false; - } - - StringArray wildcards; - wildcards.addTokens (wildcard, ";,", "'\""); - wildcards.trim(); - wildcards.removeEmptyStrings(); - - std::cout << "Building: " << targetFile.getFullPathName() << "...\n"; - - TemporaryFile temp (targetFile); - ScopedPointer out (temp.getFile().createOutputStream (1024 * 128)); - - if (out == 0) - { - std::cout << "\n!! ERROR - couldn't write to the target file: " - << temp.getFile().getFullPathName() << "\n\n"; - return false; - } - - out->setNewLineString ("\n"); - - if (! parseFile (targetFile.getParentDirectory(), - targetFile, - *out, templateFile, - alreadyIncludedFiles, - includesToIgnore, - wildcards, - true, false)) - { - return false; - } - - out = 0; - - if (calculateFileHashCode (targetFile) == calculateFileHashCode (temp.getFile())) - { - std::cout << " -- No need to write - new file is identical\n"; - return true; - } - - if (! temp.overwriteTargetFileWithTemporary()) - { - std::cout << "\n!! ERROR - couldn't write to the target file: " - << targetFile.getFullPathName() << "\n\n"; - return false; - } - - return true; -} - -static void findAllFilesIncludedIn (const File& hppTemplate, StringArray& alreadyIncludedFiles) -{ - StringArray lines; - lines.addLines (hppTemplate.loadFileAsString()); - - for (int i = 0; i < lines.size(); ++i) - { - String line (lines[i]); - - if (line.removeCharacters (" \t").startsWithIgnoreCase ("#include\"")) - { - const String filename (line.fromFirstOccurrenceOf ("\"", false, false) - .upToLastOccurrenceOf ("\"", false, false)); - const File targetFile (hppTemplate.getSiblingFile (filename)); - - if (! alreadyIncludedFiles.contains (targetFile.getFullPathName())) - { - alreadyIncludedFiles.add (targetFile.getFullPathName()); - - if (targetFile.getFileName().containsIgnoreCase ("juce_") && targetFile.exists()) - findAllFilesIncludedIn (targetFile, alreadyIncludedFiles); - } - } - } -} - -//============================================================================== -static void mungeJuce (const File& juceFolder) -{ - if (! juceFolder.isDirectory()) - { - std::cout << " The folder supplied must be the root of your Juce directory!\n\n"; - return; - } - - const File hppTemplate (juceFolder.getChildFile ("amalgamation/juce_amalgamated_template.h")); - const File cppTemplate (juceFolder.getChildFile ("amalgamation/juce_amalgamated_template.cpp")); - - const File hppTarget (juceFolder.getChildFile ("juce_amalgamated.h")); - const File cppTarget (juceFolder.getChildFile ("juce_amalgamated.cpp")); - - StringArray alreadyIncludedFiles, includesToIgnore; - - if (! munge (hppTemplate, hppTarget, "*.h", alreadyIncludedFiles, includesToIgnore)) - { - return; - } - - findAllFilesIncludedIn (hppTemplate, alreadyIncludedFiles); - includesToIgnore.add (hppTarget.getFileName()); - - munge (cppTemplate, cppTarget, "*.cpp;*.c;*.h;*.mm;*.m", alreadyIncludedFiles, includesToIgnore); -} - -//============================================================================== -int main (int argc, char* argv[]) -{ - std::cout << "\n*** The C++ Amalgamator! Written for Juce - www.rawmaterialsoftware.com\n"; - - if (argc == 4) - { - const File templateFile (File::getCurrentWorkingDirectory().getChildFile (String (argv[1]).unquoted())); - const File targetFile (File::getCurrentWorkingDirectory().getChildFile (String (argv[2]).unquoted())); - const String wildcard (String (argv[3]).unquoted()); - StringArray alreadyIncludedFiles, includesToIgnore; - - munge (templateFile, targetFile, wildcard, alreadyIncludedFiles, includesToIgnore); - } - else if (argc == 2) - { - const File juceFolder (File::getCurrentWorkingDirectory().getChildFile (String (argv[1]).unquoted())); - mungeJuce (juceFolder); - } - else - { - std::cout << " Usage: amalgamator TemplateFile TargetFile \"FileToReplaceWildcard\"\n\n" - " amalgamator will run through a C++ file and replace any\n" - " #include statements with the contents of the file they refer to.\n" - " It'll only do this for files that are within the same parent\n" - " directory as the target file, and will ignore include statements\n" - " that use '<>' instead of quotes. It'll also only include a file once,\n" - " ignoring any repeated instances of it.\n\n" - " The wildcard lets you specify what kind of files will be replaced, so\n" - " \"*.cpp;*.h\" would replace only includes that reference a .cpp or .h file.\n\n" - " Or: just run 'amalgamator YourJuceDirectory' to rebuild the juce files."; - } - - std::cout << "\n"; - return 0; -} diff --git a/extras/audio plugin demo/Builds/Linux/Makefile b/extras/audio plugin demo/Builds/Linux/Makefile new file mode 100644 index 0000000000..1e007d63bd --- /dev/null +++ b/extras/audio plugin demo/Builds/Linux/Makefile @@ -0,0 +1,164 @@ +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! + +ifndef CONFIG + CONFIG=Debug +endif + +ifeq ($(TARGET_ARCH),) + TARGET_ARCH := -march=native +endif + +# (this disables dependency generation if multiple architectures are set) +DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) + +ifeq ($(CONFIG),Debug) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Debug + OUTDIR := build + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 + CXXFLAGS += $(CFLAGS) + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" + TARGET := JuceDemoPlugin.so + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +ifeq ($(CONFIG),Release) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Release + OUTDIR := build + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os + CXXFLAGS += $(CFLAGS) + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" + TARGET := JuceDemoPlugin.so + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +OBJECTS := \ + $(OBJDIR)/PluginProcessor_a059e380.o \ + $(OBJDIR)/PluginEditor_94d4fb09.o \ + $(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o \ + $(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o \ + $(OBJDIR)/juce_audio_formats_wrapper_994a82de.o \ + $(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o \ + $(OBJDIR)/juce_audio_utils_wrapper_e9783ef3.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ + $(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o \ + $(OBJDIR)/juce_events_wrapper_a8dc8280.o \ + $(OBJDIR)/juce_graphics_wrapper_a0e77172.o \ + $(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o \ + $(OBJDIR)/juce_RTAS_DigiCode1_wrapper_6c4cad39.o \ + $(OBJDIR)/juce_RTAS_DigiCode2_wrapper_5acfb3ba.o \ + $(OBJDIR)/juce_RTAS_DigiCode3_wrapper_4952ba3b.o \ + $(OBJDIR)/juce_RTAS_Wrapper_wrapper_1df0fd8f.o \ + $(OBJDIR)/juce_VST_Wrapper_wrapper_da6c54d6.o \ + +.PHONY: clean + +$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) + @echo Linking JuceDemoPlugin + -@mkdir -p $(BINDIR) + -@mkdir -p $(LIBDIR) + -@mkdir -p $(OUTDIR) + @$(BLDCMD) + +clean: + @echo Cleaning JuceDemoPlugin + -@rm -f $(OUTDIR)/$(TARGET) + -@rm -rf $(OBJDIR)/* + -@rm -rf $(OBJDIR) + +$(OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PluginProcessor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PluginEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o: ../../JuceLibraryCode/juce_audio_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o: ../../JuceLibraryCode/juce_audio_devices_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_devices_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_formats_wrapper_994a82de.o: ../../JuceLibraryCode/juce_audio_formats_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_formats_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o: ../../JuceLibraryCode/juce_audio_processors_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_processors_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_utils_wrapper_e9783ef3.o: ../../JuceLibraryCode/juce_audio_utils_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_utils_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_core_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o: ../../JuceLibraryCode/juce_data_structures_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_data_structures_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_wrapper_a8dc8280.o: ../../JuceLibraryCode/juce_events_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_wrapper_a0e77172.o: ../../JuceLibraryCode/juce_graphics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o: ../../JuceLibraryCode/juce_gui_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_RTAS_DigiCode1_wrapper_6c4cad39.o: ../../JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_RTAS_DigiCode1_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_RTAS_DigiCode2_wrapper_5acfb3ba.o: ../../JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_RTAS_DigiCode2_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_RTAS_DigiCode3_wrapper_4952ba3b.o: ../../JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_RTAS_DigiCode3_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_RTAS_Wrapper_wrapper_1df0fd8f.o: ../../JuceLibraryCode/juce_RTAS_Wrapper_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_RTAS_Wrapper_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_VST_Wrapper_wrapper_da6c54d6.o: ../../JuceLibraryCode/juce_VST_Wrapper_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_VST_Wrapper_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +-include $(OBJECTS:%.o=%.d) diff --git a/extras/audio plugins/demo/Builds/MacOSX/Info.plist b/extras/audio plugin demo/Builds/MacOSX/Info.plist similarity index 100% rename from extras/audio plugins/demo/Builds/MacOSX/Info.plist rename to extras/audio plugin demo/Builds/MacOSX/Info.plist diff --git a/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c1453017c2 --- /dev/null +++ b/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj @@ -0,0 +1,2020 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + + AC674433358C3691C8AC20AF = { isa = PBXBuildFile; fileRef = E226D5DEE103B1E298BD6E3E; }; + 5B83F34400A1B5844680E1CE = { isa = PBXBuildFile; fileRef = DBC6733A66786D64D63E7016; }; + 449473E31270237B0FFEBE72 = { isa = PBXBuildFile; fileRef = D036C01DC0E376205ABAA0CE; }; + 0860A8808F16C84CE7641D04 = { isa = PBXBuildFile; fileRef = 91F0411829B13595887CE52A; }; + EF358E6194DB7EE60A1CE13D = { isa = PBXBuildFile; fileRef = 41FDE3A9AC13B3D1F230088E; }; + E504A4E425435E78197183F3 = { isa = PBXBuildFile; fileRef = 2307ABAB0264959E640E9E37; }; + 53E2C1531CB485CCDD230774 = { isa = PBXBuildFile; fileRef = 88C8229131104E50F4F0D137; }; + B9C31FD116F29E7E4752EB90 = { isa = PBXBuildFile; fileRef = 423550EB3CF502541882C50E; }; + AFB1D55C5DA4C99D90DF3A6A = { isa = PBXBuildFile; fileRef = A2A2E49121DBB7C395E2420A; }; + 370C0F92C3CC1B6C563A7A94 = { isa = PBXBuildFile; fileRef = FBA2E307398FFC8A2693C933; }; + 205AA28314AC784F2CF1FA98 = { isa = PBXBuildFile; fileRef = B4F88060202011416CB3278B; }; + 68746D242F6A6102FDD5D03D = { isa = PBXBuildFile; fileRef = B050085463EEB5F8367314CB; }; + CBE9E6042991B0677E3136D2 = { isa = PBXBuildFile; fileRef = 678CC9E413A7CF979964CEF7; }; + 73B8F48633153DA5A10873E8 = { isa = PBXBuildFile; fileRef = 01A30B0A0B9B5064D9B75474; }; + 5AF66C048A4815F5A8ECDDCD = { isa = PBXBuildFile; fileRef = B50846B34831C2C28007BE7D; }; + 209FB8C7F7BE85A70E5D98D7 = { isa = PBXBuildFile; fileRef = 2C001306D198F8B21ABA7375; }; + AEF69B599D0CEC30C1BC8C0C = { isa = PBXBuildFile; fileRef = BA712F15F8C80BF55297EA44; settings = {COMPILER_FLAGS = "-w"; }; }; + EE224227E577BA498E98DC9A = { isa = PBXBuildFile; fileRef = 257FA3A7290842556A7377A4; settings = {COMPILER_FLAGS = "-w"; }; }; + 07EDB68D178C5C7635F58468 = { isa = PBXBuildFile; fileRef = A272B6DB3C84B9D91BF0F060; settings = {COMPILER_FLAGS = "-w"; }; }; + B24CA5BEF488268AB502C0AC = { isa = PBXBuildFile; fileRef = 17ABF2F862D57C89FE85C307; settings = {COMPILER_FLAGS = "-w"; }; }; + A7805EAF6FC58E9A857D98EA = { isa = PBXBuildFile; fileRef = 6C9B2F471F11EC467FDB06D0; settings = {COMPILER_FLAGS = "-w"; }; }; + F0BEF1392277DBDC409A06A3 = { isa = PBXBuildFile; fileRef = 55D565AF7527BA71D7ADC2D4; settings = {COMPILER_FLAGS = "-w"; }; }; + 8B45F20F3F352BB3B35F6EB7 = { isa = PBXBuildFile; fileRef = 6381E6023EA29B5BC90F0F11; settings = {COMPILER_FLAGS = "-w"; }; }; + 4BB4B93E0E58FC0D5FE82292 = { isa = PBXBuildFile; fileRef = 6EC9B05A43174FFF25BA3382; settings = {COMPILER_FLAGS = "-w"; }; }; + 3FA5946913264BF87C308F89 = { isa = PBXBuildFile; fileRef = F17E1C506A2CB31650AC64A1; settings = {COMPILER_FLAGS = "-w"; }; }; + CE625DD4D4B118F4718F2DCC = { isa = PBXBuildFile; fileRef = 71A86FA30C6E11992FD52782; settings = {COMPILER_FLAGS = "-w"; }; }; + 60FEDB4F5859871946389F21 = { isa = PBXBuildFile; fileRef = F7A8C106BF631AFADA24F8EE; settings = {COMPILER_FLAGS = "-w"; }; }; + F9290B46763F4865ED3C362D = { isa = PBXBuildFile; fileRef = 8C28A1A8AF5FFC61D88246A9; settings = {COMPILER_FLAGS = "-w"; }; }; + BAF7CD5DAFBAB29BEF0DCAE3 = { isa = PBXBuildFile; fileRef = 4BA3B7415620D5A6A3DD6076; settings = {COMPILER_FLAGS = "-w"; }; }; + F51222976BFE5611E7FC656F = { isa = PBXBuildFile; fileRef = A9C716DF2B9CC6D95877A448; settings = {COMPILER_FLAGS = "-w"; }; }; + 3723101DD64447FE9A530323 = { isa = PBXBuildFile; fileRef = 38E2002644D5BBC2E88ACB70; settings = {COMPILER_FLAGS = "-w"; }; }; + B7D2D2868983939B35532885 = { isa = PBXBuildFile; fileRef = 6C254919C15224D13FE6D174; settings = {COMPILER_FLAGS = "-w"; }; }; + EBBDC594F4DF0EF42E017C64 = { isa = PBXBuildFile; fileRef = 616DF8861CA45D7FFE92CA35; settings = {COMPILER_FLAGS = "-w"; }; }; + 81795588AD3A427D43E3165C = { isa = PBXBuildFile; fileRef = E9F52DE288413A752B295F84; settings = {COMPILER_FLAGS = "-w"; }; }; + 421AB531BFA2C9EB93522748 = { isa = PBXBuildFile; fileRef = 35B676123569917443C05786; settings = {COMPILER_FLAGS = "-w"; }; }; + E5299A6C25F9C4AE26DABAC0 = { isa = PBXBuildFile; fileRef = 3008852179AEC3110ABEFC5F; settings = {COMPILER_FLAGS = "-w"; }; }; + 84D075FA78547C8D3AC4EA1A = { isa = PBXBuildFile; fileRef = 51DAC3E29FE8A76EF638C26E; settings = {COMPILER_FLAGS = "-w"; }; }; + A2718BCD8261456359155ABE = { isa = PBXBuildFile; fileRef = 634B4CFC4268E257C63FA337; settings = {COMPILER_FLAGS = "-w"; }; }; + 3AED4AC6E9B4B0C2B0BEC239 = { isa = PBXBuildFile; fileRef = 4114359B1712473DCEE14775; }; + 0AF0468337861CE9E40C5DA1 = { isa = PBXBuildFile; fileRef = 649205DDB11401C68ABB11D0; }; + 2B02FDAF33120D858A83EF7E = { isa = PBXBuildFile; fileRef = C22CCBC890FB0D1B124829BC; }; + D4AAEE16015B5D8A5620E43B = { isa = PBXBuildFile; fileRef = 181F4180131856CB6BAB1DF7; }; + E585877D4B824035E1CAFFCA = { isa = PBXBuildFile; fileRef = 11608576C57E3A204A6C906E; }; + FB804F5BADD4EB73538309D9 = { isa = PBXBuildFile; fileRef = C39B8328C67764BE9969854D; }; + EB66DD2B9BD0523BA24F71BE = { isa = PBXBuildFile; fileRef = 4BF59333DA57E2C24F0A0E1E; }; + 9CC0D5168A7DCB579BDC31CA = { isa = PBXBuildFile; fileRef = 22C891D6B6A32972880FF86F; }; + 5D19FF0100CA4CF6F06C207C = { isa = PBXBuildFile; fileRef = 1C934CED6F7B4BA69116BDDC; }; + 261BC7A0D5A015FE1B07C73E = { isa = PBXBuildFile; fileRef = B3ABDEB35F903778A009493E; }; + 07F38E0F0E1C7C120FFF487B = { isa = PBXBuildFile; fileRef = 7D309CB3240B35D414815F70; }; + E972DF46C7EB779D1A5E3B71 = { isa = PBXBuildFile; fileRef = 5EBBFDAE5869767E50249CC1; }; + 7DCC8920B429926D40DA04FE = { isa = PBXBuildFile; fileRef = 1B123CF00E6D0EDFCA6FC5B0; settings = {COMPILER_FLAGS = "-w"; }; }; + CB8EA22B7429B51D81082154 = { isa = PBXBuildFile; fileRef = 2F13C1272F4ACC4CA3DA8F00; settings = {COMPILER_FLAGS = "-w"; }; }; + 0A40CB163419D8DEB3253DCA = { isa = PBXBuildFile; fileRef = 2204575E31367AA99D353850; settings = {COMPILER_FLAGS = "-w"; }; }; + B39DC014D05F2235B9F6967F = { isa = PBXBuildFile; fileRef = B6C7C7A200B428CFD162EDEF; }; + E2DD4A04EE7CF8CF6EDBBEF4 = { isa = PBXBuildFile; fileRef = 39A4D878431E9330AA38CB3D; }; + BB4C58E7FB7D7CBAFFD6953B = { isa = PBXBuildFile; fileRef = 469F59300FE180A8366F1E23; settings = {COMPILER_FLAGS = "-w"; }; }; + 2A732ACEDCD2474751785A8D = { isa = PBXBuildFile; fileRef = 0C31117E7AB2D703ABB393F9; }; + E226D5DEE103B1E298BD6E3E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + DBC6733A66786D64D63E7016 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; + D036C01DC0E376205ABAA0CE = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; + 91F0411829B13595887CE52A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 41FDE3A9AC13B3D1F230088E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; + 2307ABAB0264959E640E9E37 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; + 88C8229131104E50F4F0D137 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; + 423550EB3CF502541882C50E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; + A2A2E49121DBB7C395E2420A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; + FBA2E307398FFC8A2693C933 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + B4F88060202011416CB3278B = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; + B050085463EEB5F8367314CB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 678CC9E413A7CF979964CEF7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; + 01A30B0A0B9B5064D9B75474 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + AF721FB8136D2CAA9404AD8D = { isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 81567EBA449466A95492511B = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; }; + B50846B34831C2C28007BE7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginProcessor.cpp; path = ../../Source/PluginProcessor.cpp; sourceTree = "SOURCE_ROOT"; }; + CF304FBE4BC66783833C4B59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginProcessor.h; path = ../../Source/PluginProcessor.h; sourceTree = "SOURCE_ROOT"; }; + 2C001306D198F8B21ABA7375 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginEditor.cpp; path = ../../Source/PluginEditor.cpp; sourceTree = "SOURCE_ROOT"; }; + 662507104D05B579BB68F391 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginEditor.h; path = ../../Source/PluginEditor.h; sourceTree = "SOURCE_ROOT"; }; + 79D97853C3A0AD27EB090B3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 834BA01B0E86A3DC9DDA2D6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + AF42B5894BD21472C3122411 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91B1FA993DCA649324A71618 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 3A02DE8D9D2D4509C9E35151 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7D999243F310E9541312090 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 78A895C8845E4EF0A39840F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F953A4A5D842AD7A369FFF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + EB65D80F872C942DB20B3633 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1727289E028242926504A639 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + 3F82C9C5795E419564A3A7E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51B9C5570EE7A1273945B62B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 43AEF28305C5E01476E99FBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 973BF2215377968D7915E1C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + B5E613ACD2127AF722CE2C24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + D2C42B45CDCA6312490575D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D7F58A127F513B4A222F5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + A51B70AD9DA24907BA4967E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + 5D62AA67C157756D8013FEF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + CA79EC924D1821245B155BB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DD97F04EEF9B75D5A52CE6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + DCE6086881B31CBC0B933987 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + E10D428DE39D5CA353F525EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 0B5853D598943EE225F51944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2EDF552BBD6831318025F04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + F45E30DD975B870D03F1EE23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D7A9005DE26C6E598FD79B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 12537150BA6507ACDC884B8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + DA34204C5F6C080C547DF86E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2644A942FFA4808D29C9F15E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + AD8F15842A2A7942583101AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 839A0FB7FD0B65653697E651 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + D877ED01865DA0A2A5E1C5F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9506611F425243DD224A907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + FD653D25CA681906503B0B27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 739DA7CB188AFA706CB518A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + B2A328858AB46F959F8E76DB = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4A449540F7D389E492E6D2CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 439ED1E8B84E115E6285B576 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB43B3098075F141318C2EF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 888D8FA43CA02DE67EB9C3B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + 166FF808E8658C257C6C7306 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF3A42CB3DEC210E00915E2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + 69DD90D857CEE079F60BE096 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18CF7D3321C0317531B8F09D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + A3AD45428327F447AFE21A34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 9E6386F6DC3392D8EB2686AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83A72B3C2CFFE3DB12B1B64D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + 0C9FA9DDBFA83D677C14D7A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + C5714F82DC34FA40112A270A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + 27910FC5193FBB94A4F2484F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + D62BF46B78305C0C400C32B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + EC18BBD30A10A367926567A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53857E80CDCB81FCAD086ADE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + 3EF0CB3821BE170D03EB3B92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + 2364403E9D897A5D976CF372 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3B6CB9FE1DA1AFE5FBA9FF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + 14359B1712473DCEE14775E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 248B33360F7C5B7A8816ACF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 95B2BB66960D3F1956A7C85F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 935CE55C69725E5ACB677C07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51DD7E652B591C10F0BCC626 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A9314300E64C01A49E71FAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 20E067BD710DD44C7A0E345E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A48AC275683E6896C9AE032 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + 4C60033A7F7F650DC112DD53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + B750E17FF2D43F1FDF3FB6C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + BDEBC04D78536B3777234AAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + B56D5FCED5D7D910E919D49B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + 5E01549848C983000813F463 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94F64DE7F0680047E63D84EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 580C81905A351AF53376455F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF445D73A28A3CA2A9F929D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9F7E56E6C28FB1E22D99A54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8EF01AD06A8E8D6CFFDE7E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + 165741666296E2EFBE50794F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 7EB89E3DDEFCBD0047DB6EFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + B6EE0AFF95C353032239CEF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + 138CB97331B69EED2EA0DBB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 40CB74743555E3030F37CC8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 0B8B2A722347AE1DE371CC1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 693063104CD6F6E3E6CD5673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 061167C305C9E264524AB24A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE683A8C8E5546D6371CD493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + AA0D3B572CC82D4D2B9F0219 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4EDE2469615E450A465CCCDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + AD352AE3EEB3B3CFF496608E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CEB59A20194FD6B8C5A4B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + B7BA14221937BF86D765C61E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D01A3FEC15CBD8E0402F376 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + 6B84967F0D35460B00AC712C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3954116510A53F4A57089B83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + BF858C264F0861E3CFF63D97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87ACE0789711E68C26A25482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + A0F363C1E9C9C1380225CE8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4F3A368BCC8D4541BF9C176 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 725E62E811970BEFCEDBDD2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 48C052A5026C7C55D9924AA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + F4B0917BA6A6B4E2BC9F2442 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0062F959DE84F004A165CAB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + D04D349F69C746C91B97B59F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 08C3DCB97C5E1A3E0C403F1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + AC1D8797B16E7DBB710D49ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83C4E6C034C335DBD9B3EC1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + A6A6E7DE0C86642C41F8EEA9 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 55AA8058BF60E87F9A8EDCAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + 1E585AF759F2D5D1DFA2B2A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_formats.cpp"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5493EA0484062933BCE48153 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper.mm"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 4114359B1712473DCEE14775 = { isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_AU_Resources.r"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Resources.r"; sourceTree = "SOURCE_ROOT"; }; + 61C0950C60A3F650ACFC2F1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75BAD8F23290209D27AC31B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode2.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode2.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9AB31BF7048C4BDBA16C435F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode3.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp"; sourceTree = "SOURCE_ROOT"; }; + 122547F526DCF1A27258E132 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_WinUtilities.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinUtilities.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0AB78D4F84901132EE9EC93C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2097C36ABC3A60F0D47750C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; }; + CD89FA1E8535CB952C5FBF06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RTAS_DigiCode_Header.h"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode_Header.h"; sourceTree = "SOURCE_ROOT"; }; + B6C7C7A200B428CFD162EDEF = { isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RTAS_MacResources.r"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacResources.r"; sourceTree = "SOURCE_ROOT"; }; + 073AA7F99EE2C0EC0FA7A2C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69293D4968A891AC80AB80F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper.mm"; path = "../../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 6182DF59266C697D90219233 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CarbonVisibility.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_CarbonVisibility.h"; sourceTree = "SOURCE_ROOT"; }; + 2A1E1220674CD7D19C8DC580 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CheckSettingMacros.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"; sourceTree = "SOURCE_ROOT"; }; + 87D695A69FE17719B1A26A8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FakeMouseMoveGenerator.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h"; sourceTree = "SOURCE_ROOT"; }; + 9E0010523FA49F5D0F638DF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeModuleHeaders.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 27DD4E3298BD1C7DD9611E46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeSystemHeaders.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + BEEF67A0485EF67A2A377070 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; + 5788EA7F763DEBD1B484C7B1 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_plugin_client/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 40D939406590B110A7B26753 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_plugin_client.h"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client.h"; sourceTree = "SOURCE_ROOT"; }; + 304FD4FD5771F00C8EA46C10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + 7C4583C6FAB6AD7AE8E529E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; + 9BC465D0413224AC25E3FBB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; + B861EBF30C5ECFD9E3A847A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + 395E22C58EFA1B5CA68F254C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E06BFA1C4DF8FAE59494B1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + DB670C72BED9A68A57F214F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + D38815120DA866C2D6BDA2FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + ACC4B1B4D5B4616D477006BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; + 83E67C33DC1260F6F22CBAA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + EDDD4CD25497C1D7355A59EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 2DB074006749981D9E09D7EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A66D5682AD4C666D43FB767 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; + 7E88793F19EB8300670CFE7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + A68151BB2E0B480DA3BDCF50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + BD7AC1A071277BDAF3AEBFB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + C2467974C3A59CC78DB4302B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 4873055487998A57CA1CBCBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + E0EDD61D2992D3577E49A5F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; + 54967804E74511B5B261FBBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + CF23F9C6BE15355CF99BBFF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 400A6A01191D797D3EE4E073 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; + 0BBC016089CF3E442B194D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 669838423C386D248632F0E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 150B8E592622CBACAF753FD8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 628F09B179588AFC179380D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + 9E972084E1B96847524BE56B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; + A535D31A594609A53105D53B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; + 764474A9C6607DFC8D733CC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8D5F65CB7D6019CE2B8D8DE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D070AD98964443FC3A77A210 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A2E594D2B66AFACC4E50B4DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; + 38E5B27D1F1D89059B5AB7CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A9DCA7DB5D0187DF7B44452 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C589AF01D0A08486FCCCD333 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D9FB82C6424438EE90BCB176 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnail.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp"; sourceTree = "SOURCE_ROOT"; }; + F2C56BC80F8DEAD46479F3BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; + 5CB85EB9E63D91141810A9F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BD853FE11B37B9F521CD26A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; + 8DB942A716F41A81F269BCBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 018598A99BA724F0F8249048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BED04F5369CEBA4BC47A8439 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + A20499905705FBDEAEE1DB38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; + B7DC31A0BD9CE90FE0A4FFAE = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_utils/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A48ABA58BE136435E22F60F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_utils.h"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.h"; sourceTree = "SOURCE_ROOT"; }; + 9B0AF0A6191695C19885FE77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CFABA010D3616C0AC67687A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F8F2F5535CE15A1996FD473 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 07DBEA6396526B149CE3636C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + E5183EE70240F85EED587EC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 954F4F0531C4A771A82D23E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 5D960F6F487E3C5DB9A883BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 3F92A57E01656BE3B6602606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2573C5D190DA5E7B9B51E6B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + 67500EFA60FD4E509506D82C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 204108608E2D126A249C49ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 8520F7C32171C59084557BA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 9FE77EC6FC77A2DB7F5BACFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + A723B656837E7C2A29D2105D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 602EED36A7D35A7B7D7D944D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + B444D5AF982ABCF910F36542 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + E942F4FB92FB1A3B5744C071 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19E9602A0E564C63177243D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 969CC157F12C1D006503C664 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D2A2471850C6CD95C5D259E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + 3F62B7DD2AD57E232C5FA2DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA9A6293F340BD919DE65202 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 5BF284171BA3A6164866B233 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0FEB259ECA5812848B14FA45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + FE0457D172998D228DCD8358 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + A920DF6F9A07C1A0BFD1508E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58C1842BEA53449220D8BB04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 06DAC79105CB6C627F262BF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 7957B8CC52C7F1AD09FBF90E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + AE64178E7C965D8A09D227A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 200A4D60F86261D0FEDA650A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + DA51105C5D3DBC81BCD5A434 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 66A4791EC424D24C209F42BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + 459D8B02EF8B37C545923C01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0967090BC2623157FFD7A780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 3C28F977FB0ED0195F277910 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + A3FC7FBC7F23D897588AC92B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 3652F309E568495DDE27E308 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 5ABCA62B35F0B5B20988EE8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 81D0F4C905AB85B5746FF35E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + B2F4D66245A37F1310CF5919 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA24289B0CD597B9855A2DCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 302C54D1172A9B83038F0E6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + F6FA985F60E0F9C322674DCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 06B6081CCA84AC932364403E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + DDBEE64DC706CE804E5F0AA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 5E29D9AB81C3D328D1F33930 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 22500FE8CA71E8A11AA5A354 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + FB548306D21AC354BBFF81DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 34081BEACF00D83C060D4DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC8CCA9CD0FFDF710E9E5F85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 3ADAD8A41B31F3C8FDDEA56F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 357792D913329B68DC1B4CDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B7CCD412EC93CE87AAB30A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + F704236DD54A770265280454 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + C7ACFDDD54A9EB4F63271DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + FE34C402EF9ADCAD34FB657D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 71D89D144E2BEE49BC2A5370 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 2A9EB6D4823627887ABF8864 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 949D1A34C80481D1EE077492 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 1BC7ABC9AC51200C07830314 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 20FF0F454C1833EEB09BBD86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 3AE86EE723ABB20B7B64065D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 9531A1A57F2FE4EC53181FC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 8B4D6896873452DEBCF642AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + B01AFE048B28EA9153D33B00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + D951E8540992AFA8A37489F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 8778F01DAB1E4F54197D5830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 0C63392284049B2E6C6679E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 5C5879C1B77E9C18DAC9A14A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + AB8E93B3015C6FD019B274AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 21A0B34B1237156012C739A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 1CD8825177F370FCF2CFB42F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B205E70D832A4EC92423335 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 4935DC3B6EC1CAFD07932A48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 98543FA6F0FD4DDEBA6427E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 7BFE0C01FF4706C3DBB3F421 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 9275A14A085BEF8D09F6096E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0CEACD8630BA00C3E910930 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + C0813C44DC69E1626F486CE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + B330AB0B662B98C6E5A52728 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 9C2BFD3199188B1955680ABA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 96270AFE383F1A5BC3CD034F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 7537145FCC04A715446AE30D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 81737C6AD0A62F50B30EBFB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 43A5AE4CB027292E720BD130 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 278A2798E538CB32C7A5ABF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + CD88E76DA983946ED13105AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + CAAEF7E226EDFC9B3EC5347F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 73DF08B1223F906D413FB6D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3EA2CDDBEFE6A7131C2D125 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 71C8501E9DE184B701640E5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA7E2E98A755D58B51F73127 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + 16329FDAB1D7BC92B9032333 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + C667FEA6E534DEBD84470EC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9AABFFA8029981CCB7EFA011 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 16938BC6DC5F75B9E17A15DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24BC35231F175F277299B3CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + E6E7FB6043FC110435546138 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 17AA174FDADE523BBCC844E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 031D71B0E9EC086B8EE7F469 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEEDD24C187298954F37E887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 62153A7AB7B3F261BB91B0DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFC4C0F4404D1CBED7AD524E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 913740AE3DDBF5BEEBBD9314 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F3C5ABEDFD42FB1D535AB13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 06F7966C5F0A7F770186CF91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B7C230711B2B6994C2E2684 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 7FD4D7E65420C9D296E36189 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 75C83DB4234347CF113B4215 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DD300529F3A7E6CB4222EEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 98932C418FD0E799C090FF00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C86D8760BD1C281117CCDC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + B2259EBBC43B9522EC9E6B60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 37BC2541E5BB21EB42266230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + EDD8383DB5A51EE9705649BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6D7F76FF310C0F1A6656541 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 6C8B3C71CDEFBE96469EE49F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BD847AEA05490C202179B99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + FCD830DD90D9B3E7F110CE9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35BF45CCFFD348A22B4D8C8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + DCF365029E6DBB6CE79ED8F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C74092FD6A96D31E6D8EDC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 73F107AD34F07071071F0F46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 964FD49C5668C0C0F77F4375 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + DD044A3041EE65844EB4F8EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6F1C1C2090670B7DA2C4F3BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + EF9EA5DB1E512BFD3C8E13D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + E167122FDE438B06431E8607 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8DCA3F0BFB630386598A251E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 9CEDC02B839AA0CD03E1B315 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + BCA52729FCF2E4FB98AA5374 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + 52D704689CF0DC4043395331 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 894CA5AF60A037218D97E63D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 27CCEFF624E1128D66A3B0FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 05C0EBC254350D342821ACB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + B965C4E6F320031C1AA3DC08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C2B3538434D7D20B51691C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + FFB1E0D82326B735E3794340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA8357897F518E66967DC408 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 21DC979821AD3A67B4ACEBED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + B23F513191E89B3BBF87C463 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + 30DCBD0D1817707A208C28C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + 458C3CC68BB03DD5D2D4CEB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 638784E18411EF596544BD93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F1506C555B0010DBF733763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 9E4799D19E98A8D7B02E024C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 5F5A802905E1CEEA688A5FDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9E554C5D64E0396AF57640E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 48C047D76D9F41CD97F5FD18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 555303A6D6492A7E3B70A5E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91C02452356B37AB1E8A9380 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44527A6FD501DBE87010DB0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAAAE1CD12B098CFE73B3189 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 44E8A1341810016B15424592 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F37E36BA5E052B3BD4B87AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53E19BB6E12A1FBC58D87D58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51C45DFB25A384F215FBE97C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 073BF0DCECE708125E41BABB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 1BB777321FF3117DDA02391D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 008EAFD1F19574F56833B40B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + 596672C25BC2E25AB7A5F517 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + D964B9999E8F5E093DCBE57E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + B7D526E34BB0BE8F1D1C8D7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 6367A8ECEA07B15FFF9613AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 705AAA5F0D8B40B0137D5913 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8834896AE780B8BECB85E933 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 9A1BC23C68C7534EBC09094C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 336EF52511836EBF4735ADCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94119AA21BF2437B2B90DF2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04E2D6B0D1B38FBBBC6B8598 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5A6981427D2E9CAE63EA159 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6AEF4229CA586AB733041FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + E81B3BBCB0263FD003154EB9 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 13C1C52E419C002C956655AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 4B4BF726533F89C73F7F0C5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + E26C8A1715A4D6B8B9D62D51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + ECCB179C810DC25493F73D33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 6E837F124C347B3C1CAE2390 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44520F4C1D195648DF5676EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 8E5A305AD4133B822040A0F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + 56AF995564296D2773B73230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7D7E0E0A3D02FE68562DBF00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + 4A8B303EE7A962F2F7F81884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4EFED985354ED69F6237068 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + ECB6C60040D1A5D4223CE8E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9064681C193CE562A9D23B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + C50DFEEF0CB89E10A54EEF3E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 0A16054EFFC1688B24D14D8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 8FA337941933A0BBD275898E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + A036505DD21AAE0D53F6AB2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B57CEA2CF205666357D28F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 32B2DF642BB70092DE9AA12A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 083ED493CF067E5795170496 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF989B421EBCAD9FB7AA8982 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + 1E53B088BAD18F2C1F5E5565 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 906D0FBF9F0B80A868EF35F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + FA83EE957B677EB477442FE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7D05A4656F3FDA9B8C514380 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 00A4A58E6F5F65FE69A0F00D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CAA77892F64DE1793A3CE20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + AED45BAD4F0E2B3CF8A88BE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A89660118207A23A52A3359 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + 4AF25D7BE0193006D32B1817 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E7BCAA3499C8D18AC3600B6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + 3587355A9AAC5C37E393AC34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0205240A8F72E5720BC3ABD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + E3B0F4C7D7E7974186DD619F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + B9A0DC74EC5297442210300D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01BDC6EFFC23B2602BE63882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + 66214741888A4AEC41616B2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 77877A786F7B83E94906C267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + F89E6FE515D15E087759B66F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + DBF69A94459B3D3C4B2371B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 2F359D3189751A82DCB73BA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68A2E2734776C4DE8A825586 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + AAF51881FD011E68ACB8943F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7C0402A58CCCFFEB565C4541 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + 744B5258A0FFFDCF19A54AEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 112E90B364B219E327AC6744 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + EFD3FAE8559912283841BA5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13EEA29E63CB7D6A92A16718 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 30C1C3A9B61EBDB050A24DC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 2F7919F052C66E372AD4E43A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 05D10EB3543D6C58038DAE27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 88DD545C3708EA053CC37143 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + D976DDDC094914CFB0DDB0D4 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 0ADBA2DC820C98A2EBD7CE89 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + 5B1C1F8C1BE263ACE8834BC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + B146AB40CE10C715C2EC1CD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F423E589D4B0BB76A086125 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + A5909BAF8AD224B75AAF832F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 669F622144F9612F1A5AFF31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + 4510427BA649EFEE4020AC0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + F994149CF2F743560B199CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + E59EDC1944B2A88AACA0E57F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0F1F5E7EC8FC26D8076F4F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + C2ABBA86A4F7A1FDFF267195 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + F21C5CBA4AB741C65BD122C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + B941BF34AE348544404B5FC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + D69059009E0F2614B0BD0CD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + DF07FBC000811994AA3CD5FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + B77B5907A22CBDCC463F5E96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 442FA257104DC3F43E7F8704 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6802FA47C62CF8B4E1063DF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + C7C218D14A5CA2FA12D7DACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 95D9F4F9FE207892A3218D2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 298B8EAB69489A2DD387EC7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + B475F7DB75B70B3E4B4B7F83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 8AE5E337D4C522B372CB9C5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + E017DDFB6CBF44D40D8D63A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + 100C1E87FFDEA0DED983068A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 16896A1A7CF8A50B6E02503B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + FF717152F293D95B654348F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66B5BC206A1109DCBC8AD25C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 051CC362EB348D74A681E52D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA06221F905DD9CDD98CDA40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + 657D3B23563BD718BFF02881 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 20BDFAA840CB090A6AFA0C63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + F846ACC304DB78E1B8E92D9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EF132703C5C44069FF9FCE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 094B44FEC862443EDD2F4D5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + 380538B4E8B87874CB1E2975 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + F932CF12ABDCB50B821C1E94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + 5CC8F641B148F0B65D9D2220 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F82B0E42456501E80B8C6D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + A53709BC35F19FF0787F7105 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 240F3DAB2DA7C7E6C4A6A9F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + 657B1AA91695ABE6F4E40A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 9F95B3B082ABC00D2857EB03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 62D8DE7BA7A1571334C10AC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F58CBA320209889DCEB49B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 1D6078A1730626B85E56E5FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF10436FCFF5C17391E2AF07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 7308F8E813127424CBEB5FC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2407506C8B4DC680715E051D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + 4677E5AA94FC80D3B2430894 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + B03252D790BC01DCBC7727C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + E2EC7F9B7BDB075E9A5B89FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + 400642196A02389CFAEDA0A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + E6271F03E0FCB32C810C4189 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A351CA21CD21807D6873C60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + B219FEF532348FBB7829832E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03F05BAD26ABBE8053F8DD6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + C82806192111971A84A5CA46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EFBEA4EB76D3F8438AE6697 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + 6D2B28B962FD48CFEF6F37AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F86551DA18AAE93A1196558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + EC0D02E6109E48884B1132F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF58536809B334D6BEBF284F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + AAD97DE77FBDC50F2787F678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 95BB5C0B983FDA99213833F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 79918BCE45FD23507F13C6FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 732B9277CF246D5EE48868E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 159CC6A366C134A2DBF8134B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 5F928CEE3F97A4590645A784 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 2F130443849734034C34B8D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 646A649622FB23425FEDCB55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 11C222CC0417AA247988BC24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + A559C3764549A0DC5E2AC18D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + D0DCC2B10088DD6B0EC81157 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 277A95C2AB36DA19D38124D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + E49968F84E838B786F246076 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 96FFE580EE546FE29BEEE87E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0FF78D2DD36EE42677EB6E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + 16967E71E1C12F2074AD8DF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA5452636BD93706CD96F0E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 284EF5A78F59935B12B08B95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 60CACD7A8922D6B4D2036C0C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + 59C09FB4F21CF4476E61F36D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 98CE72894DB7F52232D78054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + C28067445CA8F9E235785AA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6F9C4F0E726F7A0B8CD23F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + EBC819613232A86FAEAA36EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69378466815C5EB60E40217F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + D6F00701BFA022C4C898EC4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + D89E8269E1FC5794373FFA76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 41F1FE689C4021626F737AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BF62476EFD47D2E105AEE1E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58D2D99C11335CB88F390D13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + 8310AB938BDC75223EE734C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51FFE2FDB93E1CEDD3ECC810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 0219BD235B12AAD9042FE0E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B3F24B0900A66E917AF1EFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + C789BA712A09E3154DF66253 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0A8514366712140FBEBEDBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 1B799D210634A77F53B6A368 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + 1C4B22AE2C14477DD9663A5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + 1A751E2C05C9587B067F69EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2132FA751C597AEB7B560903 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2B56F40E8342461DDF302B67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B15F6F2CF3CD34BB67CDF44D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + E988B5B3104F30B99C8D2E5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 481C19C473855385C2EC2389 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + 44F6179C8619C71751063E77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BDB8AE6165891B0ED608FFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + 2E8D9A15339C5F5339103F52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA9A4D79FF6AFACAE237A344 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + 6B4556A80A1525895316702E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 795723E00AB0764CBBC65D10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 98003C53B571D24566EB267A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 099C1712FC593A6E0BB4B28C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + A023AD1607D2D0D99036C0E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + 5457C7A705065A8363D9E0C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB926529FDA294A98D8077C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BBE804D364C521319729EB18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + C5D3F17A9CD6C8CD91A055D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 2FE92A23D647FD0FFF9E47B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A9E039E7B4043D607005FA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 5964153E211A83FDFDFE34C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03D3818437E80468310C49BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 839C7874E5819621B7027553 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6CF20D74B7E70191A3D9081 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + 6940D8BCC7FA16AC023EFFEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8ABC867202D83384B13EFD2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B6797D533A597C13A827B89C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10B968DE4389AB2A0DEF3F57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 78EC26DDC59878469E187A5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0547649D3D9EE7BF3A36917F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + F037113BD69BF0523B1AB24E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + FAFB29BBE8DA31C3A3559479 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + 8EE7247F5EE9588903C92499 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E71E6751792D19E6C3FF37C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ED8A4AD073DCAEFF79983F65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 7FF78D3385E0FD93F12DC738 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E97DF5C22AF311AE5A290FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 9FAFA0168A0ACA1AED8C2EB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + B44D14DE32B309C69863A442 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 86E4606F34CA44EB5CB8A480 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2170C08480A1AD960C473600 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 565957A2DDB23656891C5B70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9EE78F2538DC6DD56FCE6A6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + DBD67E2323D6CFA198394748 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69E6FB2299276C9AD40898FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + E6CE8E7BC42CC63D4302C08F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + C48A3FC7E41561241CFB3643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + CA3FFEC2B425B4F9A3513039 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7F751D0147338B308E3DCC9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + E28843A5AE4CB027292E720B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + B07C9FB7884928BF0D6140AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9414728F8B97B25A7C150AC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 90CB9E95E1C54BE3CDAB3442 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7C0E219AC200231511BD5EEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + D2832CFA99C2A6ABBBAF0764 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4AEAAB3AA060C6D0F446C43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + BEB72C3038F4A7A921A2FB88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CE8035D73777C827F358367 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 41739DBFE9C2A5FFC14334BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED10D196BE1A20F944E25516 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0430ADC9EB5D6071D885F684 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65D358EECF8405AC742FF719 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + C2B583BEF3CE04700388ECAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41A67CC51223ACB7177017D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + EC0042455C8905DFE144285B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 729810A3ACC467E087BF2937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 4349E989681FD9C62DD8898D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4D0EDEF7C4E7D3F5AFD80200 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + B6370ED749A56D0F68B3BC90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F89A8C2E6840FC5E13867F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + 77C8F572316FC66E5F21288F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E0FDC6DD6CAF77B04D65A28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + 895CAC3134C74903AD2BF6C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01A265D800F245A5C48AAF5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0BD3D84ECC55BE83F4ADD400 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C62671871CA15660E90983D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 69CA3715AF178F71B1514ED7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 868D73EF1FB52E0955972B5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FE030A4D48F11EC5C216C104 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D025925F2A1EDC834CB261C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9FA7BAC94F86A562C4A5E7AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 469280541240D93C3764A55A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 957EA26B61D904114B0EF8CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + F78F7D3EEABEC384CF520A78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + C4D1648F0AB8F0755E51FD28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51BDA9647E0AA33F642E162B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 5329D526F0847E8C516DE341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + BDB6A4EE698EFDB5345DFCA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + B74AF55ABFC7B67596D1E4C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E83030546DC0009E4252780E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + 3F05FC92A5F8C9F543C18E7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + FCA6172996770FCB415DE7B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 9DA88D6EA546060B595E68C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 084D469F7E8767E95659E3A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 17D4051063C1BF66548C6E65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D85CE88913B2720836FDDC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + F2531D31FE37573705EDD154 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + A819D7764BF048296E41E624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 61093648CFEEF41F99099748 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 743DDF1CA79AC8D40521FFA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + D74E816672C1F099D1C3EF00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2750F5BC4F6AB396D4FF9D42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + E5F61EA21DC99F35ABEC13F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4E75964C5E90FFF39D68DC02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + 4C9812ABC497516808CDBDA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + CDEF43739EA660FF6953A8D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 88F6BA4ECA1D71B144041902 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4911D011DC01E84EA8D2E168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + CB067C41D86C2CA578F0EACF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + B18EFF38A0A6B20F3717C724 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + 6A46DE505460FFC49DC6401A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + A94EEEBFCC3DAD0287775479 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + A57C0AA9B00AC6A6AD98AE62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5FD23507F13C6FC0B13FA754 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + 387D2DB8E2B91A9404B4406E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 049869B629403853AA619C94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + A2C5067D34A407FC361D9EFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A12659801A601ADF71301E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 120AD1D89E961ACD9F8ECA93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86BBEE6309E58E0BDEE8846C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + 28B7B4B8C3EB900389BF3667 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + B86ED92661F75CF690D6415D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + 16BC7AA0CC3055C5383592E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8B87A7265B6390E877FE05EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 9C8EEADCFBDC3524E3B23C04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA6AC29CACE626B78BBA0812 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + C4665D00CF1123246BA1B9C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 79595701D7BC4109C8F65306 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 2FD8653CD059413AFF3ADBA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75C4766D40F4775B12DAEE02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 93C785C3FFE4651B0E8187C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0B83D0BA7105B28B1C6745B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + DCA4AC991303E1E9B2862AC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + B6DB9662AE30F031DA23000C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 29FC38D6B0075FBB35237B0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83F8C99659C763CB8B0E7980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + FC8BD4E84E1857C087A0C1C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44C0A4D4685F5B43B4E3CEE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + A33DB1CE9D93DC7E42FEAF64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF3A79B8CCB0C1FBC8BC4BC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + 7CDD1B3B7B3F006928029048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + E902D5CB2D21A833FBD3970A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + 855802C8A821D4E040AE6122 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 535A59B825BB2B64CFD7282A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94F79926677EDF45DAFC2D04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A4D043D2D45A1AC91F042834 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91AFD4F8512ECD48ED3D794E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C50C8C44270BB4AA6E29AF60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F69E2661F230F1DC18326CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5C0F2C640FFC26E024196A26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B86831A0BADCFE5CB96E938 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 68D86B6027443DD81449A9DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D6F8948F05CD532A07BBD87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 60DBD431DA4D7378E7AB80CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 56767DB590F28F22A31B627E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DC600323CDEE5B9048D06441 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + AC94F86A562C4A5E7AA10477 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A61FC816739332FA82460758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80627602CAE05EA69FD9596F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 677B27D84C90429BA13D42AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FBF0201D400CD6C6782B10C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3748ACB7C1A3C7E3BDF9FE18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3EA83DACAD16407572FC7CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 8D04265467911BDA7CE473EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53633A0D3DAC9248BBB83763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8ACDB3EBE51C3DC2083F24FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + 85FB0DEA91225314395C3832 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19A2ACA1955FFFB0761B3AAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + 354C9AA1B5E53788110AB9D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA6A808584C2C8F5DFC040C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + FDC59BB60A9D8C68FC981BDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7F4076432C31906CDC9EC20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 5EAF841CE7825C1E452DF78E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BA3297D6C0A44914EA7F638 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 1834349CEBAD352AE3EEB3B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CB18445E55D24E0821DEC13 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F38AE0F8B337DDCCC4C28760 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3A3E1CB8A2EA4F41559B4F71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 613C2EC1650BAF979DBD37CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 747C962B0AE2FB8F96222CA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6195402FDADD8F9FCEEB2EEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7E95E0F2BFF5E08537D66883 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 027FCB4AFC7C70265D75309E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C9975C885F6DB235D5AE7AAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C8740A874EDE51D34492504 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 3AC4F227C2DD3BAC7BAFA271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + 10DBDC65E17EABF8E02F2141 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAB98449D81929523C747F36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 2AFFF18A72735B11FDF0A75C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 988C3C06A0BEF3E60BC4AE85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + 70717794FE65B463B2BDF094 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + E910F8C77AEA9B816D5833A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 26C4C985EAA8ECAC4DECAA75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + D80561A68AC26CEF5B3DFBAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 175A456E11A7C3BC16FBC7A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68484F3A40049FB9E16A2A31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DB7C2B8CE82F1B0844B70AB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71F7B0155C04F1D2E0DE02C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 8B1C8C9C1D0904888319960C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + 48CBBB4DDAC29D2EC1C867D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + B9041078631BE2BD7ADDEA2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + 7F7541ED871BCA1AA769BC5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68FACAECB07570A706455F4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 850C150C1C6D87A0D21AEE22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 176A00E6ECBC817337D34347 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + A9E251F3C9C06A834CA52703 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + 88B2266157A118BB2058CC47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8EA46C100F30023F74CB109 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9F58B09F67E00AF09B4A71D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 9DE0D6638C8FCE03CECD5D91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 9F54E6F57479AC981EE7ED25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + A703B34F1CF6059C8158A6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 38D13C9B66F896C47C5CE095 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + F42CEC2AE2C6607C90646295 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47EFF1501F07AF7C3D422090 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B43D084FF9FFF82F7444058 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44A7304EFE6B6B7E41C7B755 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 62A97968E3CA0CFA6513CBD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 0C0909FABA4FB71CCB4A0EC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA712F15F8C80BF55297EA44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + BC5E2A691B0A52816EA5C7DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "DEVELOPER_DIR"; }; + 257FA3A7290842556A7377A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUBuffer.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBuffer.cpp; sourceTree = "DEVELOPER_DIR"; }; + 8223723B38EF54A3B8644621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBuffer.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBuffer.h; sourceTree = "DEVELOPER_DIR"; }; + A272B6DB3C84B9D91BF0F060 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + E0586393177D674A237103E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewBase.h; sourceTree = "DEVELOPER_DIR"; }; + 17ABF2F862D57C89FE85C307 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewControl.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewControl.cpp; sourceTree = "DEVELOPER_DIR"; }; + C5139AB9C4FB8AAD09B8CD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewControl.h; sourceTree = "DEVELOPER_DIR"; }; + 6C9B2F471F11EC467FDB06D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewDispatch.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewDispatch.cpp; sourceTree = "DEVELOPER_DIR"; }; + 55D565AF7527BA71D7ADC2D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUDebugDispatcher.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUDebugDispatcher.cpp; sourceTree = "DEVELOPER_DIR"; }; + DDD465BD14877C159A3217E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUDebugDispatcher.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUDebugDispatcher.h; sourceTree = "DEVELOPER_DIR"; }; + 6381E6023EA29B5BC90F0F11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "DEVELOPER_DIR"; }; + 79725AF8A4315CF7AEB0A650 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUDispatch.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.h; sourceTree = "DEVELOPER_DIR"; }; + 6EC9B05A43174FFF25BA3382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUEffectBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUEffectBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + 6EEDB768C0235390844832E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUEffectBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUEffectBase.h; sourceTree = "DEVELOPER_DIR"; }; + F17E1C506A2CB31650AC64A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUInputElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.cpp; sourceTree = "DEVELOPER_DIR"; }; + A7453366F39F172187B8469B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.h; sourceTree = "DEVELOPER_DIR"; }; + 8E41015AF77D494DDAB5546F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputFormatConverter.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUInputFormatConverter.h; sourceTree = "DEVELOPER_DIR"; }; + 71A86FA30C6E11992FD52782 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + 09365764C5E388C17571B74B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "DEVELOPER_DIR"; }; + F7A8C106BF631AFADA24F8EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIEffectBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + 3F222693EE8A706D9E66140F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUMIDIEffectBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.h; sourceTree = "DEVELOPER_DIR"; }; + 8C28A1A8AF5FFC61D88246A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + D2EF4DF7FF52621B8EBC3C20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.h; sourceTree = "DEVELOPER_DIR"; }; + 4BA3B7415620D5A6A3DD6076 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.cpp; sourceTree = "DEVELOPER_DIR"; }; + 58CAFB52D888AF57B1A82540 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.h; sourceTree = "DEVELOPER_DIR"; }; + 3392EEAEB79019283AD94C41 = { isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r; sourceTree = "DEVELOPER_DIR"; }; + A9C716DF2B9CC6D95877A448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUScopeElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.cpp; sourceTree = "DEVELOPER_DIR"; }; + 05B55564FFFBBBC713829291 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUScopeElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.h; sourceTree = "DEVELOPER_DIR"; }; + B50242715BF944E7711A5939 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUSilentTimeout.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUSilentTimeout.h; sourceTree = "DEVELOPER_DIR"; }; + F2595F2DC0235F848F9474E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUTimestampGenerator.h; sourceTree = "DEVELOPER_DIR"; }; + D2FF01F8AC92CBFB1A4AEC2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUViewLocalizedStringKeys.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUViewBase/AUViewLocalizedStringKeys.h; sourceTree = "DEVELOPER_DIR"; }; + 38E2002644D5BBC2E88ACB70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = Extras/CoreAudio/PublicUtility/CAAudioChannelLayout.cpp; sourceTree = "DEVELOPER_DIR"; }; + 248B812009870EC9531D3269 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAudioChannelLayout.h; path = Extras/CoreAudio/PublicUtility/CAAudioChannelLayout.h; sourceTree = "DEVELOPER_DIR"; }; + 6C254919C15224D13FE6D174 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = Extras/CoreAudio/PublicUtility/CAAUParameter.cpp; sourceTree = "DEVELOPER_DIR"; }; + AEDBCF2FF9E1FBD5B9958FB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = Extras/CoreAudio/PublicUtility/CAAUParameter.h; sourceTree = "DEVELOPER_DIR"; }; + 70DC3C63DDDFB1C5A22A8C36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = Extras/CoreAudio/PublicUtility/CADebugMacros.h; sourceTree = "DEVELOPER_DIR"; }; + 616DF8861CA45D7FFE92CA35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAMutex.cpp; path = Extras/CoreAudio/PublicUtility/CAMutex.cpp; sourceTree = "DEVELOPER_DIR"; }; + 52F3077A4F38B60682CD77B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMutex.h; path = Extras/CoreAudio/PublicUtility/CAMutex.h; sourceTree = "DEVELOPER_DIR"; }; + E9F52DE288413A752B295F84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CarbonEventHandler.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/CarbonEventHandler.cpp; sourceTree = "DEVELOPER_DIR"; }; + 943EC8C2885DA0982C1E995E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CarbonEventHandler.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/CarbonEventHandler.h; sourceTree = "DEVELOPER_DIR"; }; + 35B676123569917443C05786 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = Extras/CoreAudio/PublicUtility/CAStreamBasicDescription.cpp; sourceTree = "DEVELOPER_DIR"; }; + 653554C5848EC85ACF6761CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAStreamBasicDescription.h; path = Extras/CoreAudio/PublicUtility/CAStreamBasicDescription.h; sourceTree = "DEVELOPER_DIR"; }; + 3008852179AEC3110ABEFC5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAVectorUnit.cpp; path = Extras/CoreAudio/PublicUtility/CAVectorUnit.cpp; sourceTree = "DEVELOPER_DIR"; }; + B6B85F3F336EDA568CB53327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnit.h; path = Extras/CoreAudio/PublicUtility/CAVectorUnit.h; sourceTree = "DEVELOPER_DIR"; }; + 206D40BEDB308864DE8DAA57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = Extras/CoreAudio/PublicUtility/CAVectorUnitTypes.h; sourceTree = "DEVELOPER_DIR"; }; + 51DAC3E29FE8A76EF638C26E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + 952543A03965AE64D2F7EF37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "DEVELOPER_DIR"; }; + 634B4CFC4268E257C63FA337 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "DEVELOPER_DIR"; }; + 0388AC868C8BBB6E2FDBAAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "DEVELOPER_DIR"; }; + 55F13334336342B374FA505C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + 4114359B1712473DCEE14775 = { isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_AU_Resources.r"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Resources.r"; sourceTree = "SOURCE_ROOT"; }; + 649205DDB11401C68ABB11D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper_wrapper.mm"; path = "../../JuceLibraryCode/juce_AU_Wrapper_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + C22CCBC890FB0D1B124829BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 181F4180131856CB6BAB1DF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_devices_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 11608576C57E3A204A6C906E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_formats_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + C39B8328C67764BE9969854D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_processors_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 4BF59333DA57E2C24F0A0E1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_utils_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 22C891D6B6A32972880FF86F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1C934CED6F7B4BA69116BDDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B3ABDEB35F903778A009493E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 7D309CB3240B35D414815F70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 5EBBFDAE5869767E50249CC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1B123CF00E6D0EDFCA6FC5B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_DigiCode1_wrapper.mm"; path = "../../JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 2F13C1272F4ACC4CA3DA8F00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_DigiCode2_wrapper.mm"; path = "../../JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 2204575E31367AA99D353850 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_DigiCode3_wrapper.mm"; path = "../../JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B6C7C7A200B428CFD162EDEF = { isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RTAS_MacResources.r"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacResources.r"; sourceTree = "SOURCE_ROOT"; }; + 39A4D878431E9330AA38CB3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities_wrapper.mm"; path = "../../JuceLibraryCode/juce_RTAS_MacUtilities_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 469F59300FE180A8366F1E23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_Wrapper_wrapper.mm"; path = "../../JuceLibraryCode/juce_RTAS_Wrapper_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0C31117E7AB2D703ABB393F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper_wrapper.mm"; path = "../../JuceLibraryCode/juce_VST_Wrapper_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1C7D0AE1352D6713D906C4AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; + E1C5E3C67B4A2621AD2D3E05 = { isa = PBXGroup; children = ( + B50846B34831C2C28007BE7D, + CF304FBE4BC66783833C4B59, + 2C001306D198F8B21ABA7375, + 662507104D05B579BB68F391 ); name = JuceDemoPlugin; sourceTree = ""; }; + C522683344768EA700ECB1E9 = { isa = PBXGroup; children = ( + 79D97853C3A0AD27EB090B3D, + 834BA01B0E86A3DC9DDA2D6F, + AF42B5894BD21472C3122411, + 91B1FA993DCA649324A71618 ); name = buffers; sourceTree = ""; }; + C6D2A12F110C2BB0ADBC723E = { isa = PBXGroup; children = ( + 3A02DE8D9D2D4509C9E35151, + B7D999243F310E9541312090, + 78A895C8845E4EF0A39840F0, + 8F953A4A5D842AD7A369FFF9, + EB65D80F872C942DB20B3633, + 1727289E028242926504A639, + 3F82C9C5795E419564A3A7E8, + 51B9C5570EE7A1273945B62B, + 43AEF28305C5E01476E99FBB, + 973BF2215377968D7915E1C9 ); name = midi; sourceTree = ""; }; + DC598369653DB9A7B02082B0 = { isa = PBXGroup; children = ( + B5E613ACD2127AF722CE2C24, + D2C42B45CDCA6312490575D3, + 9D7F58A127F513B4A222F5D4, + A51B70AD9DA24907BA4967E6 ); name = effects; sourceTree = ""; }; + 893AC3FD1BBE296D9E8B6B67 = { isa = PBXGroup; children = ( + 5D62AA67C157756D8013FEF4, + CA79EC924D1821245B155BB4, + 2DD97F04EEF9B75D5A52CE6C, + DCE6086881B31CBC0B933987, + E10D428DE39D5CA353F525EF, + 0B5853D598943EE225F51944, + B2EDF552BBD6831318025F04, + F45E30DD975B870D03F1EE23, + 0D7A9005DE26C6E598FD79B3, + 12537150BA6507ACDC884B8D, + DA34204C5F6C080C547DF86E, + 2644A942FFA4808D29C9F15E, + AD8F15842A2A7942583101AB, + 839A0FB7FD0B65653697E651, + D877ED01865DA0A2A5E1C5F9, + B9506611F425243DD224A907 ); name = sources; sourceTree = ""; }; + 5D99C977ACCD09262F06F662 = { isa = PBXGroup; children = ( + FD653D25CA681906503B0B27, + 739DA7CB188AFA706CB518A5 ); name = synthesisers; sourceTree = ""; }; + BFC76B471FBB15B7A05D54AE = { isa = PBXGroup; children = ( + C522683344768EA700ECB1E9, + C6D2A12F110C2BB0ADBC723E, + DC598369653DB9A7B02082B0, + 893AC3FD1BBE296D9E8B6B67, + 5D99C977ACCD09262F06F662, + B2A328858AB46F959F8E76DB, + 4A449540F7D389E492E6D2CD, + 439ED1E8B84E115E6285B576 ); name = "juce_audio_basics"; sourceTree = ""; }; + BA843B3AB967BE69FF2A2176 = { isa = PBXGroup; children = ( + CB43B3098075F141318C2EF1, + 888D8FA43CA02DE67EB9C3B9, + 166FF808E8658C257C6C7306, + CF3A42CB3DEC210E00915E2B, + 69DD90D857CEE079F60BE096, + 18CF7D3321C0317531B8F09D ); name = "audio_io"; sourceTree = ""; }; + D64E9873F76EE06FE45E7F2F = { isa = PBXGroup; children = ( + A3AD45428327F447AFE21A34, + 9E6386F6DC3392D8EB2686AC, + 83A72B3C2CFFE3DB12B1B64D, + 0C9FA9DDBFA83D677C14D7A6, + C5714F82DC34FA40112A270A ); name = "midi_io"; sourceTree = ""; }; + 83433EF0151616150C4EEEAE = { isa = PBXGroup; children = ( + 27910FC5193FBB94A4F2484F, + D62BF46B78305C0C400C32B9, + EC18BBD30A10A367926567A7, + 53857E80CDCB81FCAD086ADE ); name = sources; sourceTree = ""; }; + 8873168F9654ADCA30CE9750 = { isa = PBXGroup; children = ( + 3EF0CB3821BE170D03EB3B92, + 2364403E9D897A5D976CF372, + D3B6CB9FE1DA1AFE5FBA9FF0 ); name = "audio_cd"; sourceTree = ""; }; + 901E35AAB62BE66E2E74AD96 = { isa = PBXGroup; children = ( + 14359B1712473DCEE14775E4, + 248B33360F7C5B7A8816ACF5, + 95B2BB66960D3F1956A7C85F, + 935CE55C69725E5ACB677C07, + 51DD7E652B591C10F0BCC626, + 0A9314300E64C01A49E71FAB, + 20E067BD710DD44C7A0E345E, + 0A48AC275683E6896C9AE032, + 4C60033A7F7F650DC112DD53, + B750E17FF2D43F1FDF3FB6C5, + BDEBC04D78536B3777234AAB, + B56D5FCED5D7D910E919D49B, + 5E01549848C983000813F463, + 94F64DE7F0680047E63D84EA, + 580C81905A351AF53376455F, + CF445D73A28A3CA2A9F929D1, + B9F7E56E6C28FB1E22D99A54, + A8EF01AD06A8E8D6CFFDE7E5 ); name = native; sourceTree = ""; }; + 6A215681F313E53CC2AEB7B9 = { isa = PBXGroup; children = ( + BA843B3AB967BE69FF2A2176, + D64E9873F76EE06FE45E7F2F, + 83433EF0151616150C4EEEAE, + 8873168F9654ADCA30CE9750, + 901E35AAB62BE66E2E74AD96, + 165741666296E2EFBE50794F, + 7EB89E3DDEFCBD0047DB6EFE, + B6EE0AFF95C353032239CEF6 ); name = "juce_audio_devices"; sourceTree = ""; }; + EB0F7270B0CE1D72AE436FB2 = { isa = PBXGroup; children = ( + 138CB97331B69EED2EA0DBB1, + 40CB74743555E3030F37CC8D, + 0B8B2A722347AE1DE371CC1D, + 693063104CD6F6E3E6CD5673, + 061167C305C9E264524AB24A, + DE683A8C8E5546D6371CD493, + AA0D3B572CC82D4D2B9F0219, + 4EDE2469615E450A465CCCDB, + AD352AE3EEB3B3CFF496608E, + 2CEB59A20194FD6B8C5A4B22, + B7BA14221937BF86D765C61E, + 0D01A3FEC15CBD8E0402F376 ); name = format; sourceTree = ""; }; + 2CA7E1BDD2451F14A7AAF44D = { isa = PBXGroup; children = ( + 6B84967F0D35460B00AC712C, + 3954116510A53F4A57089B83, + BF858C264F0861E3CFF63D97, + 87ACE0789711E68C26A25482, + A0F363C1E9C9C1380225CE8F, + A4F3A368BCC8D4541BF9C176, + 725E62E811970BEFCEDBDD2C, + 48C052A5026C7C55D9924AA6, + F4B0917BA6A6B4E2BC9F2442, + 0062F959DE84F004A165CAB7, + D04D349F69C746C91B97B59F, + 08C3DCB97C5E1A3E0C403F1D ); name = codecs; sourceTree = ""; }; + E5D97EEC9BC289CD26883BB3 = { isa = PBXGroup; children = ( + AC1D8797B16E7DBB710D49ED, + 83C4E6C034C335DBD9B3EC1D ); name = sampler; sourceTree = ""; }; + 0B89D767CCDBEACAA36F4F1E = { isa = PBXGroup; children = ( + EB0F7270B0CE1D72AE436FB2, + 2CA7E1BDD2451F14A7AAF44D, + E5D97EEC9BC289CD26883BB3, + A6A6E7DE0C86642C41F8EEA9, + 55AA8058BF60E87F9A8EDCAC, + 1E585AF759F2D5D1DFA2B2A1 ); name = "juce_audio_formats"; sourceTree = ""; }; + 5E46EF7D1FADF3167CA50829 = { isa = PBXGroup; children = ( + 5493EA0484062933BCE48153, + 4114359B1712473DCEE14775 ); name = AU; sourceTree = ""; }; + 608B63FAF7D4BE7088F33342 = { isa = PBXGroup; children = ( + 61C0950C60A3F650ACFC2F1F, + 75BAD8F23290209D27AC31B7, + 9AB31BF7048C4BDBA16C435F, + 122547F526DCF1A27258E132, + 0AB78D4F84901132EE9EC93C, + 2097C36ABC3A60F0D47750C0, + CD89FA1E8535CB952C5FBF06, + B6C7C7A200B428CFD162EDEF ); name = RTAS; sourceTree = ""; }; + FFF93E5EA8087D93858834AD = { isa = PBXGroup; children = ( + 073AA7F99EE2C0EC0FA7A2C2, + 69293D4968A891AC80AB80F1 ); name = VST; sourceTree = ""; }; + 73787715A1BDB64C7B9C48BF = { isa = PBXGroup; children = ( + 6182DF59266C697D90219233, + 2A1E1220674CD7D19C8DC580, + 87D695A69FE17719B1A26A8C, + 9E0010523FA49F5D0F638DF9, + 27DD4E3298BD1C7DD9611E46, + BEEF67A0485EF67A2A377070 ); name = utility; sourceTree = ""; }; + E8ED4B8C4BE3BF166D533D36 = { isa = PBXGroup; children = ( + 5E46EF7D1FADF3167CA50829, + 608B63FAF7D4BE7088F33342, + FFF93E5EA8087D93858834AD, + 73787715A1BDB64C7B9C48BF, + 5788EA7F763DEBD1B484C7B1, + 40D939406590B110A7B26753 ); name = "juce_audio_plugin_client"; sourceTree = ""; }; + EEAF839B1CE0BBD937B50D5A = { isa = PBXGroup; children = ( + 304FD4FD5771F00C8EA46C10, + 7C4583C6FAB6AD7AE8E529E5, + 9BC465D0413224AC25E3FBB1, + B861EBF30C5ECFD9E3A847A2, + 395E22C58EFA1B5CA68F254C, + 5E06BFA1C4DF8FAE59494B1A, + DB670C72BED9A68A57F214F0, + D38815120DA866C2D6BDA2FF, + ACC4B1B4D5B4616D477006BF, + 83E67C33DC1260F6F22CBAA4, + EDDD4CD25497C1D7355A59EB, + 2DB074006749981D9E09D7EE, + 9A66D5682AD4C666D43FB767 ); name = processors; sourceTree = ""; }; + AE475789C5280E3515200641 = { isa = PBXGroup; children = ( + 7E88793F19EB8300670CFE7D, + A68151BB2E0B480DA3BDCF50, + BD7AC1A071277BDAF3AEBFB9, + C2467974C3A59CC78DB4302B ); name = format; sourceTree = ""; }; + B77A866CC44F98CEDAF273AB = { isa = PBXGroup; children = ( + 4873055487998A57CA1CBCBB, + E0EDD61D2992D3577E49A5F6, + 54967804E74511B5B261FBBB, + CF23F9C6BE15355CF99BBFF0, + 400A6A01191D797D3EE4E073, + 0BBC016089CF3E442B194D34, + 669838423C386D248632F0E1 ); name = "format_types"; sourceTree = ""; }; + B580CC9D7C33650BBCC14B9B = { isa = PBXGroup; children = ( + 150B8E592622CBACAF753FD8, + 628F09B179588AFC179380D2, + 9E972084E1B96847524BE56B, + A535D31A594609A53105D53B, + 764474A9C6607DFC8D733CC3, + 8D5F65CB7D6019CE2B8D8DE5 ); name = scanning; sourceTree = ""; }; + 1991295C722B46843C92219C = { isa = PBXGroup; children = ( + EEAF839B1CE0BBD937B50D5A, + AE475789C5280E3515200641, + B77A866CC44F98CEDAF273AB, + B580CC9D7C33650BBCC14B9B, + D070AD98964443FC3A77A210, + A2E594D2B66AFACC4E50B4DB, + 38E5B27D1F1D89059B5AB7CA ); name = "juce_audio_processors"; sourceTree = ""; }; + 310DD2A543337A13C3FFD73C = { isa = PBXGroup; children = ( + 0A9DCA7DB5D0187DF7B44452, + C589AF01D0A08486FCCCD333, + D9FB82C6424438EE90BCB176, + F2C56BC80F8DEAD46479F3BA, + 5CB85EB9E63D91141810A9F8, + 7BD853FE11B37B9F521CD26A, + 8DB942A716F41A81F269BCBB, + 018598A99BA724F0F8249048 ); name = gui; sourceTree = ""; }; + 7486CF52F0FF78D2DD36EE42 = { isa = PBXGroup; children = ( + BED04F5369CEBA4BC47A8439, + A20499905705FBDEAEE1DB38 ); name = players; sourceTree = ""; }; + FF32B4CC628640C940F85F48 = { isa = PBXGroup; children = ( + 310DD2A543337A13C3FFD73C, + 7486CF52F0FF78D2DD36EE42, + B7DC31A0BD9CE90FE0A4FFAE, + A48ABA58BE136435E22F60F1, + 9B0AF0A6191695C19885FE77 ); name = "juce_audio_utils"; sourceTree = ""; }; + 1DA5CDBEBB3E1DE35A1A8C75 = { isa = PBXGroup; children = ( + 7CFABA010D3616C0AC67687A, + 4F8F2F5535CE15A1996FD473, + 07DBEA6396526B149CE3636C, + E5183EE70240F85EED587EC6, + 954F4F0531C4A771A82D23E5, + 5D960F6F487E3C5DB9A883BC, + 3F92A57E01656BE3B6602606, + 2573C5D190DA5E7B9B51E6B4, + 67500EFA60FD4E509506D82C, + 204108608E2D126A249C49ED, + 8520F7C32171C59084557BA5, + 9FE77EC6FC77A2DB7F5BACFF, + A723B656837E7C2A29D2105D, + 602EED36A7D35A7B7D7D944D, + B444D5AF982ABCF910F36542, + E942F4FB92FB1A3B5744C071, + 19E9602A0E564C63177243D7, + 969CC157F12C1D006503C664, + 2D2A2471850C6CD95C5D259E ); name = text; sourceTree = ""; }; + D82EF295D7FA66F125593901 = { isa = PBXGroup; children = ( + 3F62B7DD2AD57E232C5FA2DC, + EA9A6293F340BD919DE65202, + 5BF284171BA3A6164866B233, + 0FEB259ECA5812848B14FA45, + FE0457D172998D228DCD8358, + A920DF6F9A07C1A0BFD1508E, + 58C1842BEA53449220D8BB04, + 06DAC79105CB6C627F262BF4 ); name = maths; sourceTree = ""; }; + A84DF7E735B8F18A6A56A1E6 = { isa = PBXGroup; children = ( + 7957B8CC52C7F1AD09FBF90E, + AE64178E7C965D8A09D227A7, + 200A4D60F86261D0FEDA650A, + DA51105C5D3DBC81BCD5A434, + 66A4791EC424D24C209F42BF, + 459D8B02EF8B37C545923C01, + 0967090BC2623157FFD7A780, + 3C28F977FB0ED0195F277910, + A3FC7FBC7F23D897588AC92B, + 3652F309E568495DDE27E308, + 5ABCA62B35F0B5B20988EE8E, + 81D0F4C905AB85B5746FF35E ); name = memory; sourceTree = ""; }; + 999EF665BD727176204D71F2 = { isa = PBXGroup; children = ( + B2F4D66245A37F1310CF5919, + BA24289B0CD597B9855A2DCB, + 302C54D1172A9B83038F0E6C, + F6FA985F60E0F9C322674DCD, + 06B6081CCA84AC932364403E, + DDBEE64DC706CE804E5F0AA3, + 5E29D9AB81C3D328D1F33930, + 22500FE8CA71E8A11AA5A354, + FB548306D21AC354BBFF81DE, + 34081BEACF00D83C060D4DD4, + DC8CCA9CD0FFDF710E9E5F85, + 3ADAD8A41B31F3C8FDDEA56F, + 357792D913329B68DC1B4CDA, + 1B7CCD412EC93CE87AAB30A6, + F704236DD54A770265280454, + C7ACFDDD54A9EB4F63271DD6, + FE34C402EF9ADCAD34FB657D, + 71D89D144E2BEE49BC2A5370, + 2A9EB6D4823627887ABF8864, + 949D1A34C80481D1EE077492 ); name = containers; sourceTree = ""; }; + B9C3113C3E132546EC787CB1 = { isa = PBXGroup; children = ( + 1BC7ABC9AC51200C07830314, + 20FF0F454C1833EEB09BBD86, + 3AE86EE723ABB20B7B64065D, + 9531A1A57F2FE4EC53181FC4, + 8B4D6896873452DEBCF642AE, + B01AFE048B28EA9153D33B00, + D951E8540992AFA8A37489F7, + 8778F01DAB1E4F54197D5830, + 0C63392284049B2E6C6679E5, + 5C5879C1B77E9C18DAC9A14A, + AB8E93B3015C6FD019B274AA, + 21A0B34B1237156012C739A4, + 1CD8825177F370FCF2CFB42F, + 9B205E70D832A4EC92423335, + 4935DC3B6EC1CAFD07932A48, + 98543FA6F0FD4DDEBA6427E7, + 7BFE0C01FF4706C3DBB3F421 ); name = threads; sourceTree = ""; }; + 64F1D40E9FB8690EB46AF4BE = { isa = PBXGroup; children = ( + 9275A14A085BEF8D09F6096E, + F0CEACD8630BA00C3E910930, + C0813C44DC69E1626F486CE6, + B330AB0B662B98C6E5A52728, + 9C2BFD3199188B1955680ABA, + 96270AFE383F1A5BC3CD034F ); name = time; sourceTree = ""; }; + 0F4427CC0AC4BAAE4D05A840 = { isa = PBXGroup; children = ( + 7537145FCC04A715446AE30D, + 81737C6AD0A62F50B30EBFB1, + 43A5AE4CB027292E720BD130, + 278A2798E538CB32C7A5ABF7, + CD88E76DA983946ED13105AB, + CAAEF7E226EDFC9B3EC5347F, + 73DF08B1223F906D413FB6D2, + C3EA2CDDBEFE6A7131C2D125, + 71C8501E9DE184B701640E5F, + CA7E2E98A755D58B51F73127, + 16329FDAB1D7BC92B9032333, + C667FEA6E534DEBD84470EC5, + 9AABFFA8029981CCB7EFA011 ); name = files; sourceTree = ""; }; + 97B209BBCADEE707F3DFCF4A = { isa = PBXGroup; children = ( + 16938BC6DC5F75B9E17A15DB, + 24BC35231F175F277299B3CE, + E6E7FB6043FC110435546138, + 17AA174FDADE523BBCC844E9, + 031D71B0E9EC086B8EE7F469, + DEEDD24C187298954F37E887, + 62153A7AB7B3F261BB91B0DC, + AFC4C0F4404D1CBED7AD524E ); name = network; sourceTree = ""; }; + 9DBCC22B50A5E802887C708E = { isa = PBXGroup; children = ( + 913740AE3DDBF5BEEBBD9314, + 3F3C5ABEDFD42FB1D535AB13, + 06F7966C5F0A7F770186CF91, + 7B7C230711B2B6994C2E2684, + 7FD4D7E65420C9D296E36189, + 75C83DB4234347CF113B4215, + 3DD300529F3A7E6CB4222EEB, + 98932C418FD0E799C090FF00, + 5C86D8760BD1C281117CCDC9, + B2259EBBC43B9522EC9E6B60, + 37BC2541E5BB21EB42266230, + EDD8383DB5A51EE9705649BA, + A6D7F76FF310C0F1A6656541, + 6C8B3C71CDEFBE96469EE49F, + 0BD847AEA05490C202179B99 ); name = streams; sourceTree = ""; }; + B9E0A9E406F0386D7A5DB1CF = { isa = PBXGroup; children = ( + FCD830DD90D9B3E7F110CE9F, + 35BF45CCFFD348A22B4D8C8A, + DCF365029E6DBB6CE79ED8F4, + 3C74092FD6A96D31E6D8EDC1 ); name = logging; sourceTree = ""; }; + E7C042581CBA33EB47F78350 = { isa = PBXGroup; children = ( + 73F107AD34F07071071F0F46, + 964FD49C5668C0C0F77F4375, + DD044A3041EE65844EB4F8EF, + 6F1C1C2090670B7DA2C4F3BC, + EF9EA5DB1E512BFD3C8E13D7 ); name = system; sourceTree = ""; }; + 13673226F71D479E2D133DBF = { isa = PBXGroup; children = ( + E167122FDE438B06431E8607, + 8DCA3F0BFB630386598A251E, + 9CEDC02B839AA0CD03E1B315, + BCA52729FCF2E4FB98AA5374 ); name = xml; sourceTree = ""; }; + 150EC7EBBB63F4C673D18873 = { isa = PBXGroup; children = ( + 52D704689CF0DC4043395331, + 894CA5AF60A037218D97E63D ); name = json; sourceTree = ""; }; + 563CFD0FCE1D20EE0722D1DD = { isa = PBXGroup; children = ( + 27CCEFF624E1128D66A3B0FC, + 05C0EBC254350D342821ACB8, + B965C4E6F320031C1AA3DC08, + 5C2B3538434D7D20B51691C7, + FFB1E0D82326B735E3794340, + EA8357897F518E66967DC408 ); name = zip; sourceTree = ""; }; + C371440282DB8AC2CFF099EA = { isa = PBXGroup; children = ( + 21DC979821AD3A67B4ACEBED, + B23F513191E89B3BBF87C463 ); name = "unit_tests"; sourceTree = ""; }; + 53274571F9D1356389863B17 = { isa = PBXGroup; children = ( + 30DCBD0D1817707A208C28C5, + 458C3CC68BB03DD5D2D4CEB6, + 638784E18411EF596544BD93, + 4F1506C555B0010DBF733763, + 9E4799D19E98A8D7B02E024C ); name = misc; sourceTree = ""; }; + 523F97659F31912D12C91E95 = { isa = PBXGroup; children = ( + 5F5A802905E1CEEA688A5FDB, + E9E554C5D64E0396AF57640E, + 48C047D76D9F41CD97F5FD18, + 555303A6D6492A7E3B70A5E7, + 91C02452356B37AB1E8A9380, + 44527A6FD501DBE87010DB0D, + EAAAE1CD12B098CFE73B3189, + 44E8A1341810016B15424592, + 4F37E36BA5E052B3BD4B87AD, + 53E19BB6E12A1FBC58D87D58, + 51C45DFB25A384F215FBE97C, + 073BF0DCECE708125E41BABB, + 1BB777321FF3117DDA02391D, + 008EAFD1F19574F56833B40B, + 596672C25BC2E25AB7A5F517, + D964B9999E8F5E093DCBE57E, + B7D526E34BB0BE8F1D1C8D7C, + 6367A8ECEA07B15FFF9613AE, + 705AAA5F0D8B40B0137D5913, + 8834896AE780B8BECB85E933, + 9A1BC23C68C7534EBC09094C, + 336EF52511836EBF4735ADCB, + 94119AA21BF2437B2B90DF2D, + 04E2D6B0D1B38FBBBC6B8598, + A5A6981427D2E9CAE63EA159, + A6AEF4229CA586AB733041FC ); name = native; sourceTree = ""; }; + C06A2552AB1D50FA96D307AB = { isa = PBXGroup; children = ( + 1DA5CDBEBB3E1DE35A1A8C75, + D82EF295D7FA66F125593901, + A84DF7E735B8F18A6A56A1E6, + 999EF665BD727176204D71F2, + B9C3113C3E132546EC787CB1, + 64F1D40E9FB8690EB46AF4BE, + 0F4427CC0AC4BAAE4D05A840, + 97B209BBCADEE707F3DFCF4A, + 9DBCC22B50A5E802887C708E, + B9E0A9E406F0386D7A5DB1CF, + E7C042581CBA33EB47F78350, + 13673226F71D479E2D133DBF, + 150EC7EBBB63F4C673D18873, + 563CFD0FCE1D20EE0722D1DD, + C371440282DB8AC2CFF099EA, + 53274571F9D1356389863B17, + 523F97659F31912D12C91E95, + E81B3BBCB0263FD003154EB9, + 13C1C52E419C002C956655AC, + 4B4BF726533F89C73F7F0C5A ); name = "juce_core"; sourceTree = ""; }; + 022E7A4D7C38D3C0BBCB2A7B = { isa = PBXGroup; children = ( + E26C8A1715A4D6B8B9D62D51, + ECCB179C810DC25493F73D33, + 6E837F124C347B3C1CAE2390, + 44520F4C1D195648DF5676EB ); name = values; sourceTree = ""; }; + 8B5DBC6D3908994B68B455C8 = { isa = PBXGroup; children = ( + 8E5A305AD4133B822040A0F8, + 56AF995564296D2773B73230, + 7D7E0E0A3D02FE68562DBF00 ); name = undomanager; sourceTree = ""; }; + 682A5707C8E7C7A8EF54C97A = { isa = PBXGroup; children = ( + 4A8B303EE7A962F2F7F81884, + C4EFED985354ED69F6237068, + ECB6C60040D1A5D4223CE8E0, + E9064681C193CE562A9D23B3 ); name = "app_properties"; sourceTree = ""; }; + A6109CB2517057F7FE84E332 = { isa = PBXGroup; children = ( + 022E7A4D7C38D3C0BBCB2A7B, + 8B5DBC6D3908994B68B455C8, + 682A5707C8E7C7A8EF54C97A, + C50DFEEF0CB89E10A54EEF3E, + 0A16054EFFC1688B24D14D8B, + 8FA337941933A0BBD275898E ); name = "juce_data_structures"; sourceTree = ""; }; + 7CED74197096F4A912C5DC20 = { isa = PBXGroup; children = ( + A036505DD21AAE0D53F6AB2C, + 5B57CEA2CF205666357D28F1, + 32B2DF642BB70092DE9AA12A, + 083ED493CF067E5795170496, + AF989B421EBCAD9FB7AA8982, + 1E53B088BAD18F2C1F5E5565, + 906D0FBF9F0B80A868EF35F9, + FA83EE957B677EB477442FE2, + 7D05A4656F3FDA9B8C514380, + 00A4A58E6F5F65FE69A0F00D, + 7CAA77892F64DE1793A3CE20 ); name = messages; sourceTree = ""; }; + FE546CAE7BB75B8A3CC7F052 = { isa = PBXGroup; children = ( + AED45BAD4F0E2B3CF8A88BE3, + 8A89660118207A23A52A3359, + 4AF25D7BE0193006D32B1817, + E7BCAA3499C8D18AC3600B6F ); name = timers; sourceTree = ""; }; + D9C6422FE18597D600C947DA = { isa = PBXGroup; children = ( + 3587355A9AAC5C37E393AC34, + 0205240A8F72E5720BC3ABD4, + E3B0F4C7D7E7974186DD619F, + B9A0DC74EC5297442210300D, + 01BDC6EFFC23B2602BE63882, + 66214741888A4AEC41616B2A, + 77877A786F7B83E94906C267, + F89E6FE515D15E087759B66F, + DBF69A94459B3D3C4B2371B8 ); name = broadcasters; sourceTree = ""; }; + 832E186326AA90B60FF5E851 = { isa = PBXGroup; children = ( + 2F359D3189751A82DCB73BA2, + 68A2E2734776C4DE8A825586, + AAF51881FD011E68ACB8943F, + 7C0402A58CCCFFEB565C4541 ); name = interprocess; sourceTree = ""; }; + 88E2AF605A6092BE1833FBF9 = { isa = PBXGroup; children = ( + 744B5258A0FFFDCF19A54AEB, + 112E90B364B219E327AC6744, + EFD3FAE8559912283841BA5C, + 13EEA29E63CB7D6A92A16718, + 30C1C3A9B61EBDB050A24DC0, + 2F7919F052C66E372AD4E43A, + 05D10EB3543D6C58038DAE27, + 88DD545C3708EA053CC37143 ); name = native; sourceTree = ""; }; + 342B5B960D0D983FD0104EFD = { isa = PBXGroup; children = ( + 7CED74197096F4A912C5DC20, + FE546CAE7BB75B8A3CC7F052, + D9C6422FE18597D600C947DA, + 832E186326AA90B60FF5E851, + 88E2AF605A6092BE1833FBF9, + D976DDDC094914CFB0DDB0D4, + 0ADBA2DC820C98A2EBD7CE89, + 5B1C1F8C1BE263ACE8834BC5 ); name = "juce_events"; sourceTree = ""; }; + FC9ED00C0FB71A35143308F7 = { isa = PBXGroup; children = ( + B146AB40CE10C715C2EC1CD7, + 1F423E589D4B0BB76A086125, + A5909BAF8AD224B75AAF832F, + 669F622144F9612F1A5AFF31, + 4510427BA649EFEE4020AC0D, + F994149CF2F743560B199CC6, + E59EDC1944B2A88AACA0E57F, + A0F1F5E7EC8FC26D8076F4F2, + C2ABBA86A4F7A1FDFF267195 ); name = colour; sourceTree = ""; }; + 4E562EDFEAF8F470BC82EE5A = { isa = PBXGroup; children = ( + F21C5CBA4AB741C65BD122C5, + B941BF34AE348544404B5FC4, + D69059009E0F2614B0BD0CD7, + DF07FBC000811994AA3CD5FC, + B77B5907A22CBDCC463F5E96, + 442FA257104DC3F43E7F8704, + 6802FA47C62CF8B4E1063DF5 ); name = contexts; sourceTree = ""; }; + BEDDA92CAE047F30EC0ECE54 = { isa = PBXGroup; children = ( + C7C218D14A5CA2FA12D7DACA, + 95D9F4F9FE207892A3218D2C, + 298B8EAB69489A2DD387EC7A, + B475F7DB75B70B3E4B4B7F83, + 8AE5E337D4C522B372CB9C5D, + E017DDFB6CBF44D40D8D63A6, + 100C1E87FFDEA0DED983068A, + 16896A1A7CF8A50B6E02503B ); name = images; sourceTree = ""; }; + 095BAECCCDC9297FB7F39935 = { isa = PBXGroup; children = ( + FF717152F293D95B654348F1, + 66B5BC206A1109DCBC8AD25C, + 051CC362EB348D74A681E52D ); name = "image_formats"; sourceTree = ""; }; + 8745BAFFCE78810B02CA5B81 = { isa = PBXGroup; children = ( + AA06221F905DD9CDD98CDA40, + 657D3B23563BD718BFF02881, + 20BDFAA840CB090A6AFA0C63, + F846ACC304DB78E1B8E92D9B, + 6EF132703C5C44069FF9FCE0, + 094B44FEC862443EDD2F4D5C, + 380538B4E8B87874CB1E2975, + F932CF12ABDCB50B821C1E94, + 5CC8F641B148F0B65D9D2220, + 1F82B0E42456501E80B8C6D9, + A53709BC35F19FF0787F7105, + 240F3DAB2DA7C7E6C4A6A9F0, + 657B1AA91695ABE6F4E40A23, + 9F95B3B082ABC00D2857EB03, + 62D8DE7BA7A1571334C10AC7, + 8F58CBA320209889DCEB49B4 ); name = geometry; sourceTree = ""; }; + 399B57B82B4CC10C5059D6F0 = { isa = PBXGroup; children = ( + 1D6078A1730626B85E56E5FF, + CF10436FCFF5C17391E2AF07, + 7308F8E813127424CBEB5FC1, + 2407506C8B4DC680715E051D ); name = placement; sourceTree = ""; }; + 7701DD9BE19A731B40B774E8 = { isa = PBXGroup; children = ( + 4677E5AA94FC80D3B2430894, + B03252D790BC01DCBC7727C9, + E2EC7F9B7BDB075E9A5B89FA, + 400642196A02389CFAEDA0A2, + E6271F03E0FCB32C810C4189, + 0A351CA21CD21807D6873C60, + B219FEF532348FBB7829832E, + 03F05BAD26ABBE8053F8DD6C, + C82806192111971A84A5CA46, + 6EFBEA4EB76D3F8438AE6697 ); name = fonts; sourceTree = ""; }; + A6D54A86974C177D8C819C69 = { isa = PBXGroup; children = ( + 6D2B28B962FD48CFEF6F37AA, + 3F86551DA18AAE93A1196558, + EC0D02E6109E48884B1132F9, + AF58536809B334D6BEBF284F, + AAD97DE77FBDC50F2787F678 ); name = effects; sourceTree = ""; }; + B5588C016825482CC3F88B18 = { isa = PBXGroup; children = ( + 95BB5C0B983FDA99213833F9, + 79918BCE45FD23507F13C6FC, + 732B9277CF246D5EE48868E3, + 159CC6A366C134A2DBF8134B, + 5F928CEE3F97A4590645A784, + 2F130443849734034C34B8D6, + 646A649622FB23425FEDCB55, + 11C222CC0417AA247988BC24, + A559C3764549A0DC5E2AC18D ); name = native; sourceTree = ""; }; + 9B8A4B87D50BAD43262DA962 = { isa = PBXGroup; children = ( + FC9ED00C0FB71A35143308F7, + 4E562EDFEAF8F470BC82EE5A, + BEDDA92CAE047F30EC0ECE54, + 095BAECCCDC9297FB7F39935, + 8745BAFFCE78810B02CA5B81, + 399B57B82B4CC10C5059D6F0, + 7701DD9BE19A731B40B774E8, + A6D54A86974C177D8C819C69, + B5588C016825482CC3F88B18, + D0DCC2B10088DD6B0EC81157, + 277A95C2AB36DA19D38124D2, + E49968F84E838B786F246076 ); name = "juce_graphics"; sourceTree = ""; }; + 3C86C7A370F3E56B14009FEE = { isa = PBXGroup; children = ( + 96FFE580EE546FE29BEEE87E, + F0FF78D2DD36EE42677EB6E2, + 16967E71E1C12F2074AD8DF3, + CA5452636BD93706CD96F0E1, + 284EF5A78F59935B12B08B95, + 60CACD7A8922D6B4D2036C0C, + 59C09FB4F21CF4476E61F36D, + 98CE72894DB7F52232D78054 ); name = components; sourceTree = ""; }; + 20A566E6729201932AC0AF7D = { isa = PBXGroup; children = ( + C28067445CA8F9E235785AA7, + D6F9C4F0E726F7A0B8CD23F7, + EBC819613232A86FAEAA36EB, + 69378466815C5EB60E40217F, + D6F00701BFA022C4C898EC4D, + D89E8269E1FC5794373FFA76, + 41F1FE689C4021626F737AA0, + BF62476EFD47D2E105AEE1E3, + 58D2D99C11335CB88F390D13, + 8310AB938BDC75223EE734C0, + 51FFE2FDB93E1CEDD3ECC810, + 0219BD235B12AAD9042FE0E5, + 7B3F24B0900A66E917AF1EFD, + C789BA712A09E3154DF66253, + F0A8514366712140FBEBEDBC, + 1B799D210634A77F53B6A368, + 1C4B22AE2C14477DD9663A5B ); name = mouse; sourceTree = ""; }; + C6C2D8BC4C9791C022F71C5A = { isa = PBXGroup; children = ( + 1A751E2C05C9587B067F69EA, + 2132FA751C597AEB7B560903, + 2B56F40E8342461DDF302B67, + B15F6F2CF3CD34BB67CDF44D, + E988B5B3104F30B99C8D2E5E, + 481C19C473855385C2EC2389, + 44F6179C8619C71751063E77, + 2BDB8AE6165891B0ED608FFC, + 2E8D9A15339C5F5339103F52, + CA9A4D79FF6AFACAE237A344, + 6B4556A80A1525895316702E, + 795723E00AB0764CBBC65D10, + 98003C53B571D24566EB267A ); name = keyboard; sourceTree = ""; }; + 72EBC4079587DC358C5BE721 = { isa = PBXGroup; children = ( + 099C1712FC593A6E0BB4B28C, + A023AD1607D2D0D99036C0E2, + 5457C7A705065A8363D9E0C0, + EB926529FDA294A98D8077C7, + BBE804D364C521319729EB18, + C5D3F17A9CD6C8CD91A055D3, + 2FE92A23D647FD0FFF9E47B4, + 9A9E039E7B4043D607005FA0, + 5964153E211A83FDFDFE34C4, + 03D3818437E80468310C49BD, + 839C7874E5819621B7027553, + A6CF20D74B7E70191A3D9081, + 6940D8BCC7FA16AC023EFFEA, + 8ABC867202D83384B13EFD2B, + B6797D533A597C13A827B89C, + 10B968DE4389AB2A0DEF3F57, + 78EC26DDC59878469E187A5A, + 0547649D3D9EE7BF3A36917F, + F037113BD69BF0523B1AB24E, + FAFB29BBE8DA31C3A3559479, + 8EE7247F5EE9588903C92499, + 1E71E6751792D19E6C3FF37C, + ED8A4AD073DCAEFF79983F65, + 7FF78D3385E0FD93F12DC738, + 7E97DF5C22AF311AE5A290FB, + 9FAFA0168A0ACA1AED8C2EB1, + B44D14DE32B309C69863A442 ); name = widgets; sourceTree = ""; }; + 95054918FEB636F419E96536 = { isa = PBXGroup; children = ( + 86E4606F34CA44EB5CB8A480, + 2170C08480A1AD960C473600, + 565957A2DDB23656891C5B70, + 9EE78F2538DC6DD56FCE6A6D, + DBD67E2323D6CFA198394748, + 69E6FB2299276C9AD40898FB, + E6CE8E7BC42CC63D4302C08F, + C48A3FC7E41561241CFB3643, + CA3FFEC2B425B4F9A3513039, + 7F751D0147338B308E3DCC9D, + E28843A5AE4CB027292E720B, + B07C9FB7884928BF0D6140AF, + 9414728F8B97B25A7C150AC7, + 90CB9E95E1C54BE3CDAB3442, + 7C0E219AC200231511BD5EEA, + D2832CFA99C2A6ABBBAF0764, + A4AEAAB3AA060C6D0F446C43, + BEB72C3038F4A7A921A2FB88, + 8CE8035D73777C827F358367 ); name = windows; sourceTree = ""; }; + A5A9CFCA7B2BD30B918E0933 = { isa = PBXGroup; children = ( + 41739DBFE9C2A5FFC14334BC, + ED10D196BE1A20F944E25516, + 0430ADC9EB5D6071D885F684, + 65D358EECF8405AC742FF719, + C2B583BEF3CE04700388ECAB, + 41A67CC51223ACB7177017D4 ); name = menus; sourceTree = ""; }; + 3F0A163C30A5301DE2E578A9 = { isa = PBXGroup; children = ( + EC0042455C8905DFE144285B, + 729810A3ACC467E087BF2937, + 4349E989681FD9C62DD8898D, + 4D0EDEF7C4E7D3F5AFD80200, + B6370ED749A56D0F68B3BC90, + 5F89A8C2E6840FC5E13867F9, + 77C8F572316FC66E5F21288F, + 7E0FDC6DD6CAF77B04D65A28, + 895CAC3134C74903AD2BF6C8, + 01A265D800F245A5C48AAF5D, + 0BD3D84ECC55BE83F4ADD400, + 6C62671871CA15660E90983D, + 69CA3715AF178F71B1514ED7, + 868D73EF1FB52E0955972B5F, + FE030A4D48F11EC5C216C104, + D025925F2A1EDC834CB261C1, + 9FA7BAC94F86A562C4A5E7AA, + 469280541240D93C3764A55A, + 957EA26B61D904114B0EF8CF, + F78F7D3EEABEC384CF520A78, + C4D1648F0AB8F0755E51FD28, + 51BDA9647E0AA33F642E162B, + 5329D526F0847E8C516DE341, + BDB6A4EE698EFDB5345DFCA7, + B74AF55ABFC7B67596D1E4C5, + E83030546DC0009E4252780E, + 3F05FC92A5F8C9F543C18E7D, + FCA6172996770FCB415DE7B3, + 9DA88D6EA546060B595E68C9, + 084D469F7E8767E95659E3A1, + 17D4051063C1BF66548C6E65, + 9D85CE88913B2720836FDDC5 ); name = layout; sourceTree = ""; }; + 362B9CA182F07EDEA6857738 = { isa = PBXGroup; children = ( + F2531D31FE37573705EDD154, + A819D7764BF048296E41E624, + 61093648CFEEF41F99099748, + 743DDF1CA79AC8D40521FFA6, + D74E816672C1F099D1C3EF00, + 2750F5BC4F6AB396D4FF9D42, + E5F61EA21DC99F35ABEC13F5, + 4E75964C5E90FFF39D68DC02, + 4C9812ABC497516808CDBDA9, + CDEF43739EA660FF6953A8D8, + 88F6BA4ECA1D71B144041902, + 4911D011DC01E84EA8D2E168, + CB067C41D86C2CA578F0EACF, + B18EFF38A0A6B20F3717C724, + 6A46DE505460FFC49DC6401A, + A94EEEBFCC3DAD0287775479, + A57C0AA9B00AC6A6AD98AE62, + 5FD23507F13C6FC0B13FA754 ); name = buttons; sourceTree = ""; }; + 3E4E95F1170B2EFA8B2446EA = { isa = PBXGroup; children = ( + 387D2DB8E2B91A9404B4406E, + 049869B629403853AA619C94, + A2C5067D34A407FC361D9EFC, + 5A12659801A601ADF71301E7, + 120AD1D89E961ACD9F8ECA93, + 86BBEE6309E58E0BDEE8846C, + 28B7B4B8C3EB900389BF3667, + B86ED92661F75CF690D6415D, + 16BC7AA0CC3055C5383592E3, + 8B87A7265B6390E877FE05EF, + 9C8EEADCFBDC3524E3B23C04, + EA6AC29CACE626B78BBA0812, + C4665D00CF1123246BA1B9C1, + 79595701D7BC4109C8F65306 ); name = positioning; sourceTree = ""; }; + A99E67CE386F044BCEBBD9D9 = { isa = PBXGroup; children = ( + 2FD8653CD059413AFF3ADBA9, + 75C4766D40F4775B12DAEE02, + 93C785C3FFE4651B0E8187C8, + 0B83D0BA7105B28B1C6745B4, + DCA4AC991303E1E9B2862AC6, + B6DB9662AE30F031DA23000C, + 29FC38D6B0075FBB35237B0A, + 83F8C99659C763CB8B0E7980, + FC8BD4E84E1857C087A0C1C5, + 44C0A4D4685F5B43B4E3CEE4, + A33DB1CE9D93DC7E42FEAF64, + FF3A79B8CCB0C1FBC8BC4BC3, + 7CDD1B3B7B3F006928029048, + E902D5CB2D21A833FBD3970A, + 855802C8A821D4E040AE6122 ); name = drawables; sourceTree = ""; }; + 0E66D400A2AEC1B4767444E0 = { isa = PBXGroup; children = ( + 535A59B825BB2B64CFD7282A, + 94F79926677EDF45DAFC2D04, + A4D043D2D45A1AC91F042834, + 91AFD4F8512ECD48ED3D794E, + C50C8C44270BB4AA6E29AF60, + 4F69E2661F230F1DC18326CE, + 5C0F2C640FFC26E024196A26, + 1B86831A0BADCFE5CB96E938, + 68D86B6027443DD81449A9DD, + 0D6F8948F05CD532A07BBD87, + 60DBD431DA4D7378E7AB80CC, + 56767DB590F28F22A31B627E, + DC600323CDEE5B9048D06441, + AC94F86A562C4A5E7AA10477 ); name = properties; sourceTree = ""; }; + 58672107D0A731A676905F1F = { isa = PBXGroup; children = ( + A61FC816739332FA82460758, + 80627602CAE05EA69FD9596F ); name = lookandfeel; sourceTree = ""; }; + 42EB9AC18DFD5B60E168FEE8 = { isa = PBXGroup; children = ( + 677B27D84C90429BA13D42AD, + FBF0201D400CD6C6782B10C8, + 3748ACB7C1A3C7E3BDF9FE18, + C3EA83DACAD16407572FC7CC, + 8D04265467911BDA7CE473EE, + 53633A0D3DAC9248BBB83763, + 8ACDB3EBE51C3DC2083F24FE, + 85FB0DEA91225314395C3832, + 19A2ACA1955FFFB0761B3AAF, + 354C9AA1B5E53788110AB9D0, + AA6A808584C2C8F5DFC040C0, + FDC59BB60A9D8C68FC981BDF, + B7F4076432C31906CDC9EC20, + 5EAF841CE7825C1E452DF78E, + 8BA3297D6C0A44914EA7F638, + 1834349CEBAD352AE3EEB3B3, + 2CB18445E55D24E0821DEC13, + F38AE0F8B337DDCCC4C28760, + 3A3E1CB8A2EA4F41559B4F71, + 613C2EC1650BAF979DBD37CD, + 747C962B0AE2FB8F96222CA3, + 6195402FDADD8F9FCEEB2EEC, + 7E95E0F2BFF5E08537D66883, + 027FCB4AFC7C70265D75309E, + C9975C885F6DB235D5AE7AAB, + 2C8740A874EDE51D34492504 ); name = filebrowser; sourceTree = ""; }; + 596B6D46F8B9484967D911C2 = { isa = PBXGroup; children = ( + 3AC4F227C2DD3BAC7BAFA271, + 10DBDC65E17EABF8E02F2141, + EAB98449D81929523C747F36, + 2AFFF18A72735B11FDF0A75C, + 988C3C06A0BEF3E60BC4AE85, + 70717794FE65B463B2BDF094, + E910F8C77AEA9B816D5833A2, + 26C4C985EAA8ECAC4DECAA75, + D80561A68AC26CEF5B3DFBAF ); name = commands; sourceTree = ""; }; + 048EA6F4B2F31BE402E05D67 = { isa = PBXGroup; children = ( + 175A456E11A7C3BC16FBC7A1, + 68484F3A40049FB9E16A2A31, + DB7C2B8CE82F1B0844B70AB1, + 71F7B0155C04F1D2E0DE02C5 ); name = misc; sourceTree = ""; }; + 8DDC1EB6D9CEBBCC9F1C257E = { isa = PBXGroup; children = ( + 8B1C8C9C1D0904888319960C, + 48CBBB4DDAC29D2EC1C867D0, + B9041078631BE2BD7ADDEA2F ); name = application; sourceTree = ""; }; + 2950130C4269B6E3B31CD934 = { isa = PBXGroup; children = ( + 7F7541ED871BCA1AA769BC5F, + 68FACAECB07570A706455F4C, + 850C150C1C6D87A0D21AEE22, + 176A00E6ECBC817337D34347, + A9E251F3C9C06A834CA52703, + 88B2266157A118BB2058CC47, + C8EA46C100F30023F74CB109, + D9F58B09F67E00AF09B4A71D, + 9DE0D6638C8FCE03CECD5D91, + 9F54E6F57479AC981EE7ED25, + A703B34F1CF6059C8158A6E7, + 38D13C9B66F896C47C5CE095, + F42CEC2AE2C6607C90646295, + 47EFF1501F07AF7C3D422090, + 7B43D084FF9FFF82F7444058 ); name = native; sourceTree = ""; }; + F86C104F5500F5850500756C = { isa = PBXGroup; children = ( + 3C86C7A370F3E56B14009FEE, + 20A566E6729201932AC0AF7D, + C6C2D8BC4C9791C022F71C5A, + 72EBC4079587DC358C5BE721, + 95054918FEB636F419E96536, + A5A9CFCA7B2BD30B918E0933, + 3F0A163C30A5301DE2E578A9, + 362B9CA182F07EDEA6857738, + 3E4E95F1170B2EFA8B2446EA, + A99E67CE386F044BCEBBD9D9, + 0E66D400A2AEC1B4767444E0, + 58672107D0A731A676905F1F, + 42EB9AC18DFD5B60E168FEE8, + 596B6D46F8B9484967D911C2, + 048EA6F4B2F31BE402E05D67, + 8DDC1EB6D9CEBBCC9F1C257E, + 2950130C4269B6E3B31CD934, + 44A7304EFE6B6B7E41C7B755, + 62A97968E3CA0CFA6513CBD6, + 0C0909FABA4FB71CCB4A0EC2 ); name = "juce_gui_basics"; sourceTree = ""; }; + 5C78DC2C40224CBDE2613334 = { isa = PBXGroup; children = ( + BFC76B471FBB15B7A05D54AE, + 6A215681F313E53CC2AEB7B9, + 0B89D767CCDBEACAA36F4F1E, + E8ED4B8C4BE3BF166D533D36, + 1991295C722B46843C92219C, + FF32B4CC628640C940F85F48, + C06A2552AB1D50FA96D307AB, + A6109CB2517057F7FE84E332, + 342B5B960D0D983FD0104EFD, + 9B8A4B87D50BAD43262DA962, + F86C104F5500F5850500756C ); name = "Juce Modules"; sourceTree = ""; }; + 17A9711DC035377B969B90C2 = { isa = PBXGroup; children = ( + BA712F15F8C80BF55297EA44, + BC5E2A691B0A52816EA5C7DB, + 257FA3A7290842556A7377A4, + 8223723B38EF54A3B8644621, + A272B6DB3C84B9D91BF0F060, + E0586393177D674A237103E5, + 17ABF2F862D57C89FE85C307, + C5139AB9C4FB8AAD09B8CD9A, + 6C9B2F471F11EC467FDB06D0, + 55D565AF7527BA71D7ADC2D4, + DDD465BD14877C159A3217E8, + 6381E6023EA29B5BC90F0F11, + 79725AF8A4315CF7AEB0A650, + 6EC9B05A43174FFF25BA3382, + 6EEDB768C0235390844832E6, + F17E1C506A2CB31650AC64A1, + A7453366F39F172187B8469B, + 8E41015AF77D494DDAB5546F, + 71A86FA30C6E11992FD52782, + 09365764C5E388C17571B74B, + F7A8C106BF631AFADA24F8EE, + 3F222693EE8A706D9E66140F, + 8C28A1A8AF5FFC61D88246A9, + D2EF4DF7FF52621B8EBC3C20, + 4BA3B7415620D5A6A3DD6076, + 58CAFB52D888AF57B1A82540, + 3392EEAEB79019283AD94C41, + A9C716DF2B9CC6D95877A448, + 05B55564FFFBBBC713829291, + B50242715BF944E7711A5939, + F2595F2DC0235F848F9474E8, + D2FF01F8AC92CBFB1A4AEC2B, + 38E2002644D5BBC2E88ACB70, + 248B812009870EC9531D3269, + 6C254919C15224D13FE6D174, + AEDBCF2FF9E1FBD5B9958FB4, + 70DC3C63DDDFB1C5A22A8C36, + 616DF8861CA45D7FFE92CA35, + 52F3077A4F38B60682CD77B0, + E9F52DE288413A752B295F84, + 943EC8C2885DA0982C1E995E, + 35B676123569917443C05786, + 653554C5848EC85ACF6761CB, + 3008852179AEC3110ABEFC5F, + B6B85F3F336EDA568CB53327, + 206D40BEDB308864DE8DAA57, + 51DAC3E29FE8A76EF638C26E, + 952543A03965AE64D2F7EF37, + 634B4CFC4268E257C63FA337, + 0388AC868C8BBB6E2FDBAAA3 ); name = "Juce AU Wrapper"; sourceTree = ""; }; + C3E8F897FB646B0E8E7FC67C = { isa = PBXGroup; children = ( + 17A9711DC035377B969B90C2, + 55F13334336342B374FA505C, + 4114359B1712473DCEE14775, + 649205DDB11401C68ABB11D0, + C22CCBC890FB0D1B124829BC, + 181F4180131856CB6BAB1DF7, + 11608576C57E3A204A6C906E, + C39B8328C67764BE9969854D, + 4BF59333DA57E2C24F0A0E1E, + 22C891D6B6A32972880FF86F, + 1C934CED6F7B4BA69116BDDC, + B3ABDEB35F903778A009493E, + 7D309CB3240B35D414815F70, + 5EBBFDAE5869767E50249CC1, + 1B123CF00E6D0EDFCA6FC5B0, + 2F13C1272F4ACC4CA3DA8F00, + 2204575E31367AA99D353850, + B6C7C7A200B428CFD162EDEF, + 39A4D878431E9330AA38CB3D, + 469F59300FE180A8366F1E23, + 0C31117E7AB2D703ABB393F9, + 1C7D0AE1352D6713D906C4AB ); name = "Juce Library Code"; sourceTree = ""; }; + 7756687B5FD0903C5F83BB9E = { isa = PBXGroup; children = ( + 81567EBA449466A95492511B ); name = Resources; sourceTree = ""; }; + 9B041E4036493224CFD075FF = { isa = PBXGroup; children = ( + E226D5DEE103B1E298BD6E3E, + DBC6733A66786D64D63E7016, + D036C01DC0E376205ABAA0CE, + 91F0411829B13595887CE52A, + 41FDE3A9AC13B3D1F230088E, + 2307ABAB0264959E640E9E37, + 88C8229131104E50F4F0D137, + 423550EB3CF502541882C50E, + A2A2E49121DBB7C395E2420A, + FBA2E307398FFC8A2693C933, + B4F88060202011416CB3278B, + B050085463EEB5F8367314CB, + 678CC9E413A7CF979964CEF7, + 01A30B0A0B9B5064D9B75474 ); name = Frameworks; sourceTree = ""; }; + A60AEBCC9579AD6BA9D5CA4B = { isa = PBXGroup; children = ( + AF721FB8136D2CAA9404AD8D ); name = Products; sourceTree = ""; }; + 9DC33026DCB453C5B40EA9B3 = { isa = PBXGroup; children = ( + E1C5E3C67B4A2621AD2D3E05, + 5C78DC2C40224CBDE2613334, + C3E8F897FB646B0E8E7FC67C, + 7756687B5FD0903C5F83BB9E, + 9B041E4036493224CFD075FF, + A60AEBCC9579AD6BA9D5CA4B ); name = Source; sourceTree = ""; }; + 6B24C2D519EB1D09B3C748EC = { isa = XCBuildConfiguration; buildSettings = { + PREBINDING = NO; + HEADER_SEARCH_PATHS = "~/SDKs/vstsdk2.4 $(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility $(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility $(inherited)"; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; + LIBRARY_STYLE = Bundle; + WRAPPER_EXTENSION = component; + GENERATE_PKGINFO_FILE = YES; + OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\""; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + OTHER_LDFLAGS = "-bundle"; + ONLY_ACTIVE_ARCH = YES; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_DEBUG=1", + "DEBUG=1", + "JUCE_ObjCExtraSuffix=JuceDemo", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; + F4B05B483343A2F3C923C6B4 = { isa = XCBuildConfiguration; buildSettings = { + PREBINDING = NO; + HEADER_SEARCH_PATHS = "~/SDKs/vstsdk2.4 $(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility $(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility $(inherited)"; + GCC_OPTIMIZATION_LEVEL = s; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; + LIBRARY_STYLE = Bundle; + WRAPPER_EXTENSION = component; + GENERATE_PKGINFO_FILE = YES; + OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\""; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + OTHER_LDFLAGS = "-bundle"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_NDEBUG=1", + "NDEBUG=1", + "JUCE_ObjCExtraSuffix=JuceDemo", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; + F6631902F8DE12E2C2C34B71 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "JuceDemoPlugin"; }; name = Debug; }; + D9F9CC7EC1952477F7915D84 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "JuceDemoPlugin"; }; name = Release; }; + 91EB753864A948DE4421285E = { isa = XCConfigurationList; buildConfigurations = ( + F6631902F8DE12E2C2C34B71, + D9F9CC7EC1952477F7915D84 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 392E8263441DF125E3215D42 = { isa = XCConfigurationList; buildConfigurations = ( + 6B24C2D519EB1D09B3C748EC, + F4B05B483343A2F3C923C6B4 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 145D936BBD5425D74172B206 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + A79C4026C596A99BB0ADC224 = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( + 3AED4AC6E9B4B0C2B0BEC239, + B39DC014D05F2235B9F6967F ); runOnlyForDeploymentPostprocessing = 0; }; + F0F39FCA8C402F34BB74F6B3 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5AF66C048A4815F5A8ECDDCD, + 209FB8C7F7BE85A70E5D98D7, + AEF69B599D0CEC30C1BC8C0C, + EE224227E577BA498E98DC9A, + 07EDB68D178C5C7635F58468, + B24CA5BEF488268AB502C0AC, + A7805EAF6FC58E9A857D98EA, + F0BEF1392277DBDC409A06A3, + 8B45F20F3F352BB3B35F6EB7, + 4BB4B93E0E58FC0D5FE82292, + 3FA5946913264BF87C308F89, + CE625DD4D4B118F4718F2DCC, + 60FEDB4F5859871946389F21, + F9290B46763F4865ED3C362D, + BAF7CD5DAFBAB29BEF0DCAE3, + F51222976BFE5611E7FC656F, + 3723101DD64447FE9A530323, + B7D2D2868983939B35532885, + EBBDC594F4DF0EF42E017C64, + 81795588AD3A427D43E3165C, + 421AB531BFA2C9EB93522748, + E5299A6C25F9C4AE26DABAC0, + 84D075FA78547C8D3AC4EA1A, + A2718BCD8261456359155ABE, + 0AF0468337861CE9E40C5DA1, + 2B02FDAF33120D858A83EF7E, + D4AAEE16015B5D8A5620E43B, + E585877D4B824035E1CAFFCA, + FB804F5BADD4EB73538309D9, + EB66DD2B9BD0523BA24F71BE, + 9CC0D5168A7DCB579BDC31CA, + 5D19FF0100CA4CF6F06C207C, + 261BC7A0D5A015FE1B07C73E, + 07F38E0F0E1C7C120FFF487B, + E972DF46C7EB779D1A5E3B71, + 7DCC8920B429926D40DA04FE, + CB8EA22B7429B51D81082154, + 0A40CB163419D8DEB3253DCA, + E2DD4A04EE7CF8CF6EDBBEF4, + BB4C58E7FB7D7CBAFFD6953B, + 2A732ACEDCD2474751785A8D ); runOnlyForDeploymentPostprocessing = 0; }; + 9519B014653C694C3456E5A4 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + AC674433358C3691C8AC20AF, + 5B83F34400A1B5844680E1CE, + 449473E31270237B0FFEBE72, + 0860A8808F16C84CE7641D04, + EF358E6194DB7EE60A1CE13D, + E504A4E425435E78197183F3, + 53E2C1531CB485CCDD230774, + B9C31FD116F29E7E4752EB90, + AFB1D55C5DA4C99D90DF3A6A, + 370C0F92C3CC1B6C563A7A94, + 205AA28314AC784F2CF1FA98, + 68746D242F6A6102FDD5D03D, + CBE9E6042991B0677E3136D2, + 73B8F48633153DA5A10873E8 ); runOnlyForDeploymentPostprocessing = 0; }; + 06539322921079C10A447670 = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; name = "Copy to the different plugin folders"; shellPath = /bin/sh; shellScript = "\n# This script takes the build product and copies it to the AU, VST, and RTAS folders, depending on \n# which plugin types you've built\n\noriginal=$CONFIGURATION_BUILD_DIR/$FULL_PRODUCT_NAME\n\n# this looks inside the binary to detect which platforms are needed.. \ncopyAU=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'AudioUnit' | wc -l`\ncopyVST=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'VSTPlugin' | wc -l`\ncopyRTAS=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'CProcess' | wc -l`\n\nif [ $copyAU -gt 0 ]; then\n echo \"Copying to AudioUnit folder...\"\n AU=~/Library/Audio/Plug-Ins/Components/$PRODUCT_NAME.component\n if [ -d \"$AU\" ]; then \n rm -r \"$AU\"\n fi\n\n cp -r \"$original\" \"$AU\"\n sed -i \"\" -e 's/TDMwPTul/BNDLPTul/g' \"$AU/Contents/PkgInfo\"\n sed -i \"\" -e 's/TDMw/BNDL/g' \"$AU/Contents/$INFOPLIST_FILE\"\nfi\n\nif [ $copyVST -gt 0 ]; then\n echo \"Copying to VST folder...\"\n VST=~/Library/Audio/Plug-Ins/VST/$PRODUCT_NAME.vst\n if [ -d \"$VST\" ]; then \n rm -r \"$VST\"\n fi\n\n cp -r \"$original\" \"$VST\"\n sed -i \"\" -e 's/TDMwPTul/BNDLPTul/g' \"$VST/Contents/PkgInfo\"\n sed -i \"\" -e 's/TDMw/BNDL/g' \"$VST/Contents/$INFOPLIST_FILE\"\nfi\n\nif [ $copyRTAS -gt 0 ]; then\n echo \"Copying to RTAS folder...\"\n RTAS=/Library/Application\\ Support/Digidesign/Plug-Ins/$PRODUCT_NAME.dpm\n if [ -d \"$RTAS\" ]; then\n rm -r \"$RTAS\"\n fi\n\n cp -r \"$original\" \"$RTAS\"\nfi\n"; }; + 792509270ABF8E6A65E16172 = { isa = PBXNativeTarget; buildConfigurationList = 392E8263441DF125E3215D42; buildPhases = ( + 145D936BBD5425D74172B206, + A79C4026C596A99BB0ADC224, + F0F39FCA8C402F34BB74F6B3, + 9519B014653C694C3456E5A4, + 06539322921079C10A447670 ); buildRules = ( ); dependencies = ( ); name = JuceDemoPlugin; productName = JuceDemoPlugin; productReference = AF721FB8136D2CAA9404AD8D; productInstallPath = "$(HOME)/Library/Audio/Plug-Ins/Components/"; productType = "com.apple.product-type.bundle"; }; + 64CEAC70FBD5AC5BD1D686C9 = { isa = PBXProject; buildConfigurationList = 91EB753864A948DE4421285E; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = 9DC33026DCB453C5B40EA9B3; projectDirPath = ""; projectRoot = ""; targets = ( 792509270ABF8E6A65E16172 ); }; + }; + rootObject = 64CEAC70FBD5AC5BD1D686C9; +} diff --git a/extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.sln b/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.sln similarity index 100% rename from extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.sln rename to extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.sln diff --git a/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj b/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj new file mode 100644 index 0000000000..e7f95ca64b --- /dev/null +++ b/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj @@ -0,0 +1,4092 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.sln b/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.sln similarity index 100% rename from extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.sln rename to extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.sln diff --git a/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj b/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj new file mode 100644 index 0000000000..cf0133da70 --- /dev/null +++ b/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj @@ -0,0 +1,4092 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/audio plugins/How to use this framework.txt b/extras/audio plugin demo/How to use this framework.txt similarity index 100% rename from extras/audio plugins/How to use this framework.txt rename to extras/audio plugin demo/How to use this framework.txt diff --git a/extras/audio plugins/demo/JuceDemoPlugin.jucer b/extras/audio plugin demo/JuceDemoPlugin.jucer similarity index 58% rename from extras/audio plugins/demo/JuceDemoPlugin.jucer rename to extras/audio plugin demo/JuceDemoPlugin.jucer index 4a982d0ab5..6aa50f38a8 100644 --- a/extras/audio plugins/demo/JuceDemoPlugin.jucer +++ b/extras/audio plugin demo/JuceDemoPlugin.jucer @@ -11,18 +11,19 @@ bundleIdentifier="com.rawmaterialsoftware.JuceDemoPlugin" jucerVersion="3.0.0"> + juceFolder="../.." objCExtraSuffix="JuceDemo"/> + rtasFolder="c:\SDKs\PT_80_SDK" juceFolder="../.." libraryType="1"/> - + rtasFolder="c:\SDKs\PT_80_SDK" juceFolder="../.." libraryType="1"/> + + osxSDK="default" osxCompatibility="default" osxArchitecture="default"/> + osxSDK="default" osxCompatibility="default" osxArchitecture="default"/> - + + + + + + + + + + + + + + + + + diff --git a/extras/audio plugin demo/JuceLibraryCode/AppConfig.h b/extras/audio plugin demo/JuceLibraryCode/AppConfig.h new file mode 100644 index 0000000000..96d1706ce7 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/AppConfig.h @@ -0,0 +1,91 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! + + Any commented-out settings will assume their default values. + +*/ + +//============================================================================== +// juce_audio_devices flags: + +//#define JUCE_ASIO +//#define JUCE_WASAPI +//#define JUCE_DIRECTSOUND +//#define JUCE_ALSA +//#define JUCE_JACK +//#define JUCE_USE_CDREADER +//#define JUCE_USE_CDBURNER + +//============================================================================== +// juce_audio_formats flags: + +//#define JUCE_USE_FLAC +//#define JUCE_USE_OGGVORBIS + +//============================================================================== +// juce_audio_processors flags: + +#define JUCE_PLUGINHOST_VST 0 +#define JUCE_PLUGINHOST_AU 0 + +//============================================================================== +// juce_core flags: + +//#define JUCE_FORCE_DEBUG +//#define JUCE_LOG_ASSERTIONS +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +//#define JUCE_USE_COREIMAGE_LOADER + +//============================================================================== +// juce_gui_basics flags: + +//#define JUCE_ENABLE_REPAINT_DEBUGGING +//#define JUCE_USE_XSHM +//#define JUCE_USE_XRENDER +//#define JUCE_USE_XCURSOR + +//============================================================================== +// Audio plugin settings.. + +#define JucePlugin_Build_VST 1 +#define JucePlugin_Build_AU 1 +#define JucePlugin_Build_RTAS 0 + +#define JucePlugin_Name "Juce Demo Plugin" +#define JucePlugin_Desc "Juce Demo Plugin" +#define JucePlugin_Manufacturer "Raw Material Software" +#define JucePlugin_ManufacturerCode 'RawM' +#define JucePlugin_PluginCode 'Jcdm' +#define JucePlugin_MaxNumInputChannels 2 +#define JucePlugin_MaxNumOutputChannels 2 +#define JucePlugin_PreferredChannelConfigurations {1, 1}, {2, 2} +#define JucePlugin_IsSynth 0 +#define JucePlugin_WantsMidiInput 1 +#define JucePlugin_ProducesMidiOutput 1 +#define JucePlugin_SilenceInProducesSilenceOut 0 +#define JucePlugin_TailLengthSeconds 0 +#define JucePlugin_EditorRequiresKeyboardFocus 1 +#define JucePlugin_VersionCode 0x10000 +#define JucePlugin_VersionString "1.0.0" +#define JucePlugin_VSTUniqueID JucePlugin_PluginCode +#define JucePlugin_VSTCategory kPlugCategEffect +#define JucePlugin_AUMainType kAudioUnitType_Effect +#define JucePlugin_AUSubType JucePlugin_PluginCode +#define JucePlugin_AUExportPrefix JuceDemoProjectAU +#define JucePlugin_AUExportPrefixQuoted "JuceDemoProjectAU" +#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode +#define JucePlugin_CFBundleIdentifier com.rawmaterialsoftware.JuceDemoPlugin +#define JucePlugin_AUCocoaViewClassName JuceDemoProjectAU_V1 +#define JucePlugin_RTASCategory ePlugInCategory_None +#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode +#define JucePlugin_RTASProductId JucePlugin_PluginCode diff --git a/extras/audio plugin demo/JuceLibraryCode/JuceHeader.h b/extras/audio plugin demo/JuceLibraryCode/JuceHeader.h new file mode 100644 index 0000000000..0b0f605326 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/JuceHeader.h @@ -0,0 +1,42 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This is the header file that your files should include in order to get all the + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration + options for your app. + +*/ + +#ifndef __APPHEADERFILE_0NRD9LLGO__ +#define __APPHEADERFILE_0NRD9LLGO__ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.h" +#include "../../../modules/juce_audio_plugin_client/juce_audio_plugin_client.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif + +namespace ProjectInfo +{ + const char* const projectName = "JuceDemoPlugin"; + const char* const versionString = "1.0.0"; + const int versionNumber = 0x10000; +} + +#endif // __APPHEADERFILE_0NRD9LLGO__ diff --git a/extras/audio plugin demo/JuceLibraryCode/ReadMe.txt b/extras/audio plugin demo/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_AU_Wrapper_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_AU_Wrapper_wrapper.mm new file mode 100644 index 0000000000..3ed47c0391 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_AU_Wrapper_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.cpp new file mode 100644 index 0000000000..d7d43b755c --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.mm new file mode 100644 index 0000000000..d7d43b755c --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode1_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.cpp new file mode 100644 index 0000000000..041de8d47e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode2.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.mm new file mode 100644 index 0000000000..041de8d47e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode2_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode2.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.cpp new file mode 100644 index 0000000000..d9c4646e9d --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.mm new file mode 100644 index 0000000000..d9c4646e9d --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_DigiCode3_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_MacUtilities_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_MacUtilities_wrapper.mm new file mode 100644 index 0000000000..bcfc0ca9f3 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_MacUtilities_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_WinUtilities_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_WinUtilities_wrapper.cpp new file mode 100644 index 0000000000..78e0a50d49 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_WinUtilities_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinUtilities.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.cpp new file mode 100644 index 0000000000..2c07ba94e2 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.mm new file mode 100644 index 0000000000..2c07ba94e2 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_RTAS_Wrapper_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.cpp new file mode 100644 index 0000000000..4c3270cb98 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.mm new file mode 100644 index 0000000000..0cb35c7b8f --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_VST_Wrapper_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.cpp new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.mm new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_devices_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.cpp new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.mm new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_formats_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.cpp new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.mm new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_processors_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.cpp new file mode 100644 index 0000000000..39d0c55c57 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.mm new file mode 100644 index 0000000000..39d0c55c57 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_audio_utils_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_utils/juce_audio_utils.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/audio plugin demo/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/audio plugins/demo/Source/PluginEditor.cpp b/extras/audio plugin demo/Source/PluginEditor.cpp similarity index 100% rename from extras/audio plugins/demo/Source/PluginEditor.cpp rename to extras/audio plugin demo/Source/PluginEditor.cpp diff --git a/extras/audio plugins/demo/Source/PluginEditor.h b/extras/audio plugin demo/Source/PluginEditor.h similarity index 93% rename from extras/audio plugins/demo/Source/PluginEditor.h rename to extras/audio plugin demo/Source/PluginEditor.h index ebaac3219f..a6efa2f59b 100644 --- a/extras/audio plugins/demo/Source/PluginEditor.h +++ b/extras/audio plugin demo/Source/PluginEditor.h @@ -12,7 +12,6 @@ #define __PLUGINEDITOR_H_4ACCBAA__ #include "../JuceLibraryCode/JuceHeader.h" -#include "../JuceLibraryCode/JucePluginCharacteristics.h" #include "PluginProcessor.h" diff --git a/extras/audio plugins/demo/Source/PluginProcessor.cpp b/extras/audio plugin demo/Source/PluginProcessor.cpp similarity index 100% rename from extras/audio plugins/demo/Source/PluginProcessor.cpp rename to extras/audio plugin demo/Source/PluginProcessor.cpp diff --git a/extras/audio plugins/demo/Source/PluginProcessor.h b/extras/audio plugin demo/Source/PluginProcessor.h similarity index 96% rename from extras/audio plugins/demo/Source/PluginProcessor.h rename to extras/audio plugin demo/Source/PluginProcessor.h index 46d7d6bb20..15c849bb8f 100644 --- a/extras/audio plugins/demo/Source/PluginProcessor.h +++ b/extras/audio plugin demo/Source/PluginProcessor.h @@ -12,7 +12,6 @@ #define __PLUGINPROCESSOR_H_526ED7A9__ #include "../JuceLibraryCode/JuceHeader.h" -#include "../JuceLibraryCode/JucePluginCharacteristics.h" //============================================================================== diff --git a/extras/audio plugin host/Builds/Linux/Makefile b/extras/audio plugin host/Builds/Linux/Makefile index b439ef9325..a88c8873be 100644 --- a/extras/audio plugin host/Builds/Linux/Makefile +++ b/extras/audio plugin host/Builds/Linux/Makefile @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! ifndef CONFIG CONFIG=Debug @@ -17,12 +17,12 @@ ifeq ($(CONFIG),Debug) LIBDIR := build OBJDIR := build/intermediate/Debug OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound LDDEPS := - RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" + RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" TARGET := Plugin\ Host BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) endif @@ -32,12 +32,12 @@ ifeq ($(CONFIG),Release) LIBDIR := build OBJDIR := build/intermediate/Release OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound LDDEPS := - RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" + RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" TARGET := Plugin\ Host BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) endif @@ -48,10 +48,19 @@ OBJECTS := \ $(OBJDIR)/HostStartup_5ce96f96.o \ $(OBJDIR)/InternalFilters_beb54bdf.o \ $(OBJDIR)/MainHostWindow_e920295a.o \ - $(OBJDIR)/JuceLibraryCode1_682c927f.o \ - $(OBJDIR)/JuceLibraryCode2_683aaa00.o \ - $(OBJDIR)/JuceLibraryCode3_6848c181.o \ - $(OBJDIR)/JuceLibraryCode4_6856d902.o \ + $(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o \ + $(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o \ + $(OBJDIR)/juce_audio_formats_wrapper_994a82de.o \ + $(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ + $(OBJDIR)/juce_cryptography_wrapper_8b556353.o \ + $(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o \ + $(OBJDIR)/juce_events_wrapper_a8dc8280.o \ + $(OBJDIR)/juce_graphics_wrapper_a0e77172.o \ + $(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o \ + $(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o \ + $(OBJDIR)/juce_opengl_wrapper_74bbb916.o \ + $(OBJDIR)/juce_video_wrapper_fcc67966.o \ .PHONY: clean @@ -93,24 +102,69 @@ $(OBJDIR)/MainHostWindow_e920295a.o: ../../Source/MainHostWindow.cpp @echo "Compiling MainHostWindow.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode1_682c927f.o: ../../JuceLibraryCode/JuceLibraryCode1.cpp +$(OBJDIR)/juce_audio_basics_wrapper_e4aa31f5.o: ../../JuceLibraryCode/juce_audio_basics_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode1.cpp" + @echo "Compiling juce_audio_basics_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode2_683aaa00.o: ../../JuceLibraryCode/JuceLibraryCode2.cpp +$(OBJDIR)/juce_audio_devices_wrapper_845aeedf.o: ../../JuceLibraryCode/juce_audio_devices_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode2.cpp" + @echo "Compiling juce_audio_devices_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode3_6848c181.o: ../../JuceLibraryCode/JuceLibraryCode3.cpp +$(OBJDIR)/juce_audio_formats_wrapper_994a82de.o: ../../JuceLibraryCode/juce_audio_formats_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode3.cpp" + @echo "Compiling juce_audio_formats_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode4_6856d902.o: ../../JuceLibraryCode/JuceLibraryCode4.cpp +$(OBJDIR)/juce_audio_processors_wrapper_a34d7091.o: ../../JuceLibraryCode/juce_audio_processors_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode4.cpp" + @echo "Compiling juce_audio_processors_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_core_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_cryptography_wrapper_8b556353.o: ../../JuceLibraryCode/juce_cryptography_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_cryptography_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o: ../../JuceLibraryCode/juce_data_structures_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_data_structures_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_wrapper_a8dc8280.o: ../../JuceLibraryCode/juce_events_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_wrapper_a0e77172.o: ../../JuceLibraryCode/juce_graphics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o: ../../JuceLibraryCode/juce_gui_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o: ../../JuceLibraryCode/juce_gui_extra_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_opengl_wrapper_74bbb916.o: ../../JuceLibraryCode/juce_opengl_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_opengl_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_video_wrapper_fcc67966.o: ../../JuceLibraryCode/juce_video_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_video_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj index 86237964ea..15ec6714ea 100644 --- a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj +++ b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj @@ -25,10 +25,19 @@ 6DADD6A4866E2583BD197095 = { isa = PBXBuildFile; fileRef = F2999E9EF2E02C240DEAA0C6; }; 938109D82261C12EF5CC7E4F = { isa = PBXBuildFile; fileRef = BA4959517392DBED76630DC2; }; 2244CCA11963FDB0EC21C056 = { isa = PBXBuildFile; fileRef = 218167B6F2BD95AC7FEC31D5; }; - 249BFEAFDA801A30A9FE28AC = { isa = PBXBuildFile; fileRef = BC9F16AE41ED85BFA2090081; }; - 30210E40B65CE048C4D36CA7 = { isa = PBXBuildFile; fileRef = 06C5EFA95DD808E386ED84D1; }; - 4CB81ED19217B750FEB8A0B2 = { isa = PBXBuildFile; fileRef = 4FECB7A56AC38B066AC01710; }; - 484E2E726ED27E58288DE4BD = { isa = PBXBuildFile; fileRef = 980380A077AFFE293EB49B50; }; + B6D2C7B8E4C65803F3B6DBF7 = { isa = PBXBuildFile; fileRef = 6E0C95E241AF58A99B7B2635; }; + 6F7AA830B10FA808CF53D0B4 = { isa = PBXBuildFile; fileRef = B4E00BAAC4CBA159D4DE0970; }; + 70654197FC359BC35AFDFB44 = { isa = PBXBuildFile; fileRef = BC305F9F762285BEC39F9DE7; }; + 966009645D8826F1CCB6F552 = { isa = PBXBuildFile; fileRef = 6E6B5C42862ABF4C019C71C7; }; + 38909F303A2016E503002E43 = { isa = PBXBuildFile; fileRef = BE986BF0765764F0F132F4E8; }; + 9E5F85BFBE32CE6FF99858EE = { isa = PBXBuildFile; fileRef = 67F58C67E6D1C9A54D03755F; }; + F8E9B92AB07D9774789F1DF5 = { isa = PBXBuildFile; fileRef = B86316062F2F86341A59A955; }; + C2EB81CA9554607B833AB3C7 = { isa = PBXBuildFile; fileRef = 5F8C98DD0F438205283C35B7; }; + A3C45828BFC0B7A0782234F4 = { isa = PBXBuildFile; fileRef = 180055DCD4BF80628DB44BF9; }; + 7442A960779EC22B838128FA = { isa = PBXBuildFile; fileRef = FA8BC7B8181DC10BD967884A; }; + 7C007B27FD93094A7153EA85 = { isa = PBXBuildFile; fileRef = 1EF2FA9E44B87C5CB88EDEE4; }; + 60C3231681423D099EE852B1 = { isa = PBXBuildFile; fileRef = 0BC3C3DC3DBCB02DB60DD879; }; + C2AFAFACC27AE22C266F8AEE = { isa = PBXBuildFile; fileRef = AE1CF40759633D5CDB35874F; }; 8D069FF891B70C7001E05AB7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 77964D54171CB8F24F616C9F = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; 7C069A377097C1BEC2EE9D47 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; @@ -54,12 +63,790 @@ AFF6B72723C927C80459D99A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalFilters.h; path = ../../Source/InternalFilters.h; sourceTree = "SOURCE_ROOT"; }; 218167B6F2BD95AC7FEC31D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/MainHostWindow.cpp; sourceTree = "SOURCE_ROOT"; }; B6A31D39CA31260F86D45CB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/MainHostWindow.h; sourceTree = "SOURCE_ROOT"; }; + 14BA316D7353F8A5644CF8B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E1B6A35BF3AFE5A060D1AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 3A128F93FC866F003C45109A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D81C4B3FD7DAF219DDA0291 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + C6D2A8A74ED1809732164DDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42A9534DE0E45923BA641C19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 03796FE14402988E1CDB3C79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A66F4631E3775641C9CEC72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + 7735A22837C0DFBA2B3E23BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + A207F2B7C3358D20EE3793B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + DA6283EF29019C12DDD69361 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC898F71CE8AFCA5A278B2A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + EE8EBCACB6792B92FF1C9B34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 220BBC3B032BD10BE248DE42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 40B6DDC682C6C585AAF118AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + 6D94F55F8E7DBEAFB238615C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 384F22CAD7A86E411B55E15D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 30EB3AC75D559495337C546F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + E9436471720AC0FBF946EA7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 6549A6BBFECB7CB2C449473E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9A9492E9EAC02EBC385BAE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 67B7C2823167674A73C63501 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CDD1CA6A340A731CC282169 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 96382DEE48488970AE2806CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4EBDCF7B6B7ADE9081354B8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 9F3F0AF657FED29B7C24DAAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 994B692F8ED911720120653C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + AD333B7A7B19523A45BB3706 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 7514EA550010539ACDA0E4E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + B214726BAF57DB1B92FCEED7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 3850EFAEDBDDC4D0C0640D24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E7BC9D0BDAFA0F2AFCAD2DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 6458A72B3700FB301E14C172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4430203BA4D96FCB4B679581 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 9835F74E7B1B6494C96EF7A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E6E61E5C82E350EE5E8052F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + 5D73E2AF3A68BA2318B16254 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + D6245E69A886D4710B19CE47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + EF6EAA0168F26CECDBB8B1FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66238D1331294CDFBAB01B7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 145E59CDEC537874E6ECBF32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + B13FC2229918D7B3E59F708F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A0B1CE4ED907C9C79C44AA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + 04AE6AF108623B066E3EDC1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + A49F375CE1748C03AAEBEC17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7E1F5C33DB4FD4181506BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 2A33500F8DE7ED6564597325 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E87E555DDA33E699BE5A3C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + 976F73F7605B88F5E547C32F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5041199B8CD735DD9A5D2483 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + C361D9EFCAE306222D2534C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72FCCE8528D3A79AC93F2E32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 87E885FCCAC3FEF50B985421 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + EE5637997D7FDC7A163B5657 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + C9C08551D162629B7C1E281B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + CF341A584E3CC5EB009FEFFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E8695B9918D657CC8ED9B7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + BF055531C2FB884B597A616D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF5BFD40B020A607F149987F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2083758047B08AA7CFDAB5D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F3CAF752926A9E8449A6880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + FCAD487FDC0D579D69E0B2BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + A664EE5ABF170BA8B21A0B34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + CBC031D622B02FDAF33120D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + A518663007363116E5CDEDBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + E730DD532F23B09B3A45C9DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 4221BB98A2878AAD4862A24E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58BC8A672806B6C5E0663734 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 404D28E7868B24AE524CC114 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + F9D12EB1087CCE9E7146F1EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30C70701A10B5BD55F607064 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4DC4AB90AE96573ACA931D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A14179D623D8720122C155A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44C7BF782CDB46AC9B0C87DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44BFDBB7B65C23643821D36E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2371B8F22493D7D278366C8 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 0A9858468FA0088EB00E6B78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + 42CEC4195577AE91AA6CBA7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF6C739DE169E97BA7D3D73A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB9B4E9DF6083E91786AB807 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + A75BF49CE4FBF99B5BA4C897 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04002D2AFC7A41615EF143FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 92F121ECB56D3DF2DB7DAEC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7938F4A54E089154A04FC01C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 45DE0571DC7C78DB94C2FF92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + DAAEFE8311029098BF8FB854 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + 4905E4FD9E66FE5D6DC95C07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7CC13CCB14848F9058D37AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + 438ADE4CCAEBFA134098B297 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 99E16D188100081C7D35FFFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + F7545098BDE9819979DF7DA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + C524DB8ED0588AD8C03B870C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 5B55564FFFBBBC7138292910 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 227CAA9248B431099FD5400B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 4BC43DEA997C1CC67B58CB08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 40C47D816D7B2FE1842CBDFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 0D2E2C02C24A567D370EC9A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4902CBFB31FC7D342C6362F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 8F906B84565A0F7035C211CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C42B3738F273B911A99B640 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 7C1E0EB82A7A914783CAA118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 939396D32CF265BB85732C97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 47ED51A07111C849EA313667 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E94A0E9F477805942E7D896 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + 4176A1F7BC3ABFA9BA2BDB22 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + E07B4A716014330D03B1C925 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + A938241109A6206F48E6AE2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_formats.cpp"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB1F9E1707244B9AF7D85899 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + 08155CE0BA69F8086018166E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; + 36A53FFAF2E56F399E16E73A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4432B51CBD011A665CDB432C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + C42EFCEE3FAD66DA1FB221C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9D679CB7482DA3CC27C3793 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 6737D69B6E8CF118C0250089 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6E59EF3CBD5CB1504FE19F78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + 37958BDD8568BCFBC0A30338 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; + 1EB6465C8CC6BB847B5FB72D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 88AD16FB044B1C65AE8D4564 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + B8803E2918FDE3AB073CC468 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35369E72DB7701E34D62A4E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; + 1A584358C99EDE9ED030EBF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31511BD5EEAF839B1CE0BBD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 585A8ACA21DBC5686CD1AB32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D26439D7459D745F5E72CA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + E443CF7E384DC5E4334FA834 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 7BBDA027E9452EE5F77C9170 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; + F077322D98F86C432A94F734 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 6AF3C3E06FC980EA62CEAB79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + DCDA232BCAC0C40BA717DCFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; + A78CCB8A397289D2944C3ABD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0168F26CECDBB8B1FF65EC6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + A0EB4872E7D5162A18A82C51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D5FC3DB290CD58A8FC67C5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + 3977FA9E915CA3D5CB7EE2E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3105AD340AF95432BA38C1B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; + 01144EC37613C889F6A6284C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 292F3FE42E03645CA4B0796F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7B4077B246F89E8AB3AAAE99 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4DB56EFB670D455AB683A054 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; + C4B57C87C0C1D483038DA343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18CA841ABDEA615E159A6503 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB6FF96FE571603F0292D0FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 93ABB48D4606B69205165FF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 80E8F800B3F333EC568C6A4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 201F092FE177F2FF11601F6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + E976C988F92187DB22DB7F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + DA626F98C109B6712F93128F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + C1448FFA408DA9080485D23D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + F321C81311A199DE0E3AC4A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB11C2893FD16DE89DCF3567 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 1000B1EDD124002EFD88672E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 2BC738E0BC1BED69E88EA879 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42F4807F4322C7B8A2051DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + FBFEB7505786A509E6A080C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5024AFC848DD0777992651CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 8513CE1543AF65C9C077BCFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4C93A34BE0987F180A53F60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 316C8B71A2DF689EDE36B3EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + C9FAEE9B45B0B766D5802218 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + DA3271F7DA88C9B1A5829E55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 766A3CBCA4F3082F06194E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + E6C34E31CB47F1A4C199AFBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + AACCFFB87A0C6D020447F6CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 89D520FB224CD8B0F6F07FD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 35F0A9794BBA1C3E28044C08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + E3A14E449A079F20990BA78D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + A2AB81BBC57FB7EFE859187D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 042772E6027B4C3B822FE587 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 4944E1A82C49A81872052421 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + BBDA078AA916BC6D770D5283 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 7522DA750DE1071E2508A0BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 0175433874D81DDA99C23E39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + D16D552B903F8253BEC5298A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + A437C32573157CE5780A9309 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + C7F8B391ABB12BA6C85B6599 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 3EDC39C63FD62325C1BDB6A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + D122BD22961B94DB475AEF81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + E68C6045F5A4003072BBDA07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 2CA0CED3B65FD043ED92EFD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 5ED5908BF656CAA188F25592 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 56F4F2B5BC79E247FE8D1A55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + DCFC2EFAD8CDE6117CB20BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 81CA6278109444519A9A3946 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + A196D2367B38F7209C973CB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 689FB06678BA191DB782F62C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + E909A3C431762EB64A2726B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + CE21C9028A14333E83D8AFDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 97345D1F83CD1EE224227E57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + CFD9D50470B323C98F30395D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 775C94B580A22A0F77C15B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + C5AA92BECCE54E56660292E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + C0486CF3C4E6E6F6554E4853 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + B64C876BDE7C8766E3DF3C2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 93D5FD8786FEC290DE5B00DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 637CC7F7145C26DDDC5B0950 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 89148E2B903D173AAD2E51F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 0DA8672EFFDE39C7255D50F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + C56F80FD32EA7206E3E275EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F6DD45D79A7DC6E573A601B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + A69775E25C057B9A70B6FF9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + CBCFD96EFCCC8E7C39CEB90F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + C5B82800D35F0D99E49702D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 20116BCF2FD32F6ACC4B1B4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 171D22BF37E7AD5B34293F27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5BFAB82E3CDB252FCC062799 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 6421B17EC946FA261CA77571 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2248C9365CC19AE282A154B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 9734034C34B8D6BCD599666E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + E83832EA7722E7A543FC9EC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 366E6DDDB1F0BA5D82E56023 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + BD808C65C3EB60FE8BFA252E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + A7B84C7B2797CB7A7BF3A0A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 37F1189989E5FF7A0B7520BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + E51696551E75158B70C726D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3334F9B0A1A1985C23972360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 16DED61AAFFA515144E6E1AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 3E466B64C90E3A1A822906E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8B9E66E113BEEB8AA7C4F6B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + 6B51F66E9C1C3CE0D77B586F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4E10751416CEE3545ED823A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 270CC75A5ACBD6A6CE9BF633 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22F7C417F8E365E93BF0FFC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 0107DE787DB7F2A2CD9DD086 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D53368480597AEE2C31BC3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + DE76685660DA64ABFB3ECEB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + C35AE0B195EB16C040D89770 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 5868B1875A36EFEC4A64F134 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 668FC10BE6914718A7F930F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 1EBFD2DBE2E3EBFABA62A25B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6ECAE6E67EA1B50FAAF5CDAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 1C982A374D95DF458A970AD8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 665EF8B257082009DA2A2DA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + B20259F4718A071032471FBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + 6138B8C0A5E7294A0D7AFB4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 367CB9C2C34DDC5A20129C9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + A27345D09D03C0475AAE0154 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF9C0F4CD0CA9AB5FBCCA048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 72B7B58AF3AF6C92BE875EB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + A27AE1698A81ADC825FB3062 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 9EEE3BD9999F53F9F71AE0E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 69BD9B66C825E323B86AE400 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 0DF5F49468664DFF24C4BC55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B949A1DF0F1573B40D04FC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 3D170AC8FD8E403C54E08F9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB0C14D780777A4F5E68989C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 91C8608600BECA057ABABB1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 064CED20C166F126B551120E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 1AB4910F04C3046F0F165D02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 1099F7DDE3E7825D8A6E3E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + D8A3DA7B5FEDC9FA2D551B65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 3463F66B3F83322748C3EB89 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E7669290CC841D1F8AA0BA42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4EF568D574EFE0B065C158E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + D28CFF6B956E7C79BB595EBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 78A9025665586967E9894533 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41B7B188A3C31B8F1F9951CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 076B069A8D930924CFC2D118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 96A801C85107EB507B4A8712 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 87A8FAE7517D0E756A43CA18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + C08F1FE5A087932F93707903 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + 67C32F2C5F10F6FA50C1D57D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + C845D348865CB8CF5F0BD94A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 1EC2C1C6E5A3CB0F70420BDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 31109EB5161C1B5E60A24FFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 69D504590191B012B7E7E468 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BFCE649511A560A1BF8EF45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 7B6E6EF5CE04768BA5B10050 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 7C37DC498EF7C694BC417280 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 289AF914BB165E14C2BD1197 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 27BD8A34334EFB5B7C14AFAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4775F143ACA53F8801DD40FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + FEA7DE724DA317CDBC6C4FBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 142D7FC9105482BFF6CAD3B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + C29CB910D4955D1ADFD6AC85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9090A5DC04D858C191549831 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 45358EF0A3D35EAA83E6C981 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E7FB0F52F4F1C8BE2E498D40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 8B81BAF2D3D902C25CAC3FC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 765320A32F05D9F40FA0B181 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + CDAC61B1E14085F53CDFD766 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D102B5B419CD6B928BAB1EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + DCBC7727C9CACB08A9B0144F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + E05C06E03B6488634B07BB30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + FF574E0B44C43AE7DE77AA1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + EBE5CFEE05645C9B37A633FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 292763FB5F4CE3642951FEC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + FA2A4A42B6941978D1BD5B54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74B52EEE86F25E24188A6188 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D39001F12D428C5B0028F9A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + F124DCC086FC650CA4A39161 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C90ED7BE51E823887CD8F09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + E022348985B51675F944C787 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 858AABE6C264E35C506E2D03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + E0C96B5EC8C35CF98E85421B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB07BD845593AD40267E7336 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEB254D091DD6A4AC10B69D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + FD942714D656DF808E2EE5F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + A20BCAF69D9B53A0C774A634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + A687315BCFA66C0A43362596 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 9C5E79FBA248CF72D066A185 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + E4364CEC0C763DE820D8E290 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 743483B34E33A997A6FED2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 43A5F00D0B64F90D864F89F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 0E376205ABAA0CEC68C90F27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 1B2A6478BE3E9A4D8CA0459C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 130443849734034C34B8D6BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 25FB9C56187BAEDC253C06C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + CF3EBF4EC126B94DBF69A944 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30E154BBCC969EF994C3DBA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFB390DA8166DA39259E7221 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3186623DD78534485E629DD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 427ECE4B4C59C139EC634D75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83FBF5C660DA8A6E7C483B32 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + BFA18F48F2404BBA0E994125 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + D61BB14F04E2D455B8A2F8D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FCC8F9DBEA5A1D803079627 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A9A3731EDFC09587C418D23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 269FD527A842C6AC3CE21CE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7E62F61EE0C79E44BF0C47D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; + 14633441794ADF639621EBFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8BDDEFE0276D758D90AF256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + C3E37A913F761086142B9F04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A2237193ABCC9AF020BAF3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; + 8575DD9CE45B5EBD77EDD006 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; + F13AF0E7B406A88881ACC2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; + 4B2429855A448E4C0B08C4B9 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 13D365DEEF82E640E87740C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; }; + CB8E52C651FD6B0612DA09C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E3C4330D5471146220919DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 789BD1B541A01DE20C2A2ABC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 0A63393C0DE7C6C985D11F19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF22C956DDCC91D647896364 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 292AFA7384B7860099739C71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + F180537E15CCB8B5ECEB2FB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 194FC714FEB549F6CF50AB89 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + E55CFA48985CBD80702B140D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6FBFA7B2040738E76F567CE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 7786802AF084F0629B6FD469 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74E610AB723619E393C02F3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + 61DEB808BD6BE9AE1E71DBB7 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A6E7CF67AF75B3199D053A04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 1A83F1BDD9E6FB384BA87607 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C061A7682CEF99BCB29A8A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + E62788CB7FD4A1F3AEA0147A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + CD83A98DEC5B5B1047CEADA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 931EAEBD8FB9C9E50E4AF11F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B68656BCF6FF82D3FDD850B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + A9237AA26A74DAB9888141EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B4DD9D840AFCB35E0123172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 9553A8BE3B1AC942F0771B6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18D56E7E10E22528F5843009 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 9B857FA81F03B08CD2D3FD86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 077A3193DF1729A50CD6BAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 39A415C7F0B276CA70DB776C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1569201BD8D3C5B11D5D2FD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + E6D2179490CC8B944C5F0490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 828D645E497C2C183C94F7E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + D0580F745B5FA7C55CC699BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADD5EE243F26300074F6985D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 8E80CEE0879AE2DFFF015D18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + 4470968E9C05E2D29B442D86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D9D90F9ADD70DFE9429241B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + F2F1016A483E9579BA9468A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13673481202EDE76B239CEE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 837E290FC585A996F08CA2F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 66D654BD054E88BAB4566D31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + BB05674B3A28551055EA272B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + F473AC9C072A0F6CF3B5410F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 46C5E2ABADB469F615EB90B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 08D5CCBE3C6F3A79DF8F31DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + 102C2C7151A2485D81D83665 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC0F5ADC1455646190DF53CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 8AA4C401064C5DB6A174A6D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + AEBE7CB8237EC8F70BD453A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + DB919DC376C2084EC9D53949 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + CA49D3190379B9B49317D1B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + A0A1C8CC14E1B7E67CB09BA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 14BE1E76E7BB3593A5F66DCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 745697E5B9FC6F5C2900BC5E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A6BC6CF532BFD320530ACA02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + E7EDE9A5CB86AE2A51B6374E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5C2765698EC312934B1F0950 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA12F8714DFE5644D33B5DAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + 317055C93A857F44C3D27FA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 016F2C3BF4ACBCAD838DECBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + E0F00C9557FD2A7CB9549886 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9574DEA5A2AB9EE4734D894F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 816EA6330465F31825D3D1F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4BD1CF019C321DFBF9A9F07B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + 6E7B74AF55ABFC7B67596D1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 9DFC26D3FB6B8C54C4041E4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4512885D5FE8D0D1B97F5B5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 6271132A4EB371A229E0F850 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 7BD7C5E9B0356421136FC176 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 434B132162DF0859BF634A1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + DF007C70C1E10E72A7A2738D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03D3B46077D043425A39297E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 6292E2FBFA00FD888B0AD643 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30AABE02AED3B3101C5479A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + B45B58B529FCE5BB4CBAD8F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F46C1E5256B56CCB47F6B0C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 26B5AD5185787D41EBFE88D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BF7A6142C529F6276B05F2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + BCECE8A0AF81FB6C42B6F303 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + B15934232CABF088D7354CB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 8A513B7CA34624E9DE76357A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + F295853A2AC5546A35CDCED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 90EC9D8B9BD8D8021FB4D1A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45D6EC384101245A52BFC7C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + F04D054D07EF12A52823240B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + BB9DB4B1017F5498D32DF8EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 832666ECB48EC37F211C1914 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 09C1FC99EC009F84182CE869 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + A41C0E0888159FCC46534AD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + D3D502DEA86CB302344116FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9402983C5B800099FB400A1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + F798B06A61FC4B44C6C01EA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA537A0EE409ABABF9EBB252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 4117D3D5F5A4EA8EE1A26D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFD0F7C5DE5A12733CD9957A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + F04BE4C2C649F6647D18F6AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 3A657DDA335E0B9B908AD78C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + FEB99894574592A1BDF5F641 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A2885CDD0D3E217451E354D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + A94032CB23BA7145C789D278 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5BE01D797FA90CF10A159C80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 1ED8C101D3C5BFB2341E4C4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFD719863CF1011EFA81F196 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + D247BFC345A0DB612B76F41D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C032CE140605C6925AA1342 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 7DBD49B53B8E42EC038E7573 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + EBD61C331BA6831963109C2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 71F7D91D90A00EBAFA3F3D02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9615E6CBCD7663954FBA29E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 4EE9C81FF2D8DA49E05D7FA8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9FC014C7D64F091EDC2BC9E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 53F8C022D2C5E2A8FCD9B6CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + FACBB46867008A02A1D25211 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + F80CF2D213A0935D58923424 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + DA561F27522DE9111A5C51D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 78DDDCFFC0419315B4452F72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B281D82B9678F5426E224C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 46A947012061109D90BAE3F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 318B162549E225279A6B2F72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 146145E806A07EDEE846B275 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0EFB6C8170D8B8EC5DBB556C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + B16C80CC27648F30442B00C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + EA624608E04AFFD77F78940D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + BAF3DE6C344B8E81B567B45F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + FF4B3EBFD3AE7EC0C810B7DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + BD93EBD6B4CAE5B2E2BCA8AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30398D9FF5FCFB5AC75DCD06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BAC8CDBB03C28F977FB0ED0 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + B25A6FEC5CE924A74CB4115B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 8F7922010F37D606E8575CFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 21DFBF9A9F07BA700411D5F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BC032FB8DE939D0D0A1A26B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + A166489B92757ABEEDD1797C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65241C8D1C8D829436C9ED6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + B32FCFC03FFDEEE88BE3771E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC9A979339C621424B365885 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + F59059DDA2C04FD5E794EFE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34AE4CA3FE6A40A0AB0A7CDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + 6D50316D0D4C4470ADAB4620 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 61C99D0997C9423E21F11081 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 7698D38BE2E6F3FC27DD2374 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04085D8F3200994387731EF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 72D0D11A6F537D4231CBD8C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 636E4C829290A221A063E6FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + DCD1B8825DF37CF0D8A6662A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4A320188ADFA2D7F8ED1DD6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4A2A3B5C1E6A746F86DF99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + 1EF065AD3C8FC0B0A71A2049 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FDCFBC1769E2677A4C1FB499 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 9DEA874D1BC6F5577D52DC6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 160FFEC940AEB17780D20A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 6259749AEBAC3EA2B6295EDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8B781B6D16247CDE641ED935 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + B74A674BB7E7F20CCCF99FE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + A71BECC7DCC8920B429926D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + B556E736C67C93F98FA25563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC02C49FCD0CC569E489058C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B726BE2733F591AB486317E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C2F2945A3607F38E0F0E1C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 74688FDDC0F38B4605B01BD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3EDD3EE2339AE024B1F2F03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + DFD6E1B646CC12A5CA392AF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6AC44F0D60CEC4E66937B75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + C95E642FE34FAAE1B1442BDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + 666A1792A00D45585B6A9FCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + F71510C1BAB97006CC497CA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 1528ED09BA63C1DA24F94999 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 33D0066D66252DC2DF1E22F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 957DD13BAC0D75EC74E7AE05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B03672FC7862B671969BC6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + F02881C1B6BAA501DC0CDC49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86623F42AE45EF2606B36340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 57C9DEFD15787CCF1F5CE891 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + 51A3BB945C8A135A0AD3425C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + BABAE34D97FB489D68C1343E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 357EDCB82CF49E647F334B2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + E444EF58D2CEDE7B7521304D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9EB35B9EE79C5FF6BA3F3536 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 2E6C329EA535E1BF203562DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31AFEAF1FC22CBA783608C0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + 0410A1D687AE613A8B61EB63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 158C509BB28C7E122A62FAA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5159477CEB0CB7A1215AA525 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB8922F7043CE6B876122BE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 13BDF0F7764CC3D4074B67E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91173EB7ED42224DB3698EF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 9C08EB55874E4BE0B44DAEC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 85CBE3D5988E8C512B8890F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + 19B7FE980E9CA3178CFC1113 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B941B09FC7452C1CD562E0F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 785A14FA238FF98DE2CB2BEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 1AC7575C469348216A50B3B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19679975D3538CA85ED58D84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 2A8F7A3F4BBD05A866BF1B3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F1DEEF8E26644540196A0CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 22B42A89E47D9F69C5EB900A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC408AAE3055F824757A2389 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + F22910CC9D6571D4F14F4809 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 39B8493FF88FB863D8F167E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 76A7384DD3891A3E016C34C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + F5B6B54C49CAB7284D3C9474 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 819E489474D011CBBC35BC18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6F6AF9E195C9BCB1852F32CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 650FB8EB65D80F872C942DB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A45E72AF7E6D6CEF760B816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 7D680DBF5EE00BB592517F84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + 4B4C59C139EC634D75943C28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3FE43CA83B4B0DD8E548F640 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 2B9B58BFA279966136DE31CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07DFEBB372B37EA38AE04A74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 6E53F6134975F13924D2F4ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F7E64DD6ABA57FA787758CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 5988E65AE9A7E2379AD5E701 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28B8DD67232AC600E86870E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + ED4367D99976F08C4A762035 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 78E1ABB07ECD6B87BD15419F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + AF0066E39B00BBFF41B9E31E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00A312088F38502AED52E493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + 6D955DC7B3615F0D7CBBD824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC7636EFC2D7F74590A3145D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 87E01C5F0C3C505D5A7715D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D69EABD5D77B27EFFE225B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + EE29A39229C22454960B7506 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E8DEA810748B2E72180BFE89 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 4117D8F1FA58B89CE1E6A819 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB5972EC96375A536A6B6372 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + 0298BF9CF21311FCC8551409 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1ADF9687877E32097D0946A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + 252C764AE47A9491165EE241 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD822FF2B19590233CBD9CD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A6A492677CF909006CD0C089 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07322122227D60F477C385B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + F49BF03F5FCBDA0F2A843A50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 125D3D09DF697987CDCA17D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 89E3C466F89469534B49BD8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C055C78DAC12711B5E55D4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2A8784D3FF39F0F03DD8D424 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D1635A7DC2E314CAB0A792D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 304E7C85217C5FAFB431E548 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 925F36479A611E123885F6F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + 60A12EA9BA6B4B03C784EAA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC9D737E2EBDFECDDD5203B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + EEFAAF4FA028C91ACA90EFCA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 59967E0829324843AD80E820 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + 532ACF746F7B01030F04E04E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7300FA7E2D745B2CBB857587 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + DAE5C6BC55AB1473BBF47AF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8876D143471B5A59B990E43C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 2888577855E95199C2815442 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 931D10A82E3BB277CF8CE02B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B2B5DF3913740AE3DDBF5BEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 386598A251EE72BEFC92CA4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 9D33D75ABEEB92C57E10CDDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 43F9919FFBA393B7D774D3AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 0CE9F0627F914FAC023C84C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F0D9936574D13527E54FB2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 721E5B8F23744B274AF6DC8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + C330BFC5001E0E244D228ACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 71C6E8CCCD7CEAC2141F0F7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA4550661E434A71069CD98B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + D768ECB5744AACF671F0A922 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58BF1D9C4E59BB7DE2869451 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 23C674678AC1CC3FBD38158B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + E5E19A2B9DB533DC1105DDE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + 57D7466A89007733E123D649 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C5EB95260490D9CBF4AB3AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + F616987A14134A5205FA3C93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 341EA8D97DE1F88000AA4102 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + 315CC4C271BE113416DB9AEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + FAA30E21A2DFBA5E2A6293DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + D44EF7D2926C65117DE73CE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 906833D0DAF383E12394881D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + 3E96C087E458528AAF408A76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + E5F22FB1B25A5C2B7047FE71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + BDDAABF14F39655B08B1B71C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 218CB88DB998D989571B80F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + C4877EC2839EEB91F2E233E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 533E934012AAA78308193DD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + A18C34CA7CE3A053B1698F6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + 275861400C16EB76E0210168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 386EA4F6AB8F80B15CE5298D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 753A8CB65C9A714404EDF49B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + 6036172A80B57EB2D3E4A54A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1429212A876F9C87312A4F80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + BBB92F46800D9CC7686DC722 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01A43087F198C2E98B1DEA8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 3F984FEDAF87B09977B48341 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + A664AAC322B90D19859A313E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 678566B2C3B73C772BB9164F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 52BB608C6FE34BCE4356FC85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + B4DCF2F061BB9A38BE566783 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2EC883B0097BBE58F4316509 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 875B9E01FECBA25EF0D3BD4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF906EFE2902A6D13D16CA6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 3E0D7BE84D46270BBB219BED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B1A33D28D540C8930EF374C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + 18ADE4543BE35BE6A1358DC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74D39FD4DDD5F3B164068383 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + 1129CCE158C42F7EB9D15EAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF2A13D1D56E66F2380A14A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2FC7534F28212AD3432F198D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4FA01DFB85FD6557973724BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D8F9D1102C218D6566166C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 50DD566ED7BE0F37E75C9BE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB49AC8FC0D75AAB3AB61247 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F8EFE58EB0A0717E9D4C56AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6665D33BB511A6334C9D6B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 03A9258AE7F888568C7C9556 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + A94F5351B00010B029AEA900 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + FBABAE5B8BF0BEF650DE7C55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F14637DF41A6CABF1C4E5F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7730DD3D7D92A62EB00360CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4764B28407D095ECE3D4F0F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 31EF823023468D88FB79F4D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B33301B7A93A933080C55E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + F34BF1E2FC449D291A603E26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 97C0EA37F0B02153E15E1C41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D21866C081471271262CEA91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EBB5DF37B85BF95CF52B345 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 28D4F07D17345668E5176077 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE330427ED50EDD623EB23ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 259D7D0595C0884071631177 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + 11CBD7F342D5AEA2A28F25BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B58366BB45023A4DFF4E2729 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + C02C54CA659982168A3DA559 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 463A5AAF4475138358F33D49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 899565C0BB30D7F665CB0759 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42D5D18DF276649436FCD8A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + EA8F4E36A736A7ACBE50E307 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1673E3871DBE9F2FB7DBE3B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B414FEB69B5170A75C11AF3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7824E6E95017F7EFB40D99C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9E6AAA1263EB185A3DF573F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C50EE6C1529D9ACECECF4BFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C0CF8EB15BEFA1506E02346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0F4C6034BA96461D0F55192C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC650A498B80DA2D371E1B65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0966BA1C60A92B13B00A640C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD4F8563AD20CBB3C6A83D17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 646726910F110DC34DD16624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7670AB1249130ABAC7C218D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + C694BC417280863AE4D39EFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + BBAB968F9121F68558521DCA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86894E5298BC74E0A5A76CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + B6CFBB932327A69E662394D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 245DF52050624E7484F7AB0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + 0B4131BEAF180FE12BE0EC1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74E0B2E02A9DE61FE68B302B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + C29483AE9B4B373AB61F96FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 64D52BCF3A76B77DD460E828 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + A22A0F77C15B1E4A8F2EB42A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03291953F0A7EA46599E27BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 675CF5A698D26696BDEAF63B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CC77A3F0CB84C6F69010E4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 16EC56A5CDBC5F16FC4C8285 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + E39B85578A65D8AC3AFB5359 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 44D4EA9123BE3D4AE300D6A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + 0B450A0637CE15A8109CA8D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F3CA93056129CB247F785CC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10DCDF26CC11D23E4B4DDAAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + B33ADAF0AC6FDCF1A0063FC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 45C21B1D7974B511B5D8238C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1382F08B07556349998BB8C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 63CA10DBB1A74BA1607FAD82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 64D65422A7225B3D72E7A496 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 29B0908C4C33199137F0491A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 3B24A00E252DF726871BD9AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 43E37D69DDAA502AFA8BA261 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + D3B106A417ACE152E58FDC1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 90FCB6449379AB0909975E1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + D2CFBB7AC0BAFAFAA6751D19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1623AAAEAF424A0F60773CD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + D0870A67BE1EB60CB9FBA4DE = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 0E794371947E5788DD46B75F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + A8D9C3146BF302A9447EFA4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 907B34009F560364A06CFACB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1E0CFAA538C9AC90DAD1BCF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + A4586F239DDB0818BD663A75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DC28842D2035FD3011CB244 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E090958A449D1CE1A2505489 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 91EB08AA83A03C660E30330B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 275E0F2F62853F848D66BFE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 25345D02590F3010D45BBA79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 108D2AA33FCC91E371373136 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + E675C4766D40F4775B12DAEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BB7ECA69EA3615079A5CC7FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 56D6A24F8C8CE5BB260747EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E38C84F1CA0395D90AAB8F39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92BBEA7FFC755C09C6BDBA1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 47429AD00D7DD1C032221A04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 629DD320F510C0E72D8329A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A954117BD23649B7D04AF495 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B86C51D49282B2019282427B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BA069D3248465E6C8B574F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 34A5E2A5CE14C84BF0EDE04F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A60A08F543577FCB7099980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F28236F49C2AD7498BFA92BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04D9FFF3AB0DB3F13C2FABB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 56CB267A0B8D4D689CFE6117 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + AB88C05D2E8F1D324FFDFB12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + ADF21EBFC5A12405199AE3AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + E608709E6D37C05C79C82BAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 5FBB378E931B79815371777C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C10B760B6709F1499FF6BCD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 795F44454F46DE2ED449281C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E523C7F6322C61015D253248 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74A56782B0A15E7CF8D6106C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 3F509E66EC07AA38CCA9D4B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 42C393CF5CA1CAF818F489AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3E8615F8A3B49C5AB13996E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CD034FAC1F6642AFC825F1B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + 61BC57220B291F07975F8327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 941AB31F246223CF51A61C2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + FC8B040D4CDE68FA76909F35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 244B051B90411E39C2C89951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 25D89D6A16AACDC76F6CAD41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38B48B2A977AB0A7E3942E1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34004879B374026E0643E68E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 40AD2B86322D5B5FCC1CC4CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + 5C3A0BA51AAE7DD8D6CAD2E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; + B5358D16656467170D282294 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02D83119882E6653FE048ABD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0AD446688253CC6A00796DDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; + E20F6669D371D3117AAC4E3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLPixelFormat.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 72684D6622FF1ED0AA24617B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 06834B927627974AA432F0BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + D00B57EAB21529CDDE562EB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CECEC8C4DDC4202687296E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 566EF6830B8C89628600B442 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7D01A20583EEC6FC8E546C88 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_opengl/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A7F83971A90DF8814260E5ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../../modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; + A4B0BF514DD159FA178CD7CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB2139647EE3F1AE5BB19DE9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5465D12B7F9392B869A95804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2FB8BBB85D16CB310D929055 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; + 4749A473B1FACC29194BD3FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 669E960D94D0A0F83377E0F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../../../modules/juce_video/native/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; + A348A34F99B5A389F8672EAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../../../modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 8940D98F63D8F3C20F9A2DC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6BC6BDC746F930957AA11C85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 366C11EF05AEFA6C28538657 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C7081EDAC929A7BF4734429 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_video/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 96CFEDBCD721085272D356BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_video.h"; path = "../../../../modules/juce_video/juce_video.h"; sourceTree = "SOURCE_ROOT"; }; + 98882C3BABCEB656AE4C01E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_video.cpp"; path = "../../../../modules/juce_video/juce_video.cpp"; sourceTree = "SOURCE_ROOT"; }; E0C1FD5EE3068D41ED2D4DD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + 6E0C95E241AF58A99B7B2635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B4E00BAAC4CBA159D4DE0970 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_devices_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + BC305F9F762285BEC39F9DE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_formats_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 6E6B5C42862ABF4C019C71C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_processors_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + BE986BF0765764F0F132F4E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 67F58C67E6D1C9A54D03755F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography_wrapper.mm"; path = "../../JuceLibraryCode/juce_cryptography_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B86316062F2F86341A59A955 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 5F8C98DD0F438205283C35B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 180055DCD4BF80628DB44BF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + FA8BC7B8181DC10BD967884A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 1EF2FA9E44B87C5CB88EDEE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0BC3C3DC3DBCB02DB60DD879 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl_wrapper.mm"; path = "../../JuceLibraryCode/juce_opengl_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AE1CF40759633D5CDB35874F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video_wrapper.mm"; path = "../../JuceLibraryCode/juce_video_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; A84DC40BF5D1B2A14239B035 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - BC9F16AE41ED85BFA2090081 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - 06C5EFA95DD808E386ED84D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - 4FECB7A56AC38B066AC01710 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 980380A077AFFE293EB49B50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; E1B7497DFD48F160861E53A2 = { isa = PBXGroup; children = ( 178E79E571E8D29BCC89FDD8, 57EB1EA963753DC3D960E9CA, @@ -70,13 +857,980 @@ AFF6B72723C927C80459D99A, 218167B6F2BD95AC7FEC31D5, B6A31D39CA31260F86D45CB4 ); name = "Plugin Host"; sourceTree = ""; }; + 61F2325DF529D934791FAD62 = { isa = PBXGroup; children = ( + 14BA316D7353F8A5644CF8B7, + 1E1B6A35BF3AFE5A060D1AE8, + 3A128F93FC866F003C45109A, + 3D81C4B3FD7DAF219DDA0291 ); name = buffers; sourceTree = ""; }; + 51A27B49D1B0764E26EF6EB7 = { isa = PBXGroup; children = ( + C6D2A8A74ED1809732164DDA, + 42A9534DE0E45923BA641C19, + 03796FE14402988E1CDB3C79, + 1A66F4631E3775641C9CEC72, + 7735A22837C0DFBA2B3E23BC, + A207F2B7C3358D20EE3793B3, + DA6283EF29019C12DDD69361, + FC898F71CE8AFCA5A278B2A5, + EE8EBCACB6792B92FF1C9B34, + 220BBC3B032BD10BE248DE42 ); name = midi; sourceTree = ""; }; + 77395D8215D0043528537E3A = { isa = PBXGroup; children = ( + 40B6DDC682C6C585AAF118AD, + 6D94F55F8E7DBEAFB238615C, + 384F22CAD7A86E411B55E15D, + 30EB3AC75D559495337C546F ); name = effects; sourceTree = ""; }; + 240A8D17CC6174FB07BE58E1 = { isa = PBXGroup; children = ( + E9436471720AC0FBF946EA7D, + 6549A6BBFECB7CB2C449473E, + B9A9492E9EAC02EBC385BAE5, + 67B7C2823167674A73C63501, + 7CDD1CA6A340A731CC282169, + 96382DEE48488970AE2806CE, + 4EBDCF7B6B7ADE9081354B8D, + 9F3F0AF657FED29B7C24DAAD, + 994B692F8ED911720120653C, + AD333B7A7B19523A45BB3706, + 7514EA550010539ACDA0E4E7, + B214726BAF57DB1B92FCEED7, + 3850EFAEDBDDC4D0C0640D24, + 2E7BC9D0BDAFA0F2AFCAD2DB, + 6458A72B3700FB301E14C172, + 4430203BA4D96FCB4B679581 ); name = sources; sourceTree = ""; }; + E86983916C7154A49839E2EC = { isa = PBXGroup; children = ( + 9835F74E7B1B6494C96EF7A0, + 1E6E61E5C82E350EE5E8052F ); name = synthesisers; sourceTree = ""; }; + 5B973550D06E604519804027 = { isa = PBXGroup; children = ( + 61F2325DF529D934791FAD62, + 51A27B49D1B0764E26EF6EB7, + 77395D8215D0043528537E3A, + 240A8D17CC6174FB07BE58E1, + E86983916C7154A49839E2EC, + 5D73E2AF3A68BA2318B16254, + D6245E69A886D4710B19CE47, + EF6EAA0168F26CECDBB8B1FF ); name = "juce_audio_basics"; sourceTree = ""; }; + 4664F553691B09F7685D1EFF = { isa = PBXGroup; children = ( + 66238D1331294CDFBAB01B7B, + 145E59CDEC537874E6ECBF32, + B13FC2229918D7B3E59F708F, + 5A0B1CE4ED907C9C79C44AA4, + 04AE6AF108623B066E3EDC1F, + A49F375CE1748C03AAEBEC17 ); name = "audio_io"; sourceTree = ""; }; + 611E628DA7113BFD5D816BA8 = { isa = PBXGroup; children = ( + 3F7E1F5C33DB4FD4181506BD, + 2A33500F8DE7ED6564597325, + 2E87E555DDA33E699BE5A3C7, + 976F73F7605B88F5E547C32F, + 5041199B8CD735DD9A5D2483 ); name = "midi_io"; sourceTree = ""; }; + 2E13F819D5C961A37571DA27 = { isa = PBXGroup; children = ( + C361D9EFCAE306222D2534C8, + 72FCCE8528D3A79AC93F2E32, + 87E885FCCAC3FEF50B985421, + EE5637997D7FDC7A163B5657 ); name = sources; sourceTree = ""; }; + 2443D0A94607F858A9F183DA = { isa = PBXGroup; children = ( + C9C08551D162629B7C1E281B, + CF341A584E3CC5EB009FEFFB, + 7E8695B9918D657CC8ED9B7A ); name = "audio_cd"; sourceTree = ""; }; + 3CEE0FC366DF31FC97A79910 = { isa = PBXGroup; children = ( + BF055531C2FB884B597A616D, + BF5BFD40B020A607F149987F, + 2083758047B08AA7CFDAB5D9, + 3F3CAF752926A9E8449A6880, + FCAD487FDC0D579D69E0B2BF, + A664EE5ABF170BA8B21A0B34, + CBC031D622B02FDAF33120D8, + A518663007363116E5CDEDBB, + E730DD532F23B09B3A45C9DC, + 4221BB98A2878AAD4862A24E, + 58BC8A672806B6C5E0663734, + 404D28E7868B24AE524CC114, + F9D12EB1087CCE9E7146F1EC, + 30C70701A10B5BD55F607064, + E4DC4AB90AE96573ACA931D8, + 5A14179D623D8720122C155A, + 44C7BF782CDB46AC9B0C87DD, + 44BFDBB7B65C23643821D36E ); name = native; sourceTree = ""; }; + 05F110AAB3B630BA3BD1A433 = { isa = PBXGroup; children = ( + 4664F553691B09F7685D1EFF, + 611E628DA7113BFD5D816BA8, + 2E13F819D5C961A37571DA27, + 2443D0A94607F858A9F183DA, + 3CEE0FC366DF31FC97A79910, + B2371B8F22493D7D278366C8, + 0A9858468FA0088EB00E6B78, + 42CEC4195577AE91AA6CBA7F ); name = "juce_audio_devices"; sourceTree = ""; }; + 77EF3C9A7071680017765B3B = { isa = PBXGroup; children = ( + BF6C739DE169E97BA7D3D73A, + DB9B4E9DF6083E91786AB807, + A75BF49CE4FBF99B5BA4C897, + 04002D2AFC7A41615EF143FC, + 92F121ECB56D3DF2DB7DAEC3, + 7938F4A54E089154A04FC01C, + 45DE0571DC7C78DB94C2FF92, + DAAEFE8311029098BF8FB854, + 4905E4FD9E66FE5D6DC95C07, + B7CC13CCB14848F9058D37AB, + 438ADE4CCAEBFA134098B297, + 99E16D188100081C7D35FFFF ); name = format; sourceTree = ""; }; + C777BBD782F95AA11FDEE1C6 = { isa = PBXGroup; children = ( + F7545098BDE9819979DF7DA6, + C524DB8ED0588AD8C03B870C, + 5B55564FFFBBBC7138292910, + 227CAA9248B431099FD5400B, + 4BC43DEA997C1CC67B58CB08, + 40C47D816D7B2FE1842CBDFF, + 0D2E2C02C24A567D370EC9A5, + E4902CBFB31FC7D342C6362F, + 8F906B84565A0F7035C211CB, + 9C42B3738F273B911A99B640, + 7C1E0EB82A7A914783CAA118, + 939396D32CF265BB85732C97 ); name = codecs; sourceTree = ""; }; + 71BA48064C65C45BAFBB273C = { isa = PBXGroup; children = ( + 47ED51A07111C849EA313667, + 2E94A0E9F477805942E7D896 ); name = sampler; sourceTree = ""; }; + A76991807D8E35581C923B97 = { isa = PBXGroup; children = ( + 77EF3C9A7071680017765B3B, + C777BBD782F95AA11FDEE1C6, + 71BA48064C65C45BAFBB273C, + 4176A1F7BC3ABFA9BA2BDB22, + E07B4A716014330D03B1C925, + A938241109A6206F48E6AE2A ); name = "juce_audio_formats"; sourceTree = ""; }; + 7A8F5DB4CC940667A0E8F9D4 = { isa = PBXGroup; children = ( + CB1F9E1707244B9AF7D85899, + 08155CE0BA69F8086018166E, + 36A53FFAF2E56F399E16E73A, + 4432B51CBD011A665CDB432C, + C42EFCEE3FAD66DA1FB221C6, + E9D679CB7482DA3CC27C3793, + 6737D69B6E8CF118C0250089, + 6E59EF3CBD5CB1504FE19F78, + 37958BDD8568BCFBC0A30338, + 1EB6465C8CC6BB847B5FB72D, + 88AD16FB044B1C65AE8D4564, + B8803E2918FDE3AB073CC468, + 35369E72DB7701E34D62A4E0 ); name = processors; sourceTree = ""; }; + 491721A276DC58C38E53F3CB = { isa = PBXGroup; children = ( + 1A584358C99EDE9ED030EBF6, + 31511BD5EEAF839B1CE0BBD9, + 585A8ACA21DBC5686CD1AB32, + 5D26439D7459D745F5E72CA4 ); name = format; sourceTree = ""; }; + 434A4F8575F2E35C43256F24 = { isa = PBXGroup; children = ( + E443CF7E384DC5E4334FA834, + 7BBDA027E9452EE5F77C9170, + F077322D98F86C432A94F734, + 6AF3C3E06FC980EA62CEAB79, + DCDA232BCAC0C40BA717DCFC, + A78CCB8A397289D2944C3ABD, + 0168F26CECDBB8B1FF65EC6B ); name = "format_types"; sourceTree = ""; }; + 515196A62CD7B09925F43814 = { isa = PBXGroup; children = ( + A0EB4872E7D5162A18A82C51, + 0D5FC3DB290CD58A8FC67C5B, + 3977FA9E915CA3D5CB7EE2E4, + 3105AD340AF95432BA38C1B5, + 01144EC37613C889F6A6284C, + 292F3FE42E03645CA4B0796F ); name = scanning; sourceTree = ""; }; + A561F27522DE9111A5C51D16 = { isa = PBXGroup; children = ( + 7A8F5DB4CC940667A0E8F9D4, + 491721A276DC58C38E53F3CB, + 434A4F8575F2E35C43256F24, + 515196A62CD7B09925F43814, + 7B4077B246F89E8AB3AAAE99, + 4DB56EFB670D455AB683A054, + C4B57C87C0C1D483038DA343 ); name = "juce_audio_processors"; sourceTree = ""; }; + B88597C76BE25871C34D79FE = { isa = PBXGroup; children = ( + 18CA841ABDEA615E159A6503, + EB6FF96FE571603F0292D0FC, + 93ABB48D4606B69205165FF5, + 80E8F800B3F333EC568C6A4F, + 201F092FE177F2FF11601F6E, + E976C988F92187DB22DB7F45, + DA626F98C109B6712F93128F, + C1448FFA408DA9080485D23D, + F321C81311A199DE0E3AC4A5, + BB11C2893FD16DE89DCF3567, + 1000B1EDD124002EFD88672E, + 2BC738E0BC1BED69E88EA879, + 42F4807F4322C7B8A2051DD6, + FBFEB7505786A509E6A080C6, + 5024AFC848DD0777992651CC, + 8513CE1543AF65C9C077BCFA, + A4C93A34BE0987F180A53F60, + 316C8B71A2DF689EDE36B3EE, + C9FAEE9B45B0B766D5802218 ); name = text; sourceTree = ""; }; + 73FFCCBF87AEB18FAE8C258A = { isa = PBXGroup; children = ( + DA3271F7DA88C9B1A5829E55, + 766A3CBCA4F3082F06194E8B, + E6C34E31CB47F1A4C199AFBC, + AACCFFB87A0C6D020447F6CE, + 89D520FB224CD8B0F6F07FD1, + 35F0A9794BBA1C3E28044C08, + E3A14E449A079F20990BA78D, + A2AB81BBC57FB7EFE859187D ); name = maths; sourceTree = ""; }; + 431DC100E56C4C08D3899D7F = { isa = PBXGroup; children = ( + 042772E6027B4C3B822FE587, + 4944E1A82C49A81872052421, + BBDA078AA916BC6D770D5283, + 7522DA750DE1071E2508A0BD, + 0175433874D81DDA99C23E39, + D16D552B903F8253BEC5298A, + A437C32573157CE5780A9309, + C7F8B391ABB12BA6C85B6599, + 3EDC39C63FD62325C1BDB6A4, + D122BD22961B94DB475AEF81, + E68C6045F5A4003072BBDA07, + 2CA0CED3B65FD043ED92EFD7 ); name = memory; sourceTree = ""; }; + 257EC08F7D16CC04A9707D7B = { isa = PBXGroup; children = ( + 5ED5908BF656CAA188F25592, + 56F4F2B5BC79E247FE8D1A55, + DCFC2EFAD8CDE6117CB20BE5, + 81CA6278109444519A9A3946, + A196D2367B38F7209C973CB7, + 689FB06678BA191DB782F62C, + E909A3C431762EB64A2726B9, + CE21C9028A14333E83D8AFDE, + 97345D1F83CD1EE224227E57, + CFD9D50470B323C98F30395D, + 775C94B580A22A0F77C15B1E, + C5AA92BECCE54E56660292E8, + C0486CF3C4E6E6F6554E4853, + B64C876BDE7C8766E3DF3C2F, + 93D5FD8786FEC290DE5B00DD, + 637CC7F7145C26DDDC5B0950, + 89148E2B903D173AAD2E51F6, + 0DA8672EFFDE39C7255D50F9, + C56F80FD32EA7206E3E275EE, + 3F6DD45D79A7DC6E573A601B ); name = containers; sourceTree = ""; }; + 4494DB56EFB670D455AB683A = { isa = PBXGroup; children = ( + A69775E25C057B9A70B6FF9D, + CBCFD96EFCCC8E7C39CEB90F, + C5B82800D35F0D99E49702D6, + 20116BCF2FD32F6ACC4B1B4D, + 171D22BF37E7AD5B34293F27, + 5BFAB82E3CDB252FCC062799, + 6421B17EC946FA261CA77571, + 2248C9365CC19AE282A154B9, + 9734034C34B8D6BCD599666E, + E83832EA7722E7A543FC9EC3, + 366E6DDDB1F0BA5D82E56023, + BD808C65C3EB60FE8BFA252E, + A7B84C7B2797CB7A7BF3A0A9, + 37F1189989E5FF7A0B7520BE, + E51696551E75158B70C726D1, + 3334F9B0A1A1985C23972360, + 16DED61AAFFA515144E6E1AA ); name = threads; sourceTree = ""; }; + FFC1AE274F5CB39B3DADE138 = { isa = PBXGroup; children = ( + 3E466B64C90E3A1A822906E7, + 8B9E66E113BEEB8AA7C4F6B9, + 6B51F66E9C1C3CE0D77B586F, + 4E10751416CEE3545ED823A1, + 270CC75A5ACBD6A6CE9BF633, + 22F7C417F8E365E93BF0FFC8 ); name = time; sourceTree = ""; }; + 9B14F1D6BB78053CB64894C9 = { isa = PBXGroup; children = ( + 0107DE787DB7F2A2CD9DD086, + 2D53368480597AEE2C31BC3A, + DE76685660DA64ABFB3ECEB9, + C35AE0B195EB16C040D89770, + 5868B1875A36EFEC4A64F134, + 668FC10BE6914718A7F930F8, + 1EBFD2DBE2E3EBFABA62A25B, + 6ECAE6E67EA1B50FAAF5CDAE, + 1C982A374D95DF458A970AD8, + 665EF8B257082009DA2A2DA1, + B20259F4718A071032471FBC, + 6138B8C0A5E7294A0D7AFB4F, + 367CB9C2C34DDC5A20129C9B ); name = files; sourceTree = ""; }; + 2383C3D58A7132956C02BCC3 = { isa = PBXGroup; children = ( + A27345D09D03C0475AAE0154, + BF9C0F4CD0CA9AB5FBCCA048, + 72B7B58AF3AF6C92BE875EB1, + A27AE1698A81ADC825FB3062, + 9EEE3BD9999F53F9F71AE0E2, + 69BD9B66C825E323B86AE400, + 0DF5F49468664DFF24C4BC55, + 4B949A1DF0F1573B40D04FC7 ); name = network; sourceTree = ""; }; + 289C8C4500582390F1AF6D07 = { isa = PBXGroup; children = ( + 3D170AC8FD8E403C54E08F9D, + DB0C14D780777A4F5E68989C, + 91C8608600BECA057ABABB1A, + 064CED20C166F126B551120E, + 1AB4910F04C3046F0F165D02, + 1099F7DDE3E7825D8A6E3E9E, + D8A3DA7B5FEDC9FA2D551B65, + 3463F66B3F83322748C3EB89, + E7669290CC841D1F8AA0BA42, + 4EF568D574EFE0B065C158E9, + D28CFF6B956E7C79BB595EBA, + 78A9025665586967E9894533, + 41B7B188A3C31B8F1F9951CA, + 076B069A8D930924CFC2D118, + 96A801C85107EB507B4A8712 ); name = streams; sourceTree = ""; }; + 55B173FEC7A373FAE380AD48 = { isa = PBXGroup; children = ( + 87A8FAE7517D0E756A43CA18, + C08F1FE5A087932F93707903, + 67C32F2C5F10F6FA50C1D57D, + C845D348865CB8CF5F0BD94A ); name = logging; sourceTree = ""; }; + 72A00C72CC6E8D79C02A7FEA = { isa = PBXGroup; children = ( + 1EC2C1C6E5A3CB0F70420BDF, + 31109EB5161C1B5E60A24FFE, + 69D504590191B012B7E7E468, + 0BFCE649511A560A1BF8EF45, + 7B6E6EF5CE04768BA5B10050 ); name = system; sourceTree = ""; }; + AE380C4FB7B1822C96462A38 = { isa = PBXGroup; children = ( + 7C37DC498EF7C694BC417280, + 289AF914BB165E14C2BD1197, + 27BD8A34334EFB5B7C14AFAE, + 4775F143ACA53F8801DD40FD ); name = xml; sourceTree = ""; }; + B0DE91057B163F44EC0485FC = { isa = PBXGroup; children = ( + FEA7DE724DA317CDBC6C4FBA, + 142D7FC9105482BFF6CAD3B6 ); name = json; sourceTree = ""; }; + E10CC7297EB17B6C7055CD56 = { isa = PBXGroup; children = ( + C29CB910D4955D1ADFD6AC85, + 9090A5DC04D858C191549831, + 45358EF0A3D35EAA83E6C981, + E7FB0F52F4F1C8BE2E498D40, + 8B81BAF2D3D902C25CAC3FC9, + 765320A32F05D9F40FA0B181 ); name = zip; sourceTree = ""; }; + 6E410E2C327FD54F48239563 = { isa = PBXGroup; children = ( + CDAC61B1E14085F53CDFD766, + 5D102B5B419CD6B928BAB1EC ); name = "unit_tests"; sourceTree = ""; }; + EF070F9AAA8480F102B93890 = { isa = PBXGroup; children = ( + DCBC7727C9CACB08A9B0144F, + E05C06E03B6488634B07BB30, + FF574E0B44C43AE7DE77AA1C, + EBE5CFEE05645C9B37A633FC, + 292763FB5F4CE3642951FEC5 ); name = misc; sourceTree = ""; }; + FD0F518F4FE4ECBB9BFC0A1F = { isa = PBXGroup; children = ( + FA2A4A42B6941978D1BD5B54, + 74B52EEE86F25E24188A6188, + D39001F12D428C5B0028F9A1, + F124DCC086FC650CA4A39161, + 3C90ED7BE51E823887CD8F09, + E022348985B51675F944C787, + 858AABE6C264E35C506E2D03, + E0C96B5EC8C35CF98E85421B, + DB07BD845593AD40267E7336, + EEB254D091DD6A4AC10B69D2, + FD942714D656DF808E2EE5F6, + A20BCAF69D9B53A0C774A634, + A687315BCFA66C0A43362596, + 9C5E79FBA248CF72D066A185, + E4364CEC0C763DE820D8E290, + 743483B34E33A997A6FED2F8, + 43A5F00D0B64F90D864F89F5, + 0E376205ABAA0CEC68C90F27, + 1B2A6478BE3E9A4D8CA0459C, + 130443849734034C34B8D6BC, + 25FB9C56187BAEDC253C06C5, + CF3EBF4EC126B94DBF69A944, + 30E154BBCC969EF994C3DBA6, + AFB390DA8166DA39259E7221, + 3186623DD78534485E629DD3, + 427ECE4B4C59C139EC634D75 ); name = native; sourceTree = ""; }; + 5C3AFE6B5BC0AB880F07F334 = { isa = PBXGroup; children = ( + B88597C76BE25871C34D79FE, + 73FFCCBF87AEB18FAE8C258A, + 431DC100E56C4C08D3899D7F, + 257EC08F7D16CC04A9707D7B, + 4494DB56EFB670D455AB683A, + FFC1AE274F5CB39B3DADE138, + 9B14F1D6BB78053CB64894C9, + 2383C3D58A7132956C02BCC3, + 289C8C4500582390F1AF6D07, + 55B173FEC7A373FAE380AD48, + 72A00C72CC6E8D79C02A7FEA, + AE380C4FB7B1822C96462A38, + B0DE91057B163F44EC0485FC, + E10CC7297EB17B6C7055CD56, + 6E410E2C327FD54F48239563, + EF070F9AAA8480F102B93890, + FD0F518F4FE4ECBB9BFC0A1F, + 83FBF5C660DA8A6E7C483B32, + BFA18F48F2404BBA0E994125, + D61BB14F04E2D455B8A2F8D3 ); name = "juce_core"; sourceTree = ""; }; + E74AE6A18BAF34574E870352 = { isa = PBXGroup; children = ( + 3FCC8F9DBEA5A1D803079627, + 8A9A3731EDFC09587C418D23, + 269FD527A842C6AC3CE21CE1, + B7E62F61EE0C79E44BF0C47D, + 14633441794ADF639621EBFD, + C8BDDEFE0276D758D90AF256 ); name = encryption; sourceTree = ""; }; + 0A20E06E34AED139230F6800 = { isa = PBXGroup; children = ( + C3E37A913F761086142B9F04, + 9A2237193ABCC9AF020BAF3E, + 8575DD9CE45B5EBD77EDD006, + F13AF0E7B406A88881ACC2AD ); name = hashing; sourceTree = ""; }; + 6DE28C538A518C3CFE8304D8 = { isa = PBXGroup; children = ( + E74AE6A18BAF34574E870352, + 0A20E06E34AED139230F6800, + 4B2429855A448E4C0B08C4B9, + 13D365DEEF82E640E87740C5, + CB8E52C651FD6B0612DA09C0 ); name = "juce_cryptography"; sourceTree = ""; }; + ADFE44673DEC1E5E24FE27F4 = { isa = PBXGroup; children = ( + 7E3C4330D5471146220919DA, + 789BD1B541A01DE20C2A2ABC, + 0A63393C0DE7C6C985D11F19, + DF22C956DDCC91D647896364 ); name = values; sourceTree = ""; }; + 263E8686E9ACE4D9E1E75242 = { isa = PBXGroup; children = ( + 292AFA7384B7860099739C71, + F180537E15CCB8B5ECEB2FB9, + 194FC714FEB549F6CF50AB89 ); name = undomanager; sourceTree = ""; }; + F4FA1110789B12366887B5F3 = { isa = PBXGroup; children = ( + E55CFA48985CBD80702B140D, + 6FBFA7B2040738E76F567CE1, + 7786802AF084F0629B6FD469, + 74E610AB723619E393C02F3C ); name = "app_properties"; sourceTree = ""; }; + 31E056CB0123A28567B7DFBB = { isa = PBXGroup; children = ( + ADFE44673DEC1E5E24FE27F4, + 263E8686E9ACE4D9E1E75242, + F4FA1110789B12366887B5F3, + 61DEB808BD6BE9AE1E71DBB7, + A6E7CF67AF75B3199D053A04, + 1A83F1BDD9E6FB384BA87607 ); name = "juce_data_structures"; sourceTree = ""; }; + 18BD4E32214A4F278BF8D8AA = { isa = PBXGroup; children = ( + 3C061A7682CEF99BCB29A8A5, + E62788CB7FD4A1F3AEA0147A, + CD83A98DEC5B5B1047CEADA3, + 931EAEBD8FB9C9E50E4AF11F, + 4B68656BCF6FF82D3FDD850B, + A9237AA26A74DAB9888141EF, + 2B4DD9D840AFCB35E0123172, + 9553A8BE3B1AC942F0771B6B, + 18D56E7E10E22528F5843009, + 9B857FA81F03B08CD2D3FD86, + 077A3193DF1729A50CD6BAAA ); name = messages; sourceTree = ""; }; + 992526B83B6AA618A4FAECEB = { isa = PBXGroup; children = ( + 39A415C7F0B276CA70DB776C, + 1569201BD8D3C5B11D5D2FD2, + E6D2179490CC8B944C5F0490, + 828D645E497C2C183C94F7E9 ); name = timers; sourceTree = ""; }; + 74960C489239E26479FC3353 = { isa = PBXGroup; children = ( + D0580F745B5FA7C55CC699BD, + ADD5EE243F26300074F6985D, + 8E80CEE0879AE2DFFF015D18, + 4470968E9C05E2D29B442D86, + 9D9D90F9ADD70DFE9429241B, + F2F1016A483E9579BA9468A3, + 13673481202EDE76B239CEE0, + 837E290FC585A996F08CA2F9, + 66D654BD054E88BAB4566D31 ); name = broadcasters; sourceTree = ""; }; + 1EFED28CD74DEB447828D5DA = { isa = PBXGroup; children = ( + BB05674B3A28551055EA272B, + F473AC9C072A0F6CF3B5410F, + 46C5E2ABADB469F615EB90B8, + 08D5CCBE3C6F3A79DF8F31DB ); name = interprocess; sourceTree = ""; }; + 14B2798A0A13ED4C8167E772 = { isa = PBXGroup; children = ( + 102C2C7151A2485D81D83665, + BC0F5ADC1455646190DF53CD, + 8AA4C401064C5DB6A174A6D6, + AEBE7CB8237EC8F70BD453A1, + DB919DC376C2084EC9D53949, + CA49D3190379B9B49317D1B3, + A0A1C8CC14E1B7E67CB09BA0, + 14BE1E76E7BB3593A5F66DCC ); name = native; sourceTree = ""; }; + CFFB15BFCDB1E3CD49433A76 = { isa = PBXGroup; children = ( + 18BD4E32214A4F278BF8D8AA, + 992526B83B6AA618A4FAECEB, + 74960C489239E26479FC3353, + 1EFED28CD74DEB447828D5DA, + 14B2798A0A13ED4C8167E772, + 745697E5B9FC6F5C2900BC5E, + A6BC6CF532BFD320530ACA02, + E7EDE9A5CB86AE2A51B6374E ); name = "juce_events"; sourceTree = ""; }; + 886EAA26BF6A55C28C66F470 = { isa = PBXGroup; children = ( + 5C2765698EC312934B1F0950, + BA12F8714DFE5644D33B5DAE, + 317055C93A857F44C3D27FA9, + 016F2C3BF4ACBCAD838DECBB, + E0F00C9557FD2A7CB9549886, + 9574DEA5A2AB9EE4734D894F, + 816EA6330465F31825D3D1F8, + 4BD1CF019C321DFBF9A9F07B, + 6E7B74AF55ABFC7B67596D1E ); name = colour; sourceTree = ""; }; + D927E8E89AAB4F0E35C5DAD4 = { isa = PBXGroup; children = ( + 9DFC26D3FB6B8C54C4041E4E, + 4512885D5FE8D0D1B97F5B5E, + 6271132A4EB371A229E0F850, + 7BD7C5E9B0356421136FC176, + 434B132162DF0859BF634A1F, + DF007C70C1E10E72A7A2738D, + 03D3B46077D043425A39297E ); name = contexts; sourceTree = ""; }; + 4AAE63455EB7C9CE5532BADD = { isa = PBXGroup; children = ( + 6292E2FBFA00FD888B0AD643, + 30AABE02AED3B3101C5479A5, + B45B58B529FCE5BB4CBAD8F3, + 4F46C1E5256B56CCB47F6B0C, + 26B5AD5185787D41EBFE88D6, + 7BF7A6142C529F6276B05F2F, + BCECE8A0AF81FB6C42B6F303, + B15934232CABF088D7354CB4 ); name = images; sourceTree = ""; }; + A42B68E67E6C740D202685CE = { isa = PBXGroup; children = ( + 8A513B7CA34624E9DE76357A, + F295853A2AC5546A35CDCED5, + 90EC9D8B9BD8D8021FB4D1A6 ); name = "image_formats"; sourceTree = ""; }; + 231674197F2BCC887BFD470A = { isa = PBXGroup; children = ( + 45D6EC384101245A52BFC7C9, + F04D054D07EF12A52823240B, + BB9DB4B1017F5498D32DF8EC, + 832666ECB48EC37F211C1914, + 09C1FC99EC009F84182CE869, + A41C0E0888159FCC46534AD5, + D3D502DEA86CB302344116FE, + 9402983C5B800099FB400A1D, + F798B06A61FC4B44C6C01EA9, + BA537A0EE409ABABF9EBB252, + 4117D3D5F5A4EA8EE1A26D8E, + CFD0F7C5DE5A12733CD9957A, + F04BE4C2C649F6647D18F6AC, + 3A657DDA335E0B9B908AD78C, + FEB99894574592A1BDF5F641, + 1A2885CDD0D3E217451E354D ); name = geometry; sourceTree = ""; }; + C56B21D2DBFF1C9AC88CC279 = { isa = PBXGroup; children = ( + A94032CB23BA7145C789D278, + 5BE01D797FA90CF10A159C80, + 1ED8C101D3C5BFB2341E4C4A, + CFD719863CF1011EFA81F196 ); name = placement; sourceTree = ""; }; + 12E297B4914ECEA9B9EA6061 = { isa = PBXGroup; children = ( + D247BFC345A0DB612B76F41D, + 4C032CE140605C6925AA1342, + 7DBD49B53B8E42EC038E7573, + EBD61C331BA6831963109C2B, + 71F7D91D90A00EBAFA3F3D02, + 9615E6CBCD7663954FBA29E9, + 4EE9C81FF2D8DA49E05D7FA8, + 9FC014C7D64F091EDC2BC9E5, + 53F8C022D2C5E2A8FCD9B6CF, + FACBB46867008A02A1D25211 ); name = fonts; sourceTree = ""; }; + 32B604AF57F0620BF5B488E3 = { isa = PBXGroup; children = ( + F80CF2D213A0935D58923424, + DA561F27522DE9111A5C51D1, + 78DDDCFFC0419315B4452F72, + 4B281D82B9678F5426E224C8, + 46A947012061109D90BAE3F2 ); name = effects; sourceTree = ""; }; + 5128462B18D993BA3B2B8791 = { isa = PBXGroup; children = ( + 318B162549E225279A6B2F72, + 146145E806A07EDEE846B275, + 0EFB6C8170D8B8EC5DBB556C, + B16C80CC27648F30442B00C5, + EA624608E04AFFD77F78940D, + BAF3DE6C344B8E81B567B45F, + FF4B3EBFD3AE7EC0C810B7DE, + BD93EBD6B4CAE5B2E2BCA8AD, + 30398D9FF5FCFB5AC75DCD06 ); name = native; sourceTree = ""; }; + 275A14A085BEF8D09F6096EB = { isa = PBXGroup; children = ( + 886EAA26BF6A55C28C66F470, + D927E8E89AAB4F0E35C5DAD4, + 4AAE63455EB7C9CE5532BADD, + A42B68E67E6C740D202685CE, + 231674197F2BCC887BFD470A, + C56B21D2DBFF1C9AC88CC279, + 12E297B4914ECEA9B9EA6061, + 32B604AF57F0620BF5B488E3, + 5128462B18D993BA3B2B8791, + 7BAC8CDBB03C28F977FB0ED0, + B25A6FEC5CE924A74CB4115B, + 8F7922010F37D606E8575CFF ); name = "juce_graphics"; sourceTree = ""; }; + D75691CD20A730F98D348C67 = { isa = PBXGroup; children = ( + 21DFBF9A9F07BA700411D5F7, + 8BC032FB8DE939D0D0A1A26B, + A166489B92757ABEEDD1797C, + 65241C8D1C8D829436C9ED6A, + B32FCFC03FFDEEE88BE3771E, + FC9A979339C621424B365885, + F59059DDA2C04FD5E794EFE6, + 34AE4CA3FE6A40A0AB0A7CDD ); name = components; sourceTree = ""; }; + BC7530F022355C1193F39BF6 = { isa = PBXGroup; children = ( + 6D50316D0D4C4470ADAB4620, + 61C99D0997C9423E21F11081, + 7698D38BE2E6F3FC27DD2374, + 04085D8F3200994387731EF8, + 72D0D11A6F537D4231CBD8C7, + 636E4C829290A221A063E6FF, + DCD1B8825DF37CF0D8A6662A, + 4A320188ADFA2D7F8ED1DD6C, + F4A2A3B5C1E6A746F86DF99D, + 1EF065AD3C8FC0B0A71A2049, + FDCFBC1769E2677A4C1FB499, + 9DEA874D1BC6F5577D52DC6F, + 160FFEC940AEB17780D20A76, + 6259749AEBAC3EA2B6295EDC, + 8B781B6D16247CDE641ED935, + B74A674BB7E7F20CCCF99FE1, + A71BECC7DCC8920B429926D4 ); name = mouse; sourceTree = ""; }; + 62A2A2D5FC4AEC5E9B2A08D3 = { isa = PBXGroup; children = ( + B556E736C67C93F98FA25563, + BC02C49FCD0CC569E489058C, + B726BE2733F591AB486317E0, + 4C2F2945A3607F38E0F0E1C7, + 74688FDDC0F38B4605B01BD7, + D3EDD3EE2339AE024B1F2F03, + DFD6E1B646CC12A5CA392AF0, + C6AC44F0D60CEC4E66937B75, + C95E642FE34FAAE1B1442BDB, + 666A1792A00D45585B6A9FCD, + F71510C1BAB97006CC497CA7, + 1528ED09BA63C1DA24F94999, + 33D0066D66252DC2DF1E22F3 ); name = keyboard; sourceTree = ""; }; + 0EBB8E11453A27C3F58ED4AA = { isa = PBXGroup; children = ( + 957DD13BAC0D75EC74E7AE05, + 4B03672FC7862B671969BC6B, + F02881C1B6BAA501DC0CDC49, + 86623F42AE45EF2606B36340, + 57C9DEFD15787CCF1F5CE891, + 51A3BB945C8A135A0AD3425C, + BABAE34D97FB489D68C1343E, + 357EDCB82CF49E647F334B2A, + E444EF58D2CEDE7B7521304D, + 9EB35B9EE79C5FF6BA3F3536, + 2E6C329EA535E1BF203562DD, + 31AFEAF1FC22CBA783608C0A, + 0410A1D687AE613A8B61EB63, + 158C509BB28C7E122A62FAA4, + 5159477CEB0CB7A1215AA525, + BB8922F7043CE6B876122BE0, + 13BDF0F7764CC3D4074B67E4, + 91173EB7ED42224DB3698EF8, + 9C08EB55874E4BE0B44DAEC7, + 85CBE3D5988E8C512B8890F3, + 19B7FE980E9CA3178CFC1113, + B941B09FC7452C1CD562E0F5, + 785A14FA238FF98DE2CB2BEE, + 1AC7575C469348216A50B3B1, + 19679975D3538CA85ED58D84, + 2A8F7A3F4BBD05A866BF1B3B, + 4F1DEEF8E26644540196A0CB ); name = widgets; sourceTree = ""; }; + 20E50331AE6A8172821C51BF = { isa = PBXGroup; children = ( + 22B42A89E47D9F69C5EB900A, + BC408AAE3055F824757A2389, + F22910CC9D6571D4F14F4809, + 39B8493FF88FB863D8F167E7, + 76A7384DD3891A3E016C34C1, + F5B6B54C49CAB7284D3C9474, + 819E489474D011CBBC35BC18, + 6F6AF9E195C9BCB1852F32CC, + 650FB8EB65D80F872C942DB2, + 0A45E72AF7E6D6CEF760B816, + 7D680DBF5EE00BB592517F84, + 4B4C59C139EC634D75943C28, + 3FE43CA83B4B0DD8E548F640, + 2B9B58BFA279966136DE31CC, + 07DFEBB372B37EA38AE04A74, + 6E53F6134975F13924D2F4ED, + 4F7E64DD6ABA57FA787758CC, + 5988E65AE9A7E2379AD5E701, + 28B8DD67232AC600E86870E0 ); name = windows; sourceTree = ""; }; + 417989D42CDF2E980AB106BC = { isa = PBXGroup; children = ( + ED4367D99976F08C4A762035, + 78E1ABB07ECD6B87BD15419F, + AF0066E39B00BBFF41B9E31E, + 00A312088F38502AED52E493, + 6D955DC7B3615F0D7CBBD824, + DC7636EFC2D7F74590A3145D ); name = menus; sourceTree = ""; }; + DBEAE055F0588BAB5B196422 = { isa = PBXGroup; children = ( + 87E01C5F0C3C505D5A7715D4, + 0D69EABD5D77B27EFFE225B0, + EE29A39229C22454960B7506, + E8DEA810748B2E72180BFE89, + 4117D8F1FA58B89CE1E6A819, + EB5972EC96375A536A6B6372, + 0298BF9CF21311FCC8551409, + 1ADF9687877E32097D0946A1, + 252C764AE47A9491165EE241, + AD822FF2B19590233CBD9CD6, + A6A492677CF909006CD0C089, + 07322122227D60F477C385B7, + F49BF03F5FCBDA0F2A843A50, + 125D3D09DF697987CDCA17D9, + 89E3C466F89469534B49BD8E, + 6C055C78DAC12711B5E55D4A, + 2A8784D3FF39F0F03DD8D424, + D1635A7DC2E314CAB0A792D4, + 304E7C85217C5FAFB431E548, + 925F36479A611E123885F6F1, + 60A12EA9BA6B4B03C784EAA1, + EC9D737E2EBDFECDDD5203B4, + EEFAAF4FA028C91ACA90EFCA, + 59967E0829324843AD80E820, + 532ACF746F7B01030F04E04E, + 7300FA7E2D745B2CBB857587, + DAE5C6BC55AB1473BBF47AF6, + 8876D143471B5A59B990E43C, + 2888577855E95199C2815442, + 931D10A82E3BB277CF8CE02B, + B2B5DF3913740AE3DDBF5BEE, + 386598A251EE72BEFC92CA4F ); name = layout; sourceTree = ""; }; + C2FB56CB33A4C95B1FB863B2 = { isa = PBXGroup; children = ( + 9D33D75ABEEB92C57E10CDDE, + 43F9919FFBA393B7D774D3AD, + 0CE9F0627F914FAC023C84C1, + 0F0D9936574D13527E54FB2F, + 721E5B8F23744B274AF6DC8A, + C330BFC5001E0E244D228ACC, + 71C6E8CCCD7CEAC2141F0F7E, + EA4550661E434A71069CD98B, + D768ECB5744AACF671F0A922, + 58BF1D9C4E59BB7DE2869451, + 23C674678AC1CC3FBD38158B, + E5E19A2B9DB533DC1105DDE1, + 57D7466A89007733E123D649, + 4C5EB95260490D9CBF4AB3AD, + F616987A14134A5205FA3C93, + 341EA8D97DE1F88000AA4102, + 315CC4C271BE113416DB9AEB, + FAA30E21A2DFBA5E2A6293DD ); name = buttons; sourceTree = ""; }; + DA1E5F1BC7BF7988F4573363 = { isa = PBXGroup; children = ( + D44EF7D2926C65117DE73CE7, + 906833D0DAF383E12394881D, + 3E96C087E458528AAF408A76, + E5F22FB1B25A5C2B7047FE71, + BDDAABF14F39655B08B1B71C, + 218CB88DB998D989571B80F5, + C4877EC2839EEB91F2E233E0, + 533E934012AAA78308193DD6, + A18C34CA7CE3A053B1698F6D, + 275861400C16EB76E0210168, + 386EA4F6AB8F80B15CE5298D, + 753A8CB65C9A714404EDF49B, + 6036172A80B57EB2D3E4A54A, + 1429212A876F9C87312A4F80 ); name = positioning; sourceTree = ""; }; + 457E31E7E8125FD947EEC552 = { isa = PBXGroup; children = ( + BBB92F46800D9CC7686DC722, + 01A43087F198C2E98B1DEA8B, + 3F984FEDAF87B09977B48341, + A664AAC322B90D19859A313E, + 678566B2C3B73C772BB9164F, + 52BB608C6FE34BCE4356FC85, + B4DCF2F061BB9A38BE566783, + 2EC883B0097BBE58F4316509, + 875B9E01FECBA25EF0D3BD4E, + EF906EFE2902A6D13D16CA6D, + 3E0D7BE84D46270BBB219BED, + 9B1A33D28D540C8930EF374C, + 18ADE4543BE35BE6A1358DC1, + 74D39FD4DDD5F3B164068383, + 1129CCE158C42F7EB9D15EAB ); name = drawables; sourceTree = ""; }; + A937AE2A62421C42EFA73169 = { isa = PBXGroup; children = ( + EF2A13D1D56E66F2380A14A4, + 2FC7534F28212AD3432F198D, + 4FA01DFB85FD6557973724BD, + 2D8F9D1102C218D6566166C8, + 50DD566ED7BE0F37E75C9BE9, + EB49AC8FC0D75AAB3AB61247, + F8EFE58EB0A0717E9D4C56AF, + A6665D33BB511A6334C9D6B1, + 03A9258AE7F888568C7C9556, + A94F5351B00010B029AEA900, + FBABAE5B8BF0BEF650DE7C55, + F14637DF41A6CABF1C4E5F07, + 7730DD3D7D92A62EB00360CA, + 4764B28407D095ECE3D4F0F0 ); name = properties; sourceTree = ""; }; + F447EB20815A8C34EFC34B99 = { isa = PBXGroup; children = ( + 31EF823023468D88FB79F4D1, + 2B33301B7A93A933080C55E8 ); name = lookandfeel; sourceTree = ""; }; + EDCB64EA4D91A6ED5A9BEA61 = { isa = PBXGroup; children = ( + F34BF1E2FC449D291A603E26, + 97C0EA37F0B02153E15E1C41, + D21866C081471271262CEA91, + 6EBB5DF37B85BF95CF52B345, + 28D4F07D17345668E5176077, + FE330427ED50EDD623EB23ED, + 259D7D0595C0884071631177, + 11CBD7F342D5AEA2A28F25BB, + B58366BB45023A4DFF4E2729, + C02C54CA659982168A3DA559, + 463A5AAF4475138358F33D49, + 899565C0BB30D7F665CB0759, + 42D5D18DF276649436FCD8A9, + EA8F4E36A736A7ACBE50E307, + 1673E3871DBE9F2FB7DBE3B1, + B414FEB69B5170A75C11AF3C, + B7824E6E95017F7EFB40D99C, + 9E6AAA1263EB185A3DF573F9, + C50EE6C1529D9ACECECF4BFA, + 0C0CF8EB15BEFA1506E02346, + 0F4C6034BA96461D0F55192C, + FC650A498B80DA2D371E1B65, + 0966BA1C60A92B13B00A640C, + AD4F8563AD20CBB3C6A83D17, + 646726910F110DC34DD16624, + B7670AB1249130ABAC7C218D ); name = filebrowser; sourceTree = ""; }; + E44B2760A86D93D7D00C0D5C = { isa = PBXGroup; children = ( + C694BC417280863AE4D39EFB, + BBAB968F9121F68558521DCA, + 86894E5298BC74E0A5A76CBF, + B6CFBB932327A69E662394D5, + 245DF52050624E7484F7AB0E, + 0B4131BEAF180FE12BE0EC1D, + 74E0B2E02A9DE61FE68B302B, + C29483AE9B4B373AB61F96FE, + 64D52BCF3A76B77DD460E828 ); name = commands; sourceTree = ""; }; + AF5E701D63A666727A1459E1 = { isa = PBXGroup; children = ( + A22A0F77C15B1E4A8F2EB42A, + 03291953F0A7EA46599E27BA, + 675CF5A698D26696BDEAF63B, + 0CC77A3F0CB84C6F69010E4F ); name = misc; sourceTree = ""; }; + 19ADD8D09971064A184F21F7 = { isa = PBXGroup; children = ( + 16EC56A5CDBC5F16FC4C8285, + E39B85578A65D8AC3AFB5359, + 44D4EA9123BE3D4AE300D6A8 ); name = application; sourceTree = ""; }; + B420ED25F21C01702C4FC5BD = { isa = PBXGroup; children = ( + 0B450A0637CE15A8109CA8D8, + F3CA93056129CB247F785CC5, + 10DCDF26CC11D23E4B4DDAAC, + B33ADAF0AC6FDCF1A0063FC0, + 45C21B1D7974B511B5D8238C, + 1382F08B07556349998BB8C0, + 63CA10DBB1A74BA1607FAD82, + 64D65422A7225B3D72E7A496, + 29B0908C4C33199137F0491A, + 3B24A00E252DF726871BD9AF, + 43E37D69DDAA502AFA8BA261, + D3B106A417ACE152E58FDC1E, + 90FCB6449379AB0909975E1E, + D2CFBB7AC0BAFAFAA6751D19, + 1623AAAEAF424A0F60773CD1 ); name = native; sourceTree = ""; }; + 943CDA6805B340137E3361E5 = { isa = PBXGroup; children = ( + D75691CD20A730F98D348C67, + BC7530F022355C1193F39BF6, + 62A2A2D5FC4AEC5E9B2A08D3, + 0EBB8E11453A27C3F58ED4AA, + 20E50331AE6A8172821C51BF, + 417989D42CDF2E980AB106BC, + DBEAE055F0588BAB5B196422, + C2FB56CB33A4C95B1FB863B2, + DA1E5F1BC7BF7988F4573363, + 457E31E7E8125FD947EEC552, + A937AE2A62421C42EFA73169, + F447EB20815A8C34EFC34B99, + EDCB64EA4D91A6ED5A9BEA61, + E44B2760A86D93D7D00C0D5C, + AF5E701D63A666727A1459E1, + 19ADD8D09971064A184F21F7, + B420ED25F21C01702C4FC5BD, + D0870A67BE1EB60CB9FBA4DE, + 0E794371947E5788DD46B75F, + A8D9C3146BF302A9447EFA4B ); name = "juce_gui_basics"; sourceTree = ""; }; + BFD871FE61E5B27BB4F4786E = { isa = PBXGroup; children = ( + 907B34009F560364A06CFACB, + B1E0CFAA538C9AC90DAD1BCF, + A4586F239DDB0818BD663A75, + 2DC28842D2035FD3011CB244, + E090958A449D1CE1A2505489, + 91EB08AA83A03C660E30330B, + 275E0F2F62853F848D66BFE9 ); name = "code_editor"; sourceTree = ""; }; + 422935C135121BA5B08E8533 = { isa = PBXGroup; children = ( + 25345D02590F3010D45BBA79, + 108D2AA33FCC91E371373136 ); name = documents; sourceTree = ""; }; + 5642CC7FA2C5E93476C6359C = { isa = PBXGroup; children = ( + E675C4766D40F4775B12DAEE, + BB7ECA69EA3615079A5CC7FF, + 56D6A24F8C8CE5BB260747EA ); name = embedding; sourceTree = ""; }; + C0B91A350ABA25BC12ECFCAC = { isa = PBXGroup; children = ( + E38C84F1CA0395D90AAB8F39, + 92BBEA7FFC755C09C6BDBA1C ); name = lookandfeel; sourceTree = ""; }; + C19526D310B2F45CAAB6DB91 = { isa = PBXGroup; children = ( + 47429AD00D7DD1C032221A04, + 629DD320F510C0E72D8329A6, + A954117BD23649B7D04AF495, + B86C51D49282B2019282427B, + 7BA069D3248465E6C8B574F6, + 34A5E2A5CE14C84BF0EDE04F, + 3A60A08F543577FCB7099980, + F28236F49C2AD7498BFA92BC, + 04D9FFF3AB0DB3F13C2FABB3, + 56CB267A0B8D4D689CFE6117, + AB88C05D2E8F1D324FFDFB12, + ADF21EBFC5A12405199AE3AF, + E608709E6D37C05C79C82BAA, + 5FBB378E931B79815371777C, + C10B760B6709F1499FF6BCD6, + 795F44454F46DE2ED449281C ); name = misc; sourceTree = ""; }; + 1C53EA90FDC62E2DFAB4903C = { isa = PBXGroup; children = ( + E523C7F6322C61015D253248, + 74A56782B0A15E7CF8D6106C, + 3F509E66EC07AA38CCA9D4B1, + 42C393CF5CA1CAF818F489AD, + C3E8615F8A3B49C5AB13996E, + CD034FAC1F6642AFC825F1B8, + 61BC57220B291F07975F8327, + 941AB31F246223CF51A61C2A, + FC8B040D4CDE68FA76909F35, + 244B051B90411E39C2C89951, + 25D89D6A16AACDC76F6CAD41, + 38B48B2A977AB0A7E3942E1F ); name = native; sourceTree = ""; }; + FE04EA12E4AC062315178AAE = { isa = PBXGroup; children = ( + BFD871FE61E5B27BB4F4786E, + 422935C135121BA5B08E8533, + 5642CC7FA2C5E93476C6359C, + C0B91A350ABA25BC12ECFCAC, + C19526D310B2F45CAAB6DB91, + 1C53EA90FDC62E2DFAB4903C, + 34004879B374026E0643E68E, + 40AD2B86322D5B5FCC1CC4CF, + 5C3A0BA51AAE7DD8D6CAD2E3 ); name = "juce_gui_extra"; sourceTree = ""; }; + 2C97D53E99820E6C838B5584 = { isa = PBXGroup; children = ( + B5358D16656467170D282294, + 02D83119882E6653FE048ABD, + 0AD446688253CC6A00796DDB, + E20F6669D371D3117AAC4E3A ); name = opengl; sourceTree = ""; }; + 9D364C0153DE35BED2852412 = { isa = PBXGroup; children = ( + 72684D6622FF1ED0AA24617B, + 06834B927627974AA432F0BE, + D00B57EAB21529CDDE562EB8, + 8CECEC8C4DDC4202687296E8, + 566EF6830B8C89628600B442 ); name = native; sourceTree = ""; }; + F7989B1309F36592198D9DC7 = { isa = PBXGroup; children = ( + 2C97D53E99820E6C838B5584, + 9D364C0153DE35BED2852412, + 7D01A20583EEC6FC8E546C88, + A7F83971A90DF8814260E5ED, + A4B0BF514DD159FA178CD7CA ); name = "juce_opengl"; sourceTree = ""; }; + 5F8E586747C962B0AE2FB8F9 = { isa = PBXGroup; children = ( + DB2139647EE3F1AE5BB19DE9, + 5465D12B7F9392B869A95804 ); name = playback; sourceTree = ""; }; + 61C7EC143642CBAB07E80C1E = { isa = PBXGroup; children = ( + 2FB8BBB85D16CB310D929055 ); name = capture; sourceTree = ""; }; + 95E97099741E5C76AAA20F8C = { isa = PBXGroup; children = ( + 4749A473B1FACC29194BD3FD, + 669E960D94D0A0F83377E0F3, + A348A34F99B5A389F8672EAD, + 8940D98F63D8F3C20F9A2DC5, + 6BC6BDC746F930957AA11C85, + 366C11EF05AEFA6C28538657 ); name = native; sourceTree = ""; }; + D47121CB5F50B89CF5912B0D = { isa = PBXGroup; children = ( + 5F8E586747C962B0AE2FB8F9, + 61C7EC143642CBAB07E80C1E, + 95E97099741E5C76AAA20F8C, + 2C7081EDAC929A7BF4734429, + 96CFEDBCD721085272D356BB, + 98882C3BABCEB656AE4C01E7 ); name = "juce_video"; sourceTree = ""; }; + E748964600D5974B5A9420BD = { isa = PBXGroup; children = ( + 5B973550D06E604519804027, + 05F110AAB3B630BA3BD1A433, + A76991807D8E35581C923B97, + A561F27522DE9111A5C51D16, + 5C3AFE6B5BC0AB880F07F334, + 6DE28C538A518C3CFE8304D8, + 31E056CB0123A28567B7DFBB, + CFFB15BFCDB1E3CD49433A76, + 275A14A085BEF8D09F6096EB, + 943CDA6805B340137E3361E5, + FE04EA12E4AC062315178AAE, + F7989B1309F36592198D9DC7, + D47121CB5F50B89CF5912B0D ); name = "Juce Modules"; sourceTree = ""; }; 5EB8B2B0AB17B68CF7A2B2F5 = { isa = PBXGroup; children = ( E0C1FD5EE3068D41ED2D4DD5, - A84DC40BF5D1B2A14239B035, - BC9F16AE41ED85BFA2090081, - 06C5EFA95DD808E386ED84D1, - 4FECB7A56AC38B066AC01710, - 980380A077AFFE293EB49B50 ); name = "Juce Library Code"; sourceTree = ""; }; + 6E0C95E241AF58A99B7B2635, + B4E00BAAC4CBA159D4DE0970, + BC305F9F762285BEC39F9DE7, + 6E6B5C42862ABF4C019C71C7, + BE986BF0765764F0F132F4E8, + 67F58C67E6D1C9A54D03755F, + B86316062F2F86341A59A955, + 5F8C98DD0F438205283C35B7, + 180055DCD4BF80628DB44BF9, + FA8BC7B8181DC10BD967884A, + 1EF2FA9E44B87C5CB88EDEE4, + 0BC3C3DC3DBCB02DB60DD879, + AE1CF40759633D5CDB35874F, + A84DC40BF5D1B2A14239B035 ); name = "Juce Library Code"; sourceTree = ""; }; 132622950074EBC9C8B6B717 = { isa = PBXGroup; children = ( 1C2637C4F538B137DDC54D95 ); name = Resources; sourceTree = ""; }; 26D5E869E6FD8DB238036278 = { isa = PBXGroup; children = ( @@ -98,6 +1852,7 @@ 3B43D9C2C41077380D379A07 ); name = Products; sourceTree = ""; }; 28930A4F8D67AE433D31A53C = { isa = PBXGroup; children = ( E1B7497DFD48F160861E53A2, + E748964600D5974B5A9420BD, 5EB8B2B0AB17B68CF7A2B2F5, 132622950074EBC9C8B6B717, 26D5E869E6FD8DB238036278, @@ -177,10 +1932,19 @@ 6DADD6A4866E2583BD197095, 938109D82261C12EF5CC7E4F, 2244CCA11963FDB0EC21C056, - 249BFEAFDA801A30A9FE28AC, - 30210E40B65CE048C4D36CA7, - 4CB81ED19217B750FEB8A0B2, - 484E2E726ED27E58288DE4BD ); runOnlyForDeploymentPostprocessing = 0; }; + B6D2C7B8E4C65803F3B6DBF7, + 6F7AA830B10FA808CF53D0B4, + 70654197FC359BC35AFDFB44, + 966009645D8826F1CCB6F552, + 38909F303A2016E503002E43, + 9E5F85BFBE32CE6FF99858EE, + F8E9B92AB07D9774789F1DF5, + C2EB81CA9554607B833AB3C7, + A3C45828BFC0B7A0782234F4, + 7442A960779EC22B838128FA, + 7C007B27FD93094A7153EA85, + 60C3231681423D099EE852B1, + C2AFAFACC27AE22C266F8AEE ); runOnlyForDeploymentPostprocessing = 0; }; 30E98A3D15EFB4DAAD89D12D = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 48371E4CE630812E31DF1C28, F653CD6DB1550002BFB3EE47, diff --git a/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj b/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj index 2b7152b184..4161e95a47 100644 --- a/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj +++ b/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj @@ -138,13 +138,4185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj b/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj index 1ade74cb95..0d9608d78c 100644 --- a/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj +++ b/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj @@ -138,13 +138,4185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/audio plugin host/JuceLibraryCode/AppConfig.h b/extras/audio plugin host/JuceLibraryCode/AppConfig.h index 04e774c5be..2702e1f51a 100644 --- a/extras/audio plugin host/JuceLibraryCode/AppConfig.h +++ b/extras/audio plugin host/JuceLibraryCode/AppConfig.h @@ -3,39 +3,66 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h + Any commented-out settings will assume their default values. */ -//#define JUCE_FORCE_DEBUG -//#define JUCE_LOG_ASSERTIONS +//============================================================================== +// juce_audio_devices flags: + //#define JUCE_ASIO #define JUCE_WASAPI 1 #define JUCE_DIRECTSOUND 1 -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION #define JUCE_ALSA 1 -#define JUCE_QUICKTIME 0 -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D +//#define JUCE_JACK +#define JUCE_USE_CDREADER 0 +#define JUCE_USE_CDBURNER 0 + +//============================================================================== +// juce_audio_formats flags: + #define JUCE_USE_FLAC 0 #define JUCE_USE_OGGVORBIS 0 -#define JUCE_USE_CDBURNER 0 -#define JUCE_USE_CDREADER 0 -#define JUCE_USE_CAMERA 0 + +//============================================================================== +// juce_audio_processors flags: + +#define JUCE_PLUGINHOST_VST 1 +#define JUCE_PLUGINHOST_AU 1 + +//============================================================================== +// juce_core flags: + +//#define JUCE_FORCE_DEBUG +//#define JUCE_LOG_ASSERTIONS +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +//#define JUCE_USE_COREIMAGE_LOADER + +//============================================================================== +// juce_gui_basics flags: + //#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA //#define JUCE_USE_XSHM //#define JUCE_USE_XRENDER //#define JUCE_USE_XCURSOR -#define JUCE_PLUGINHOST_VST 1 -#define JUCE_PLUGINHOST_AU 1 -//#define JUCE_ONLY_BUILD_CORE_LIBRARY + +//============================================================================== +// juce_gui_extra flags: + #define JUCE_WEB_BROWSER 0 -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS + +//============================================================================== +// juce_video flags: + +//#define JUCE_DIRECTSHOW +//#define JUCE_MEDIAFOUNDATION +#define JUCE_QUICKTIME 0 +#define JUCE_USE_CAMERA 0 diff --git a/extras/audio plugin host/JuceLibraryCode/JuceHeader.h b/extras/audio plugin host/JuceLibraryCode/JuceHeader.h index 4ad0d4c5f1..4a7c0085d6 100644 --- a/extras/audio plugin host/JuceLibraryCode/JuceHeader.h +++ b/extras/audio plugin host/JuceLibraryCode/JuceHeader.h @@ -4,8 +4,8 @@ project - if you alter its contents, your changes may be overwritten! This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration options for your app. */ @@ -14,7 +14,25 @@ #define __APPHEADERFILE_NTE0XB0IJ__ #include "AppConfig.h" -#include "../../../juce_amalgamated.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_cryptography/juce_cryptography.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" +#include "../../../modules/juce_opengl/juce_opengl.h" +#include "../../../modules/juce_video/juce_video.h" + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif namespace ProjectInfo { diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.cpp b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.cpp deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.mm b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.mm deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode1.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.cpp b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.cpp deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.mm b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.mm deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode2.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.cpp b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.cpp deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.mm b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.mm deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode3.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.cpp b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.cpp deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.mm b/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.mm deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/audio plugin host/JuceLibraryCode/JuceLibraryCode4.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/ReadMe.txt b/extras/audio plugin host/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.cpp new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.mm new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_devices_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.cpp new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.mm new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_formats_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.cpp new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.mm new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_audio_processors_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.cpp new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.mm new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_cryptography_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.cpp new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.mm new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_opengl_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.cpp b/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.cpp new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.mm b/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.mm new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/audio plugin host/JuceLibraryCode/juce_video_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/audio plugin host/Plugin Host.jucer b/extras/audio plugin host/Plugin Host.jucer index 6866a0b8a8..073ee49e17 100644 --- a/extras/audio plugin host/Plugin Host.jucer +++ b/extras/audio plugin host/Plugin Host.jucer @@ -46,15 +46,24 @@ - + + + + + + + + + + + + + + + + + diff --git a/extras/audio plugin host/Source/HostStartup.cpp b/extras/audio plugin host/Source/HostStartup.cpp index b52700574c..49d83bacf3 100644 --- a/extras/audio plugin host/Source/HostStartup.cpp +++ b/extras/audio plugin host/Source/HostStartup.cpp @@ -28,7 +28,7 @@ #include "InternalFilters.h" #if ! (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_AU) - #error "If you're building the audio plugin host, you probably want to enable VST and/or AU support in juce_Config.h" + #error "If you're building the audio plugin host, you probably want to enable VST and/or AU support" #endif diff --git a/extras/audio plugin host/Source/MainHostWindow.cpp b/extras/audio plugin host/Source/MainHostWindow.cpp index 7844dc4267..76d1382119 100644 --- a/extras/audio plugin host/Source/MainHostWindow.cpp +++ b/extras/audio plugin host/Source/MainHostWindow.cpp @@ -79,13 +79,11 @@ MainHostWindow::MainHostWindow() : DocumentWindow (JUCEApplication::getInstance()->getApplicationName(), Colours::lightgrey, DocumentWindow::allButtons) { - XmlElement* const savedAudioState = appProperties->getUserSettings() - ->getXmlValue ("audioDeviceState"); + ScopedPointer savedAudioState (appProperties->getUserSettings() + ->getXmlValue ("audioDeviceState")); deviceManager.initialise (256, 256, savedAudioState, true); - delete savedAudioState; - setResizable (true, false); setResizeLimits (500, 400, 10000, 10000); centreWithSize (800, 600); @@ -113,22 +111,22 @@ MainHostWindow::MainHostWindow() Process::setPriority (Process::HighPriority); -#if JUCE_MAC + #if JUCE_MAC setMacMainMenu (this); -#else + #else setMenuBar (this); -#endif + #endif } MainHostWindow::~MainHostWindow() { delete PluginListWindow::currentPluginListWindow; -#if JUCE_MAC + #if JUCE_MAC setMacMainMenu (0); -#else + #else setMenuBar (0); -#endif + #endif knownPluginList.removeChangeListener (this); @@ -159,14 +157,11 @@ void MainHostWindow::changeListenerCallback (ChangeBroadcaster*) // save the plugin list every time it gets chnaged, so that if we're scanning // and it crashes, we've still saved the previous ones - XmlElement* const savedPluginList = knownPluginList.createXml(); + ScopedPointer savedPluginList (knownPluginList.createXml()); if (savedPluginList != 0) { appProperties->getUserSettings()->setValue ("pluginList", savedPluginList); - - delete savedPluginList; - appProperties->saveIfNeeded(); } } @@ -438,12 +433,9 @@ void MainHostWindow::showAudioSettings() Colours::azure, true); - XmlElement* const audioState = deviceManager.createStateXml(); + ScopedPointer audioState (deviceManager.createStateXml()); appProperties->getUserSettings()->setValue ("audioDeviceState", audioState); - - delete audioState; - appProperties->getUserSettings()->saveIfNeeded(); GraphDocumentComponent* const graphEditor = getGraphEditor(); diff --git a/extras/audio plugins/demo/Builds/Linux/Makefile b/extras/audio plugins/demo/Builds/Linux/Makefile deleted file mode 100644 index 4cf918fc24..0000000000 --- a/extras/audio plugins/demo/Builds/Linux/Makefile +++ /dev/null @@ -1,104 +0,0 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! - -ifndef CONFIG - CONFIG=Debug -endif - -ifeq ($(TARGET_ARCH),) - TARGET_ARCH := -march=native -endif - -# (this disables dependency generation if multiple architectures are set) -DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) - -ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" - TARGET := JuceDemoPlugin.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) -endif - -ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os - CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound - LDDEPS := - RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "~/SDKs/vstsdk2.4" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" - TARGET := JuceDemoPlugin.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) -endif - -OBJECTS := \ - $(OBJDIR)/PluginProcessor_a059e380.o \ - $(OBJDIR)/PluginEditor_94d4fb09.o \ - $(OBJDIR)/juce_VST_Wrapper_812bffb1.o \ - $(OBJDIR)/JuceLibraryCode1_682c927f.o \ - $(OBJDIR)/JuceLibraryCode2_683aaa00.o \ - $(OBJDIR)/JuceLibraryCode3_6848c181.o \ - $(OBJDIR)/JuceLibraryCode4_6856d902.o \ - -.PHONY: clean - -$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) - @echo Linking JuceDemoPlugin - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) - @$(BLDCMD) - -clean: - @echo Cleaning JuceDemoPlugin - -@rm -f $(OUTDIR)/$(TARGET) - -@rm -rf $(OBJDIR)/* - -@rm -rf $(OBJDIR) - -$(OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling PluginProcessor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling PluginEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_VST_Wrapper_812bffb1.o: ../../../../../src/audio/plugin_client/VST/juce_VST_Wrapper.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling juce_VST_Wrapper.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/JuceLibraryCode1_682c927f.o: ../../JuceLibraryCode/JuceLibraryCode1.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode1.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/JuceLibraryCode2_683aaa00.o: ../../JuceLibraryCode/JuceLibraryCode2.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode2.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/JuceLibraryCode3_6848c181.o: ../../JuceLibraryCode/JuceLibraryCode3.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode3.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/JuceLibraryCode4_6856d902.o: ../../JuceLibraryCode/JuceLibraryCode4.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode4.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - --include $(OBJECTS:%.o=%.d) diff --git a/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj deleted file mode 100644 index 14c7566519..0000000000 --- a/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,370 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - - AC674433358C3691C8AC20AF = { isa = PBXBuildFile; fileRef = E226D5DEE103B1E298BD6E3E; }; - 5B83F34400A1B5844680E1CE = { isa = PBXBuildFile; fileRef = DBC6733A66786D64D63E7016; }; - 449473E31270237B0FFEBE72 = { isa = PBXBuildFile; fileRef = D036C01DC0E376205ABAA0CE; }; - 0860A8808F16C84CE7641D04 = { isa = PBXBuildFile; fileRef = 91F0411829B13595887CE52A; }; - EF358E6194DB7EE60A1CE13D = { isa = PBXBuildFile; fileRef = 41FDE3A9AC13B3D1F230088E; }; - E504A4E425435E78197183F3 = { isa = PBXBuildFile; fileRef = 2307ABAB0264959E640E9E37; }; - 53E2C1531CB485CCDD230774 = { isa = PBXBuildFile; fileRef = 88C8229131104E50F4F0D137; }; - B9C31FD116F29E7E4752EB90 = { isa = PBXBuildFile; fileRef = 423550EB3CF502541882C50E; }; - AFB1D55C5DA4C99D90DF3A6A = { isa = PBXBuildFile; fileRef = A2A2E49121DBB7C395E2420A; }; - 370C0F92C3CC1B6C563A7A94 = { isa = PBXBuildFile; fileRef = FBA2E307398FFC8A2693C933; }; - 205AA28314AC784F2CF1FA98 = { isa = PBXBuildFile; fileRef = B4F88060202011416CB3278B; }; - 68746D242F6A6102FDD5D03D = { isa = PBXBuildFile; fileRef = B050085463EEB5F8367314CB; }; - CBE9E6042991B0677E3136D2 = { isa = PBXBuildFile; fileRef = 678CC9E413A7CF979964CEF7; }; - 73B8F48633153DA5A10873E8 = { isa = PBXBuildFile; fileRef = 01A30B0A0B9B5064D9B75474; }; - 5AF66C048A4815F5A8ECDDCD = { isa = PBXBuildFile; fileRef = B50846B34831C2C28007BE7D; }; - 209FB8C7F7BE85A70E5D98D7 = { isa = PBXBuildFile; fileRef = 2C001306D198F8B21ABA7375; }; - 3DFA294CC79D06F066723396 = { isa = PBXBuildFile; fileRef = 94A977DEE6BE2081CA0213FE; }; - 7C5B1DFA35A2EA8DFB2A40C9 = { isa = PBXBuildFile; fileRef = 00E2C89A148A2491288DF242; }; - 6FC7ABF9C15FE51D4073E3D2 = { isa = PBXBuildFile; fileRef = 4751785A8DF8E6DA39550E63; }; - CC35AB7C8D157D7211320179 = { isa = PBXBuildFile; fileRef = 3EF0D861DF9DE96DDAAE0951; }; - B7D2D2868983939B35532885 = { isa = PBXBuildFile; fileRef = 6C254919C15224D13FE6D174; settings = {COMPILER_FLAGS = "-w"; }; }; - 3723101DD64447FE9A530323 = { isa = PBXBuildFile; fileRef = 38E2002644D5BBC2E88ACB70; settings = {COMPILER_FLAGS = "-w"; }; }; - EBBDC594F4DF0EF42E017C64 = { isa = PBXBuildFile; fileRef = 616DF8861CA45D7FFE92CA35; settings = {COMPILER_FLAGS = "-w"; }; }; - 421AB531BFA2C9EB93522748 = { isa = PBXBuildFile; fileRef = 35B676123569917443C05786; settings = {COMPILER_FLAGS = "-w"; }; }; - E5299A6C25F9C4AE26DABAC0 = { isa = PBXBuildFile; fileRef = 3008852179AEC3110ABEFC5F; settings = {COMPILER_FLAGS = "-w"; }; }; - A7805EAF6FC58E9A857D98EA = { isa = PBXBuildFile; fileRef = 6C9B2F471F11EC467FDB06D0; settings = {COMPILER_FLAGS = "-w"; }; }; - B24CA5BEF488268AB502C0AC = { isa = PBXBuildFile; fileRef = 17ABF2F862D57C89FE85C307; settings = {COMPILER_FLAGS = "-w"; }; }; - 81795588AD3A427D43E3165C = { isa = PBXBuildFile; fileRef = E9F52DE288413A752B295F84; settings = {COMPILER_FLAGS = "-w"; }; }; - 07EDB68D178C5C7635F58468 = { isa = PBXBuildFile; fileRef = A272B6DB3C84B9D91BF0F060; settings = {COMPILER_FLAGS = "-w"; }; }; - AEF69B599D0CEC30C1BC8C0C = { isa = PBXBuildFile; fileRef = BA712F15F8C80BF55297EA44; settings = {COMPILER_FLAGS = "-w"; }; }; - 8B45F20F3F352BB3B35F6EB7 = { isa = PBXBuildFile; fileRef = 6381E6023EA29B5BC90F0F11; settings = {COMPILER_FLAGS = "-w"; }; }; - 3FA5946913264BF87C308F89 = { isa = PBXBuildFile; fileRef = F17E1C506A2CB31650AC64A1; settings = {COMPILER_FLAGS = "-w"; }; }; - BAF7CD5DAFBAB29BEF0DCAE3 = { isa = PBXBuildFile; fileRef = 4BA3B7415620D5A6A3DD6076; settings = {COMPILER_FLAGS = "-w"; }; }; - F51222976BFE5611E7FC656F = { isa = PBXBuildFile; fileRef = A9C716DF2B9CC6D95877A448; settings = {COMPILER_FLAGS = "-w"; }; }; - 84D075FA78547C8D3AC4EA1A = { isa = PBXBuildFile; fileRef = 51DAC3E29FE8A76EF638C26E; settings = {COMPILER_FLAGS = "-w"; }; }; - CE625DD4D4B118F4718F2DCC = { isa = PBXBuildFile; fileRef = 71A86FA30C6E11992FD52782; settings = {COMPILER_FLAGS = "-w"; }; }; - 60FEDB4F5859871946389F21 = { isa = PBXBuildFile; fileRef = F7A8C106BF631AFADA24F8EE; settings = {COMPILER_FLAGS = "-w"; }; }; - F9290B46763F4865ED3C362D = { isa = PBXBuildFile; fileRef = 8C28A1A8AF5FFC61D88246A9; settings = {COMPILER_FLAGS = "-w"; }; }; - A2718BCD8261456359155ABE = { isa = PBXBuildFile; fileRef = 634B4CFC4268E257C63FA337; settings = {COMPILER_FLAGS = "-w"; }; }; - 4BB4B93E0E58FC0D5FE82292 = { isa = PBXBuildFile; fileRef = 6EC9B05A43174FFF25BA3382; settings = {COMPILER_FLAGS = "-w"; }; }; - EE224227E577BA498E98DC9A = { isa = PBXBuildFile; fileRef = 257FA3A7290842556A7377A4; settings = {COMPILER_FLAGS = "-w"; }; }; - F0BEF1392277DBDC409A06A3 = { isa = PBXBuildFile; fileRef = 55D565AF7527BA71D7ADC2D4; settings = {COMPILER_FLAGS = "-w"; }; }; - 99CB24952ADDDFA320CB3B23 = { isa = PBXBuildFile; fileRef = 21CE5C9490494A2139D61408; }; - 9551342606A895BB5BA07F2E = { isa = PBXBuildFile; fileRef = 6AE52580AD24BD551DB99758; }; - A1E844C7D2636CC38585B429 = { isa = PBXBuildFile; fileRef = B31CFE8BBA103078E19D1B97; }; - BD7E5458BE2F33DBBF5AF834 = { isa = PBXBuildFile; fileRef = FD33B687C6FBA3ABC581AFD7; }; - E226D5DEE103B1E298BD6E3E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - DBC6733A66786D64D63E7016 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; - D036C01DC0E376205ABAA0CE = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - 91F0411829B13595887CE52A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 41FDE3A9AC13B3D1F230088E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 2307ABAB0264959E640E9E37 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - 88C8229131104E50F4F0D137 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 423550EB3CF502541882C50E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - A2A2E49121DBB7C395E2420A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - FBA2E307398FFC8A2693C933 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - B4F88060202011416CB3278B = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; - B050085463EEB5F8367314CB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 678CC9E413A7CF979964CEF7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; - 01A30B0A0B9B5064D9B75474 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - AF721FB8136D2CAA9404AD8D = { isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 81567EBA449466A95492511B = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; }; - B50846B34831C2C28007BE7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginProcessor.cpp; path = ../../Source/PluginProcessor.cpp; sourceTree = "SOURCE_ROOT"; }; - CF304FBE4BC66783833C4B59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginProcessor.h; path = ../../Source/PluginProcessor.h; sourceTree = "SOURCE_ROOT"; }; - 2C001306D198F8B21ABA7375 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginEditor.cpp; path = ../../Source/PluginEditor.cpp; sourceTree = "SOURCE_ROOT"; }; - 662507104D05B579BB68F391 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginEditor.h; path = ../../Source/PluginEditor.h; sourceTree = "SOURCE_ROOT"; }; - 94A977DEE6BE2081CA0213FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../../../../src/audio/plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 00E2C89A148A2491288DF242 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper.mm"; path = "../../../../../src/audio/plugin_client/VST/juce_VST_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 4751785A8DF8E6DA39550E63 = { isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_AU_Resources.r"; path = "../../../../../src/audio/plugin_client/AU/juce_AU_Resources.r"; sourceTree = "SOURCE_ROOT"; }; - 3EF0D861DF9DE96DDAAE0951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper.mm"; path = "../../../../../src/audio/plugin_client/AU/juce_AU_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; - 70DC3C63DDDFB1C5A22A8C36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = Extras/CoreAudio/PublicUtility/CADebugMacros.h; sourceTree = "DEVELOPER_DIR"; }; - 6C254919C15224D13FE6D174 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = Extras/CoreAudio/PublicUtility/CAAUParameter.cpp; sourceTree = "DEVELOPER_DIR"; }; - AEDBCF2FF9E1FBD5B9958FB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = Extras/CoreAudio/PublicUtility/CAAUParameter.h; sourceTree = "DEVELOPER_DIR"; }; - 38E2002644D5BBC2E88ACB70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = Extras/CoreAudio/PublicUtility/CAAudioChannelLayout.cpp; sourceTree = "DEVELOPER_DIR"; }; - 248B812009870EC9531D3269 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAudioChannelLayout.h; path = Extras/CoreAudio/PublicUtility/CAAudioChannelLayout.h; sourceTree = "DEVELOPER_DIR"; }; - 616DF8861CA45D7FFE92CA35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAMutex.cpp; path = Extras/CoreAudio/PublicUtility/CAMutex.cpp; sourceTree = "DEVELOPER_DIR"; }; - 52F3077A4F38B60682CD77B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMutex.h; path = Extras/CoreAudio/PublicUtility/CAMutex.h; sourceTree = "DEVELOPER_DIR"; }; - 35B676123569917443C05786 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = Extras/CoreAudio/PublicUtility/CAStreamBasicDescription.cpp; sourceTree = "DEVELOPER_DIR"; }; - 653554C5848EC85ACF6761CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAStreamBasicDescription.h; path = Extras/CoreAudio/PublicUtility/CAStreamBasicDescription.h; sourceTree = "DEVELOPER_DIR"; }; - 206D40BEDB308864DE8DAA57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = Extras/CoreAudio/PublicUtility/CAVectorUnitTypes.h; sourceTree = "DEVELOPER_DIR"; }; - 3008852179AEC3110ABEFC5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAVectorUnit.cpp; path = Extras/CoreAudio/PublicUtility/CAVectorUnit.cpp; sourceTree = "DEVELOPER_DIR"; }; - B6B85F3F336EDA568CB53327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnit.h; path = Extras/CoreAudio/PublicUtility/CAVectorUnit.h; sourceTree = "DEVELOPER_DIR"; }; - D2FF01F8AC92CBFB1A4AEC2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUViewLocalizedStringKeys.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUViewBase/AUViewLocalizedStringKeys.h; sourceTree = "DEVELOPER_DIR"; }; - 6C9B2F471F11EC467FDB06D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewDispatch.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewDispatch.cpp; sourceTree = "DEVELOPER_DIR"; }; - 17ABF2F862D57C89FE85C307 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewControl.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewControl.cpp; sourceTree = "DEVELOPER_DIR"; }; - C5139AB9C4FB8AAD09B8CD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewControl.h; sourceTree = "DEVELOPER_DIR"; }; - E9F52DE288413A752B295F84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CarbonEventHandler.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/CarbonEventHandler.cpp; sourceTree = "DEVELOPER_DIR"; }; - 943EC8C2885DA0982C1E995E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CarbonEventHandler.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/CarbonEventHandler.h; sourceTree = "DEVELOPER_DIR"; }; - A272B6DB3C84B9D91BF0F060 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUCarbonViewBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - E0586393177D674A237103E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUCarbonViewBase/AUCarbonViewBase.h; sourceTree = "DEVELOPER_DIR"; }; - BA712F15F8C80BF55297EA44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - BC5E2A691B0A52816EA5C7DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "DEVELOPER_DIR"; }; - 6381E6023EA29B5BC90F0F11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "DEVELOPER_DIR"; }; - 79725AF8A4315CF7AEB0A650 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUDispatch.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.h; sourceTree = "DEVELOPER_DIR"; }; - F17E1C506A2CB31650AC64A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUInputElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.cpp; sourceTree = "DEVELOPER_DIR"; }; - A7453366F39F172187B8469B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.h; sourceTree = "DEVELOPER_DIR"; }; - 4BA3B7415620D5A6A3DD6076 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.cpp; sourceTree = "DEVELOPER_DIR"; }; - 58CAFB52D888AF57B1A82540 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.h; sourceTree = "DEVELOPER_DIR"; }; - 3392EEAEB79019283AD94C41 = { isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r; sourceTree = "DEVELOPER_DIR"; }; - A9C716DF2B9CC6D95877A448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUScopeElement.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.cpp; sourceTree = "DEVELOPER_DIR"; }; - 05B55564FFFBBBC713829291 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUScopeElement.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.h; sourceTree = "DEVELOPER_DIR"; }; - 51DAC3E29FE8A76EF638C26E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - 952543A03965AE64D2F7EF37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "DEVELOPER_DIR"; }; - 71A86FA30C6E11992FD52782 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - 09365764C5E388C17571B74B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "DEVELOPER_DIR"; }; - F7A8C106BF631AFADA24F8EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIEffectBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - 3F222693EE8A706D9E66140F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUMIDIEffectBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.h; sourceTree = "DEVELOPER_DIR"; }; - 8C28A1A8AF5FFC61D88246A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - D2EF4DF7FF52621B8EBC3C20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.h; sourceTree = "DEVELOPER_DIR"; }; - 634B4CFC4268E257C63FA337 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - 0388AC868C8BBB6E2FDBAAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "DEVELOPER_DIR"; }; - 6EC9B05A43174FFF25BA3382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUEffectBase.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUEffectBase.cpp; sourceTree = "DEVELOPER_DIR"; }; - 6EEDB768C0235390844832E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUEffectBase.h; path = Extras/CoreAudio/AudioUnits/AUPublic/OtherBases/AUEffectBase.h; sourceTree = "DEVELOPER_DIR"; }; - 257FA3A7290842556A7377A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUBuffer.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBuffer.cpp; sourceTree = "DEVELOPER_DIR"; }; - 8223723B38EF54A3B8644621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBuffer.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBuffer.h; sourceTree = "DEVELOPER_DIR"; }; - 55D565AF7527BA71D7ADC2D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUDebugDispatcher.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUDebugDispatcher.cpp; sourceTree = "DEVELOPER_DIR"; }; - DDD465BD14877C159A3217E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUDebugDispatcher.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUDebugDispatcher.h; sourceTree = "DEVELOPER_DIR"; }; - 8E41015AF77D494DDAB5546F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputFormatConverter.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUInputFormatConverter.h; sourceTree = "DEVELOPER_DIR"; }; - B50242715BF944E7711A5939 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUSilentTimeout.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUSilentTimeout.h; sourceTree = "DEVELOPER_DIR"; }; - F2595F2DC0235F848F9474E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUTimestampGenerator.h; sourceTree = "DEVELOPER_DIR"; }; - 55F13334336342B374FA505C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 1C7D0AE1352D6713D906C4AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 21CE5C9490494A2139D61408 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - 6AE52580AD24BD551DB99758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - B31CFE8BBA103078E19D1B97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - FD33B687C6FBA3ABC581AFD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; - DF8AD10F6B21858C3378B63F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../JuceLibraryCode/JucePluginCharacteristics.h; sourceTree = "SOURCE_ROOT"; }; - E1C5E3C67B4A2621AD2D3E05 = { isa = PBXGroup; children = ( - B50846B34831C2C28007BE7D, - CF304FBE4BC66783833C4B59, - 2C001306D198F8B21ABA7375, - 662507104D05B579BB68F391 ); name = JuceDemoPlugin; sourceTree = ""; }; - B7F037957C49AE7943C354C9 = { isa = PBXGroup; children = ( - 94A977DEE6BE2081CA0213FE, - 00E2C89A148A2491288DF242 ); name = "Juce VST Wrapper"; sourceTree = ""; }; - 17A9711DC035377B969B90C2 = { isa = PBXGroup; children = ( - 70DC3C63DDDFB1C5A22A8C36, - 6C254919C15224D13FE6D174, - AEDBCF2FF9E1FBD5B9958FB4, - 38E2002644D5BBC2E88ACB70, - 248B812009870EC9531D3269, - 616DF8861CA45D7FFE92CA35, - 52F3077A4F38B60682CD77B0, - 35B676123569917443C05786, - 653554C5848EC85ACF6761CB, - 206D40BEDB308864DE8DAA57, - 3008852179AEC3110ABEFC5F, - B6B85F3F336EDA568CB53327, - D2FF01F8AC92CBFB1A4AEC2B, - 6C9B2F471F11EC467FDB06D0, - 17ABF2F862D57C89FE85C307, - C5139AB9C4FB8AAD09B8CD9A, - E9F52DE288413A752B295F84, - 943EC8C2885DA0982C1E995E, - A272B6DB3C84B9D91BF0F060, - E0586393177D674A237103E5, - BA712F15F8C80BF55297EA44, - BC5E2A691B0A52816EA5C7DB, - 6381E6023EA29B5BC90F0F11, - 79725AF8A4315CF7AEB0A650, - F17E1C506A2CB31650AC64A1, - A7453366F39F172187B8469B, - 4BA3B7415620D5A6A3DD6076, - 58CAFB52D888AF57B1A82540, - 3392EEAEB79019283AD94C41, - A9C716DF2B9CC6D95877A448, - 05B55564FFFBBBC713829291, - 51DAC3E29FE8A76EF638C26E, - 952543A03965AE64D2F7EF37, - 71A86FA30C6E11992FD52782, - 09365764C5E388C17571B74B, - F7A8C106BF631AFADA24F8EE, - 3F222693EE8A706D9E66140F, - 8C28A1A8AF5FFC61D88246A9, - D2EF4DF7FF52621B8EBC3C20, - 634B4CFC4268E257C63FA337, - 0388AC868C8BBB6E2FDBAAA3, - 6EC9B05A43174FFF25BA3382, - 6EEDB768C0235390844832E6, - 257FA3A7290842556A7377A4, - 8223723B38EF54A3B8644621, - 55D565AF7527BA71D7ADC2D4, - DDD465BD14877C159A3217E8, - 8E41015AF77D494DDAB5546F, - B50242715BF944E7711A5939, - F2595F2DC0235F848F9474E8 ); name = "Apple AU Files"; sourceTree = ""; }; - 5180919A8096CFD082284336 = { isa = PBXGroup; children = ( - 4751785A8DF8E6DA39550E63, - 3EF0D861DF9DE96DDAAE0951, - 17A9711DC035377B969B90C2 ); name = "Juce AU Wrapper"; sourceTree = ""; }; - C3E8F897FB646B0E8E7FC67C = { isa = PBXGroup; children = ( - 55F13334336342B374FA505C, - 1C7D0AE1352D6713D906C4AB, - 21CE5C9490494A2139D61408, - 6AE52580AD24BD551DB99758, - B31CFE8BBA103078E19D1B97, - FD33B687C6FBA3ABC581AFD7, - DF8AD10F6B21858C3378B63F ); name = "Juce Library Code"; sourceTree = ""; }; - 7756687B5FD0903C5F83BB9E = { isa = PBXGroup; children = ( - 81567EBA449466A95492511B ); name = Resources; sourceTree = ""; }; - 9B041E4036493224CFD075FF = { isa = PBXGroup; children = ( - E226D5DEE103B1E298BD6E3E, - DBC6733A66786D64D63E7016, - D036C01DC0E376205ABAA0CE, - 91F0411829B13595887CE52A, - 41FDE3A9AC13B3D1F230088E, - 2307ABAB0264959E640E9E37, - 88C8229131104E50F4F0D137, - 423550EB3CF502541882C50E, - A2A2E49121DBB7C395E2420A, - FBA2E307398FFC8A2693C933, - B4F88060202011416CB3278B, - B050085463EEB5F8367314CB, - 678CC9E413A7CF979964CEF7, - 01A30B0A0B9B5064D9B75474 ); name = Frameworks; sourceTree = ""; }; - A60AEBCC9579AD6BA9D5CA4B = { isa = PBXGroup; children = ( - AF721FB8136D2CAA9404AD8D ); name = Products; sourceTree = ""; }; - 9DC33026DCB453C5B40EA9B3 = { isa = PBXGroup; children = ( - E1C5E3C67B4A2621AD2D3E05, - B7F037957C49AE7943C354C9, - 5180919A8096CFD082284336, - C3E8F897FB646B0E8E7FC67C, - 7756687B5FD0903C5F83BB9E, - 9B041E4036493224CFD075FF, - A60AEBCC9579AD6BA9D5CA4B ); name = Source; sourceTree = ""; }; - 6B24C2D519EB1D09B3C748EC = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = "~/SDKs/vstsdk2.4 $(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility $(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility $(inherited)"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; - LIBRARY_STYLE = Bundle; - WRAPPER_EXTENSION = component; - GENERATE_PKGINFO_FILE = YES; - OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\""; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_LDFLAGS = "-bundle"; - ONLY_ACTIVE_ARCH = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_DEBUG=1", - "DEBUG=1", - "JUCE_ObjCExtraSuffix=JuceDemo", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; - F4B05B483343A2F3C923C6B4 = { isa = XCBuildConfiguration; buildSettings = { - PREBINDING = NO; - HEADER_SEARCH_PATHS = "~/SDKs/vstsdk2.4 $(DEVELOPER_DIR)/Extras/CoreAudio/PublicUtility $(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/Utility $(inherited)"; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; - LIBRARY_STYLE = Bundle; - WRAPPER_EXTENSION = component; - GENERATE_PKGINFO_FILE = YES; - OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\""; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_LDFLAGS = "-bundle"; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_NDEBUG=1", - "NDEBUG=1", - "JUCE_ObjCExtraSuffix=JuceDemo", - "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; - F6631902F8DE12E2C2C34B71 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "JuceDemoPlugin"; }; name = Debug; }; - D9F9CC7EC1952477F7915D84 = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - WARNING_CFLAGS = -Wreorder; - GCC_MODEL_TUNING = G5; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - ZERO_LINK = NO; - DEBUG_INFORMATION_FORMAT = "dwarf"; - PRODUCT_NAME = "JuceDemoPlugin"; }; name = Release; }; - 91EB753864A948DE4421285E = { isa = XCConfigurationList; buildConfigurations = ( - F6631902F8DE12E2C2C34B71, - D9F9CC7EC1952477F7915D84 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 392E8263441DF125E3215D42 = { isa = XCConfigurationList; buildConfigurations = ( - 6B24C2D519EB1D09B3C748EC, - F4B05B483343A2F3C923C6B4 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 145D936BBD5425D74172B206 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A79C4026C596A99BB0ADC224 = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 6FC7ABF9C15FE51D4073E3D2 ); runOnlyForDeploymentPostprocessing = 0; }; - F0F39FCA8C402F34BB74F6B3 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5AF66C048A4815F5A8ECDDCD, - 209FB8C7F7BE85A70E5D98D7, - 3DFA294CC79D06F066723396, - 7C5B1DFA35A2EA8DFB2A40C9, - CC35AB7C8D157D7211320179, - B7D2D2868983939B35532885, - 3723101DD64447FE9A530323, - EBBDC594F4DF0EF42E017C64, - 421AB531BFA2C9EB93522748, - E5299A6C25F9C4AE26DABAC0, - A7805EAF6FC58E9A857D98EA, - B24CA5BEF488268AB502C0AC, - 81795588AD3A427D43E3165C, - 07EDB68D178C5C7635F58468, - AEF69B599D0CEC30C1BC8C0C, - 8B45F20F3F352BB3B35F6EB7, - 3FA5946913264BF87C308F89, - BAF7CD5DAFBAB29BEF0DCAE3, - F51222976BFE5611E7FC656F, - 84D075FA78547C8D3AC4EA1A, - CE625DD4D4B118F4718F2DCC, - 60FEDB4F5859871946389F21, - F9290B46763F4865ED3C362D, - A2718BCD8261456359155ABE, - 4BB4B93E0E58FC0D5FE82292, - EE224227E577BA498E98DC9A, - F0BEF1392277DBDC409A06A3, - 99CB24952ADDDFA320CB3B23, - 9551342606A895BB5BA07F2E, - A1E844C7D2636CC38585B429, - BD7E5458BE2F33DBBF5AF834 ); runOnlyForDeploymentPostprocessing = 0; }; - 9519B014653C694C3456E5A4 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AC674433358C3691C8AC20AF, - 5B83F34400A1B5844680E1CE, - 449473E31270237B0FFEBE72, - 0860A8808F16C84CE7641D04, - EF358E6194DB7EE60A1CE13D, - E504A4E425435E78197183F3, - 53E2C1531CB485CCDD230774, - B9C31FD116F29E7E4752EB90, - AFB1D55C5DA4C99D90DF3A6A, - 370C0F92C3CC1B6C563A7A94, - 205AA28314AC784F2CF1FA98, - 68746D242F6A6102FDD5D03D, - CBE9E6042991B0677E3136D2, - 73B8F48633153DA5A10873E8 ); runOnlyForDeploymentPostprocessing = 0; }; - 06539322921079C10A447670 = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; name = "Copy to the different plugin folders"; shellPath = /bin/sh; shellScript = "\n# This script takes the build product and copies it to the AU, VST, and RTAS folders, depending on \n# which plugin types you've built\n\noriginal=$CONFIGURATION_BUILD_DIR/$FULL_PRODUCT_NAME\n\n# this looks inside the binary to detect which platforms are needed.. \ncopyAU=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'AudioUnit' | wc -l`\ncopyVST=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'VSTPlugin' | wc -l`\ncopyRTAS=`nm -g \"$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH\" | grep -i 'CProcess' | wc -l`\n\nif [ $copyAU -gt 0 ]; then\n echo \"Copying to AudioUnit folder...\"\n AU=~/Library/Audio/Plug-Ins/Components/$PRODUCT_NAME.component\n if [ -d \"$AU\" ]; then \n rm -r \"$AU\"\n fi\n\n cp -r \"$original\" \"$AU\"\n sed -i \"\" -e 's/TDMwPTul/BNDLPTul/g' \"$AU/Contents/PkgInfo\"\n sed -i \"\" -e 's/TDMw/BNDL/g' \"$AU/Contents/$INFOPLIST_FILE\"\nfi\n\nif [ $copyVST -gt 0 ]; then\n echo \"Copying to VST folder...\"\n VST=~/Library/Audio/Plug-Ins/VST/$PRODUCT_NAME.vst\n if [ -d \"$VST\" ]; then \n rm -r \"$VST\"\n fi\n\n cp -r \"$original\" \"$VST\"\n sed -i \"\" -e 's/TDMwPTul/BNDLPTul/g' \"$VST/Contents/PkgInfo\"\n sed -i \"\" -e 's/TDMw/BNDL/g' \"$VST/Contents/$INFOPLIST_FILE\"\nfi\n\nif [ $copyRTAS -gt 0 ]; then\n echo \"Copying to RTAS folder...\"\n RTAS=/Library/Application\\ Support/Digidesign/Plug-Ins/$PRODUCT_NAME.dpm\n if [ -d \"$RTAS\" ]; then\n rm -r \"$RTAS\"\n fi\n\n cp -r \"$original\" \"$RTAS\"\nfi\n"; }; - 792509270ABF8E6A65E16172 = { isa = PBXNativeTarget; buildConfigurationList = 392E8263441DF125E3215D42; buildPhases = ( - 145D936BBD5425D74172B206, - A79C4026C596A99BB0ADC224, - F0F39FCA8C402F34BB74F6B3, - 9519B014653C694C3456E5A4, - 06539322921079C10A447670 ); buildRules = ( ); dependencies = ( ); name = JuceDemoPlugin; productName = JuceDemoPlugin; productReference = AF721FB8136D2CAA9404AD8D; productInstallPath = "$(HOME)/Library/Audio/Plug-Ins/Components/"; productType = "com.apple.product-type.bundle"; }; - 64CEAC70FBD5AC5BD1D686C9 = { isa = PBXProject; buildConfigurationList = 91EB753864A948DE4421285E; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = 9DC33026DCB453C5B40EA9B3; projectDirPath = ""; projectRoot = ""; targets = ( 792509270ABF8E6A65E16172 ); }; - }; - rootObject = 64CEAC70FBD5AC5BD1D686C9; -} diff --git a/extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj b/extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj deleted file mode 100644 index 9d477216fd..0000000000 --- a/extras/audio plugins/demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj b/extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj deleted file mode 100644 index f380cd40dc..0000000000 --- a/extras/audio plugins/demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/audio plugins/demo/JuceLibraryCode/AppConfig.h b/extras/audio plugins/demo/JuceLibraryCode/AppConfig.h deleted file mode 100644 index 10f53fd7d8..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/AppConfig.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! - - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h - -*/ - -//#define JUCE_FORCE_DEBUG -//#define JUCE_LOG_ASSERTIONS -//#define JUCE_ASIO -//#define JUCE_WASAPI -//#define JUCE_DIRECTSOUND -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION -//#define JUCE_ALSA -#define JUCE_QUICKTIME 0 -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D -//#define JUCE_USE_FLAC -//#define JUCE_USE_OGGVORBIS -//#define JUCE_USE_CDBURNER -//#define JUCE_USE_CDREADER -//#define JUCE_USE_CAMERA -//#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA -//#define JUCE_USE_XSHM -//#define JUCE_USE_XRENDER -//#define JUCE_USE_XCURSOR -//#define JUCE_PLUGINHOST_VST -//#define JUCE_PLUGINHOST_AU -//#define JUCE_ONLY_BUILD_CORE_LIBRARY -//#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceHeader.h b/extras/audio plugins/demo/JuceLibraryCode/JuceHeader.h deleted file mode 100644 index 95896c4095..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceHeader.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration - options for your app. - -*/ - -#ifndef __APPHEADERFILE_0NRD9LLGO__ -#define __APPHEADERFILE_0NRD9LLGO__ - -#include "AppConfig.h" -#include "../../../../juce_amalgamated.h" - -namespace ProjectInfo -{ - const char* const projectName = "JuceDemoPlugin"; - const char* const versionString = "1.0.0"; - const int versionNumber = 0x10000; -} - -#endif // __APPHEADERFILE_0NRD9LLGO__ diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.cpp b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.cpp deleted file mode 100644 index 74b482d136..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.mm b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.mm deleted file mode 100644 index 74b482d136..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode1.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.cpp b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.cpp deleted file mode 100644 index cdfc4b6ea2..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.mm b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.mm deleted file mode 100644 index cdfc4b6ea2..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode2.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.cpp b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.cpp deleted file mode 100644 index 55f98cea98..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.mm b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.mm deleted file mode 100644 index 55f98cea98..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode3.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.cpp b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.cpp deleted file mode 100644 index 5137e1b9c2..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.mm b/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.mm deleted file mode 100644 index 5137e1b9c2..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JuceLibraryCode4.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/audio plugins/demo/JuceLibraryCode/JucePluginCharacteristics.h b/extras/audio plugins/demo/JuceLibraryCode/JucePluginCharacteristics.h deleted file mode 100644 index 4d16c134a6..0000000000 --- a/extras/audio plugins/demo/JuceLibraryCode/JucePluginCharacteristics.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This header file contains configuration options for the plug-in. If you need to change any of - these, it'd be wise to do so using the Jucer, rather than editing this file directly... - -*/ - -#ifndef __PLUGINCHARACTERISTICS_0NRD9LLGO__ -#define __PLUGINCHARACTERISTICS_0NRD9LLGO__ - -#define JucePlugin_Build_VST 1 // (If you change this value, you'll also need to re-export the projects using the Jucer) -#define JucePlugin_Build_AU 1 // (If you change this value, you'll also need to re-export the projects using the Jucer) -#define JucePlugin_Build_RTAS 0 // (If you change this value, you'll also need to re-export the projects using the Jucer) - -#define JucePlugin_Name "Juce Demo Plugin" -#define JucePlugin_Desc "Juce Demo Plugin" -#define JucePlugin_Manufacturer "Raw Material Software" -#define JucePlugin_ManufacturerCode 'RawM' -#define JucePlugin_PluginCode 'Jcdm' -#define JucePlugin_MaxNumInputChannels 2 -#define JucePlugin_MaxNumOutputChannels 2 -#define JucePlugin_PreferredChannelConfigurations {1, 1}, {2, 2} -#define JucePlugin_IsSynth 0 -#define JucePlugin_WantsMidiInput 1 -#define JucePlugin_ProducesMidiOutput 1 -#define JucePlugin_SilenceInProducesSilenceOut 0 -#define JucePlugin_TailLengthSeconds 0 -#define JucePlugin_EditorRequiresKeyboardFocus 1 -#define JucePlugin_VersionCode 0x10000 -#define JucePlugin_VersionString "1.0.0" -#define JucePlugin_VSTUniqueID JucePlugin_PluginCode -#define JucePlugin_VSTCategory kPlugCategEffect -#define JucePlugin_AUMainType kAudioUnitType_Effect -#define JucePlugin_AUSubType JucePlugin_PluginCode -#define JucePlugin_AUExportPrefix JuceDemoProjectAU -#define JucePlugin_AUExportPrefixQuoted "JuceDemoProjectAU" -#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode -#define JucePlugin_CFBundleIdentifier com.rawmaterialsoftware.JuceDemoPlugin -#define JucePlugin_AUCocoaViewClassName JuceDemoProjectAU_V1 -#define JucePlugin_RTASCategory ePlugInCategory_None -#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode -#define JucePlugin_RTASProductId JucePlugin_PluginCode -#define JUCE_USE_VSTSDK_2_4 1 - -#endif // __PLUGINCHARACTERISTICS_0NRD9LLGO__ diff --git a/extras/binarybuilder/BinaryBuilder.jucer b/extras/binarybuilder/BinaryBuilder.jucer index f4e9315299..cc6cef6645 100644 --- a/extras/binarybuilder/BinaryBuilder.jucer +++ b/extras/binarybuilder/BinaryBuilder.jucer @@ -12,8 +12,6 @@ - @@ -29,15 +27,8 @@ - + + + + diff --git a/extras/binarybuilder/Builds/Linux/Makefile b/extras/binarybuilder/Builds/Linux/Makefile index ad20adf563..7d72453fdb 100644 --- a/extras/binarybuilder/Builds/Linux/Makefile +++ b/extras/binarybuilder/Builds/Linux/Makefile @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! ifndef CONFIG CONFIG=Debug @@ -44,7 +44,7 @@ endif OBJECTS := \ $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/JuceLibraryCode_9800db7c.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ .PHONY: clean @@ -66,9 +66,9 @@ $(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp @echo "Compiling Main.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode_9800db7c.o: ../../JuceLibraryCode/JuceLibraryCode.cpp +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode.cpp" + @echo "Compiling juce_core_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj b/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj index 036910ad3b..029d11570e 100644 --- a/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj +++ b/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ 9B12BA0402DA13494DFAE588 = { isa = PBXBuildFile; fileRef = 36A58EE4FBF01289682D7DAD; }; 53E0B9862C5E908771C0228F = { isa = PBXBuildFile; fileRef = E1CBD0FBF4E4B347B87F031B; }; 707392A801368BCEE86E5256 = { isa = PBXBuildFile; fileRef = 9049BFDEB4FA33D1BAC82FAC; }; - D51982959E41125E4F4E92FA = { isa = PBXBuildFile; fileRef = 8B9506611F425243DD224A90; }; + 7CF9AA1763B61D397A85E161 = { isa = PBXBuildFile; fileRef = F2F166C7AFFC7C5457C7A705; }; C25FAADEC95C14D468751DD4 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; B06F951EA83CD91239635064 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; 7119161802FA9887683494D0 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -34,17 +34,404 @@ E1CBD0FBF4E4B347B87F031B = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 7FABD4A9FCB57F9C63BD5D34 = { isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = BinaryBuilder; sourceTree = "BUILT_PRODUCTS_DIR"; }; 9049BFDEB4FA33D1BAC82FAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; + 5C128FF1F58F79B28C2F1820 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2FB7F4462E1778936818831A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + D704BF648FABCEF66BAC1213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + C440F3E7EB994A40BC112D7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 657714062A1D0A5377E6D29C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 3DCED46F21C69E3F98513262 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 1FBB6A7EFAAECEC58619D5AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 05AC8AD18823B16D6A0A955B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + 3789D3FA5946913264BF87C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + F07ADD606776654CF344F894 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 6558CCC30ABA1882631E1A4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 6F1F33C6E5B0F5CD5E145BA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 874C8B567CC7CF1C088BC0F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 3056B237802BAD6D5C3643E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 947CAAAF81730FDBFFAC04E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + C97BC9EB8B447D2D270C7F28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + F911351AE79E9F56F62AF28E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 76C58657DA7570F245BB761B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D52E9727E55CECB3B16D545 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + 1E9A7CDE032DC1150C175183 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + CAC23793DC9900836CAF01A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 2B2B5917F4ECF908272F52DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + EE14FA9FA3A165676BDDA9EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + DD3D2CD16BE1D0145D8622FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 7959A45F835F24928F9AFF35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28FA592BC3ACA784FF806AAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + E6038C92FE14CE444EEFDB9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 59707DCD3B10549FE9B4A8A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 8E9CEC8F65EEAF7CE88AD74E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + F0331260D1BBB3C2DD9315A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + B97AE55C45860F638C8E53EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 46DD4E1FAD6D243EFF48F156 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + 15C55002D8D49AB7244BECB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + E980DE0BABBB8439DE805627 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 0C50CE78E457330B2ED028B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 722534AD677C3A89274379D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 168AB809CEB1AB3FBED092AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 2AE56B2C2E490894E9419D35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 6109C9BAEEE4E8A753289205 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 922D9B522EFCD205FF8808CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A5CFD9CE51EEAAB5403DD72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 104429D10063FE75E338BE02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + C5226D5F59395CB5F120FC74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + E6EEDD1CB3DD0F75032CFFE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADE7BB4DB05F20622D18B959 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 2E52AEAB7A1C350BB0ACE9E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 0289D4E8B3BA4B93FA6D52FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + DB8C58F6BB6326469AB83184 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 0331D0EAA8593A2EE5B6FC7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + BCA49F9CC9483263EE570E3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 1A029D95048A46BADC875505 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 159067DAFC8BFE4ABBC4FB70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB95924107118FCB5964EF4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + D72DF86ECE83DAE444D1B3FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + A7D4C2DD4DF23E3142D0CC8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + CE6C9902D8D32F8F13B40413 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 410062042764412B8CE30317 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 0AB78BD46B8F7A6A4977380B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 73B5EF34B14DE4C3BDC02338 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + EBFF70C985AA83FEE63BB2BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 0017D445356186C09F446C3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 0A0133E71CF415ED4B1CB503 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 756A66A6687837CE22D1CE6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 5B662D96608DA5B09BBFF254 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9043C30464713D83329CEAB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + A98ABD55F1EB028B722D38AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 67A0C51D94679246E83607D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + DC8C0E226D5DEE103B1E298B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2C803DC1A0C7FF0AA97251F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 7BB768B3FA95C2B2F86B2340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01D8884BFB806852E17FE85B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + EC004751603CD3DED17853D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B491370C17A07DE72FBE3DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 296EA13B471A2DE0D65CD9FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 788C0496E946A0B0991DD68E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 5B27D1F1D89059B5AB7CA4C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 729E764BF1A4427FE8BEB905 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + DFF661C85C54F3EE0E5AB9E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + A0BA0145C4B244453EF01B9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 836970FB4F64FBB8C45ED6DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 6C54C2318261EDFB2421B950 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6650CFFE21887C4D9286B2F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 456FE95FB55D0AF7241393A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 61AB316AB9FF724382B76F67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 23CE633DA9707C0051C481E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07B2FC98CE812E24A66E5AAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 9DB0BC5E82DCE740A0F9B452 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAD7CCE21E365F7D0D7EE316 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 5207DDB21B88F35F10F86579 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A312F1CDA747BD63008A80CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 51E0251E863AD799E01DBD06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAA6F39990AE386D30BFE0DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + F66A54DAAA101F7498CCD2DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + A690C3A7DE7D219F640FBE6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7AC4B4A9FBE2E4BE86975FC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + E6CB40B7C5A8D8ABB133C472 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4E40A230860A20952426365 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + C61FB0613C4574F6141C11DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + F7C3EC30B327A51D8B81F390 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + D24646B0C2356A5D5DA09300 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + AE16974DF1CBFB772FE0972D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 424DFF7B90FC45538B496F82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8FEC95F439966E90B76502F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 716015AF25145891CA6632BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F551FBEB81D82A3B4FE4BB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E6106B6D4853D269D03F6E37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4BA4F807FA0B098B2BE7D53B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 5F0CACE64C691CC4759C103F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 55F102B41C8C9AB2E0F3F1BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DFBD5528882D15E93DBDE92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 78CBF1417829498CAF59AEA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3CBF9D77F42A2473F0357D70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 825E63BCAD84F804CB471B07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 17E4FA41DE0384DE21EF11D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + BC010D3D9EFD71CC4F0FF850 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8600CC6FEC6913E3851E14F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4CB30171B638118825579435 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB011CAE99ADF2B4D1CF4A4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + CCF1F5CE891216C9D0C87D46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 15E71ABCD81C9B840AF63C30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + AC1B3A0387B60E5EC656889A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CADDE2FBFF2C014B5818C78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 532ADCAD1D49D363D6C8BEFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 7578A99C4FB123A2D628F21B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + AD3D0F303A37C8661D7DA795 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F44E12089B06E6F718DA263 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + BFC77ADBF7AA8EEF1B36C37E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + B190D72FC69CDDF822D735AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CF304FBE4BC66783833C4B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 7C06951B6BD303BFD2A962CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CCDFC29D54B47ED6763F31B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + 320FD95875492F2213E202D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 59757AA048F99A136C5096D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 07E5B4F71D3A657F356B6FA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5E8A0B23D7D602607EA5B5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 999D99D6EC78660FEA6C8CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C430A392C96D01294DF406E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + CFDAB5D91C7E1A27C231F2F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + BABC2C8A58AAD158663574AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 01056C981AE68D4993649A93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + 916826217A31EE1E9E30741A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + 1005820E0160D36D0F45D77C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + 24A401C6640980C7B19D7E6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 33A049E17D69424B44FD6D49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F4DDBC54E0964FF9E3CE61A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 6E706ED187D1FBC98FD6B1E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 3F824529EE3A21CC47330E71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + B81D29C5CF9766898E1F14A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 28E80CD756E894BF76BEACCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 358CD8A7CE927D600A39549E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71F9E9522DB49A8DFE434237 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 248B4F60BE5A2EDA5FD98AB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + CAD3B6CDFB09FBA1C6E4D020 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 24117634F168635DE40BF538 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F6FB86B8E39A4A58D042654 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 221A60B6DA7372AE27911CFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31ED22FB0EFBE7E4E5A49823 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + E764C5DCC5306B043DF96951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + EBEF3C32084C746FB9BBE8B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + D0B774D2DAEDC7D737EC64A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + 389E47C3440B444C875EA5CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + B89C8E9A77D8B0FB1C739515 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 870EFBD434090161ECD43C12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 42906DECD3401441CE5FC255 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 5F827F5FF6D4A2A2E226F8CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 676D5E6AC0D90BA09B4E99DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 6A43973D4110B6309CB1B9E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 1397CA250ACBC1A116EE5C62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74495F92043BA65EFA488ED4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + E41BABB0BA0CE29D8C13354E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75DE6D14102A4CACC5F750F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86C7C92284FED89D52F8F093 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + C84300ADA97F92C2E3DDFE60 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + F3FA8A2F3AE5531E742F0443 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 1B74BC264C88ECA91E28AB01 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; 351908352BAB95A544A300F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + F2F166C7AFFC7C5457C7A705 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; FC95DFE22E66CA05B8BF7352 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 8B9506611F425243DD224A90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode.mm; path = ../../JuceLibraryCode/JuceLibraryCode.mm; sourceTree = "SOURCE_ROOT"; }; B7B714F1BC580B5898069A1D = { isa = PBXGroup; children = ( 9049BFDEB4FA33D1BAC82FAC ); name = Source; sourceTree = ""; }; 07E3546C6DFA9084D23A33E9 = { isa = PBXGroup; children = ( B7B714F1BC580B5898069A1D ); name = BinaryBuilder; sourceTree = ""; }; + FDDE92AEA48760C539D23C2B = { isa = PBXGroup; children = ( + 5C128FF1F58F79B28C2F1820, + 2FB7F4462E1778936818831A, + D704BF648FABCEF66BAC1213, + C440F3E7EB994A40BC112D7D, + 657714062A1D0A5377E6D29C, + 3DCED46F21C69E3F98513262, + 1FBB6A7EFAAECEC58619D5AC, + 05AC8AD18823B16D6A0A955B, + 3789D3FA5946913264BF87C3, + F07ADD606776654CF344F894, + 6558CCC30ABA1882631E1A4B, + 6F1F33C6E5B0F5CD5E145BA6, + 874C8B567CC7CF1C088BC0F4, + 3056B237802BAD6D5C3643E3, + 947CAAAF81730FDBFFAC04E9, + C97BC9EB8B447D2D270C7F28, + F911351AE79E9F56F62AF28E, + 76C58657DA7570F245BB761B, + 0D52E9727E55CECB3B16D545 ); name = text; sourceTree = ""; }; + B757C796B043C9E30402E8A8 = { isa = PBXGroup; children = ( + 1E9A7CDE032DC1150C175183, + CAC23793DC9900836CAF01A8, + 2B2B5917F4ECF908272F52DA, + EE14FA9FA3A165676BDDA9EC, + DD3D2CD16BE1D0145D8622FE, + 7959A45F835F24928F9AFF35, + 28FA592BC3ACA784FF806AAA, + E6038C92FE14CE444EEFDB9B ); name = maths; sourceTree = ""; }; + 8865CCE72E01546C4A1E509D = { isa = PBXGroup; children = ( + 59707DCD3B10549FE9B4A8A5, + 8E9CEC8F65EEAF7CE88AD74E, + F0331260D1BBB3C2DD9315A0, + B97AE55C45860F638C8E53EB, + 46DD4E1FAD6D243EFF48F156, + 15C55002D8D49AB7244BECB8, + E980DE0BABBB8439DE805627, + 0C50CE78E457330B2ED028B7, + 722534AD677C3A89274379D1, + 168AB809CEB1AB3FBED092AF, + 2AE56B2C2E490894E9419D35, + 6109C9BAEEE4E8A753289205 ); name = memory; sourceTree = ""; }; + 79C6CB65A6BBD4680F052098 = { isa = PBXGroup; children = ( + 922D9B522EFCD205FF8808CF, + 9A5CFD9CE51EEAAB5403DD72, + 104429D10063FE75E338BE02, + C5226D5F59395CB5F120FC74, + E6EEDD1CB3DD0F75032CFFE5, + ADE7BB4DB05F20622D18B959, + 2E52AEAB7A1C350BB0ACE9E6, + 0289D4E8B3BA4B93FA6D52FB, + DB8C58F6BB6326469AB83184, + 0331D0EAA8593A2EE5B6FC7B, + BCA49F9CC9483263EE570E3C, + 1A029D95048A46BADC875505, + 159067DAFC8BFE4ABBC4FB70, + FB95924107118FCB5964EF4C, + D72DF86ECE83DAE444D1B3FB, + A7D4C2DD4DF23E3142D0CC8D, + CE6C9902D8D32F8F13B40413, + 410062042764412B8CE30317, + 0AB78BD46B8F7A6A4977380B, + 73B5EF34B14DE4C3BDC02338 ); name = containers; sourceTree = ""; }; + 99FCE63C175C8838BB212B67 = { isa = PBXGroup; children = ( + EBFF70C985AA83FEE63BB2BA, + 0017D445356186C09F446C3D, + 0A0133E71CF415ED4B1CB503, + 756A66A6687837CE22D1CE6A, + 5B662D96608DA5B09BBFF254, + 9043C30464713D83329CEAB7, + A98ABD55F1EB028B722D38AE, + 67A0C51D94679246E83607D7, + DC8C0E226D5DEE103B1E298B, + 2C803DC1A0C7FF0AA97251F1, + 7BB768B3FA95C2B2F86B2340, + 01D8884BFB806852E17FE85B, + EC004751603CD3DED17853D6, + 7B491370C17A07DE72FBE3DC, + 296EA13B471A2DE0D65CD9FE, + 788C0496E946A0B0991DD68E, + 5B27D1F1D89059B5AB7CA4C8 ); name = threads; sourceTree = ""; }; + 441AA90E78F1CBF09323A465 = { isa = PBXGroup; children = ( + 729E764BF1A4427FE8BEB905, + DFF661C85C54F3EE0E5AB9E7, + A0BA0145C4B244453EF01B9D, + 836970FB4F64FBB8C45ED6DE, + 6C54C2318261EDFB2421B950, + 6650CFFE21887C4D9286B2F6 ); name = time; sourceTree = ""; }; + DF6CFCBDE31D1C902CCD57F6 = { isa = PBXGroup; children = ( + 456FE95FB55D0AF7241393A3, + 61AB316AB9FF724382B76F67, + 23CE633DA9707C0051C481E7, + 07B2FC98CE812E24A66E5AAE, + 9DB0BC5E82DCE740A0F9B452, + AAD7CCE21E365F7D0D7EE316, + 5207DDB21B88F35F10F86579, + A312F1CDA747BD63008A80CB, + 51E0251E863AD799E01DBD06, + AAA6F39990AE386D30BFE0DE, + F66A54DAAA101F7498CCD2DA, + A690C3A7DE7D219F640FBE6C, + 7AC4B4A9FBE2E4BE86975FC8 ); name = files; sourceTree = ""; }; + 67DBDEBCB3163AF9D3987FF0 = { isa = PBXGroup; children = ( + E6CB40B7C5A8D8ABB133C472, + F4E40A230860A20952426365, + C61FB0613C4574F6141C11DF, + F7C3EC30B327A51D8B81F390, + D24646B0C2356A5D5DA09300, + AE16974DF1CBFB772FE0972D, + 424DFF7B90FC45538B496F82, + 8FEC95F439966E90B76502F5 ); name = network; sourceTree = ""; }; + 6DE5972C49EE3BF567251024 = { isa = PBXGroup; children = ( + 716015AF25145891CA6632BA, + 1F551FBEB81D82A3B4FE4BB9, + E6106B6D4853D269D03F6E37, + 4BA4F807FA0B098B2BE7D53B, + 5F0CACE64C691CC4759C103F, + 55F102B41C8C9AB2E0F3F1BB, + 1DFBD5528882D15E93DBDE92, + 78CBF1417829498CAF59AEA7, + 3CBF9D77F42A2473F0357D70, + 825E63BCAD84F804CB471B07, + 17E4FA41DE0384DE21EF11D7, + BC010D3D9EFD71CC4F0FF850, + 8600CC6FEC6913E3851E14F8, + 4CB30171B638118825579435, + DB011CAE99ADF2B4D1CF4A4F ); name = streams; sourceTree = ""; }; + 99097ED5FF488B5F59066076 = { isa = PBXGroup; children = ( + CCF1F5CE891216C9D0C87D46, + 15E71ABCD81C9B840AF63C30, + AC1B3A0387B60E5EC656889A, + 0CADDE2FBFF2C014B5818C78 ); name = logging; sourceTree = ""; }; + C6F81758F50395DE26A03207 = { isa = PBXGroup; children = ( + 532ADCAD1D49D363D6C8BEFC, + 7578A99C4FB123A2D628F21B, + AD3D0F303A37C8661D7DA795, + 4F44E12089B06E6F718DA263, + BFC77ADBF7AA8EEF1B36C37E ); name = system; sourceTree = ""; }; + E3800726E0569A810CCCDD66 = { isa = PBXGroup; children = ( + B190D72FC69CDDF822D735AD, + 6CF304FBE4BC66783833C4B5, + 7C06951B6BD303BFD2A962CC, + 8CCDFC29D54B47ED6763F31B ); name = xml; sourceTree = ""; }; + F5369CEBA4BC47A8439A3829 = { isa = PBXGroup; children = ( + 320FD95875492F2213E202D8, + 59757AA048F99A136C5096D3 ); name = json; sourceTree = ""; }; + 2565C200A75683C0D6EB8073 = { isa = PBXGroup; children = ( + 07E5B4F71D3A657F356B6FA2, + D5E8A0B23D7D602607EA5B5F, + 999D99D6EC78660FEA6C8CBF, + 3C430A392C96D01294DF406E, + CFDAB5D91C7E1A27C231F2F6, + BABC2C8A58AAD158663574AF ); name = zip; sourceTree = ""; }; + A3AA09036B14EDA4AEA94881 = { isa = PBXGroup; children = ( + 01056C981AE68D4993649A93, + 916826217A31EE1E9E30741A ); name = "unit_tests"; sourceTree = ""; }; + 335F0A71D2299756694EEBBE = { isa = PBXGroup; children = ( + 1005820E0160D36D0F45D77C, + 24A401C6640980C7B19D7E6D, + 33A049E17D69424B44FD6D49, + 2F4DDBC54E0964FF9E3CE61A, + 6E706ED187D1FBC98FD6B1E2 ); name = misc; sourceTree = ""; }; + 31576C66888AF31FF171CD3C = { isa = PBXGroup; children = ( + 3F824529EE3A21CC47330E71, + B81D29C5CF9766898E1F14A5, + 28E80CD756E894BF76BEACCE, + 358CD8A7CE927D600A39549E, + 71F9E9522DB49A8DFE434237, + 248B4F60BE5A2EDA5FD98AB4, + CAD3B6CDFB09FBA1C6E4D020, + 24117634F168635DE40BF538, + 1F6FB86B8E39A4A58D042654, + 221A60B6DA7372AE27911CFF, + 31ED22FB0EFBE7E4E5A49823, + E764C5DCC5306B043DF96951, + EBEF3C32084C746FB9BBE8B4, + D0B774D2DAEDC7D737EC64A2, + 389E47C3440B444C875EA5CE, + B89C8E9A77D8B0FB1C739515, + 870EFBD434090161ECD43C12, + 42906DECD3401441CE5FC255, + 5F827F5FF6D4A2A2E226F8CA, + 676D5E6AC0D90BA09B4E99DA, + 6A43973D4110B6309CB1B9E2, + 1397CA250ACBC1A116EE5C62, + 74495F92043BA65EFA488ED4, + E41BABB0BA0CE29D8C13354E, + 75DE6D14102A4CACC5F750F0, + 86C7C92284FED89D52F8F093 ); name = native; sourceTree = ""; }; + 9092FA428465B3ED758CB651 = { isa = PBXGroup; children = ( + FDDE92AEA48760C539D23C2B, + B757C796B043C9E30402E8A8, + 8865CCE72E01546C4A1E509D, + 79C6CB65A6BBD4680F052098, + 99FCE63C175C8838BB212B67, + 441AA90E78F1CBF09323A465, + DF6CFCBDE31D1C902CCD57F6, + 67DBDEBCB3163AF9D3987FF0, + 6DE5972C49EE3BF567251024, + 99097ED5FF488B5F59066076, + C6F81758F50395DE26A03207, + E3800726E0569A810CCCDD66, + F5369CEBA4BC47A8439A3829, + 2565C200A75683C0D6EB8073, + A3AA09036B14EDA4AEA94881, + 335F0A71D2299756694EEBBE, + 31576C66888AF31FF171CD3C, + C84300ADA97F92C2E3DDFE60, + F3FA8A2F3AE5531E742F0443, + 1B74BC264C88ECA91E28AB01 ); name = "juce_core"; sourceTree = ""; }; + 3CA1912D397BAFAFC119E3EB = { isa = PBXGroup; children = ( + 9092FA428465B3ED758CB651 ); name = "Juce Modules"; sourceTree = ""; }; 9310BD97E4BDBEE06D277513 = { isa = PBXGroup; children = ( 351908352BAB95A544A300F2, - FC95DFE22E66CA05B8BF7352, - 8B9506611F425243DD224A90 ); name = "Juce Library Code"; sourceTree = ""; }; + F2F166C7AFFC7C5457C7A705, + FC95DFE22E66CA05B8BF7352 ); name = "Juce Library Code"; sourceTree = ""; }; 578E3D7C3819F32E2E3C6A34 = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; 6A2DE3401F8295169E892596 = { isa = PBXGroup; children = ( C25FAADEC95C14D468751DD4, @@ -63,6 +450,7 @@ 7FABD4A9FCB57F9C63BD5D34 ); name = Products; sourceTree = ""; }; 6DFB0526C5FDA6A794B7585A = { isa = PBXGroup; children = ( 07E3546C6DFA9084D23A33E9, + 3CA1912D397BAFAFC119E3EB, 9310BD97E4BDBEE06D277513, 578E3D7C3819F32E2E3C6A34, 6A2DE3401F8295169E892596, @@ -136,7 +524,7 @@ F485685C969D78B9212B61AD = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; C02C54CA659982168A3DA559 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 707392A801368BCEE86E5256, - D51982959E41125E4F4E92FA ); runOnlyForDeploymentPostprocessing = 0; }; + 7CF9AA1763B61D397A85E161 ); runOnlyForDeploymentPostprocessing = 0; }; 753185144E84CC3E130F945B = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 8C9019232ED599839765DF56, 24BD48D3FBC9865DDEB76D29, diff --git a/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.sln b/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.sln deleted file mode 100644 index bca6d4d104..0000000000 --- a/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -# Visual C++ Express 2005 -Project("{D7FD13D0-EADB-347A-0525-9F0597899B5A}") = "BinaryBuilder", "BinaryBuilder.vcproj", "{07A3F0B4-D234-EC23-96A2-85290D0A0775}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {07A3F0B4-D234-EC23-96A2-85290D0A0775}.Debug|Win32.ActiveCfg = Debug|Win32 - {07A3F0B4-D234-EC23-96A2-85290D0A0775}.Debug|Win32.Build.0 = Debug|Win32 - {07A3F0B4-D234-EC23-96A2-85290D0A0775}.Release|Win32.ActiveCfg = Release|Win32 - {07A3F0B4-D234-EC23-96A2-85290D0A0775}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.vcproj b/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.vcproj deleted file mode 100644 index 9ebd529353..0000000000 --- a/extras/binarybuilder/Builds/VisualStudio2005/BinaryBuilder.vcproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj b/extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj index e3eab887e1..e6646257c5 100644 --- a/extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj +++ b/extras/binarybuilder/Builds/VisualStudio2008/BinaryBuilder.vcproj @@ -132,10 +132,844 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/extras/binarybuilder/JuceLibraryCode/AppConfig.h b/extras/binarybuilder/JuceLibraryCode/AppConfig.h index 6a17588079..dfdd80ccf6 100644 --- a/extras/binarybuilder/JuceLibraryCode/AppConfig.h +++ b/extras/binarybuilder/JuceLibraryCode/AppConfig.h @@ -3,39 +3,17 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h + Any commented-out settings will assume their default values. */ +//============================================================================== +// juce_core flags: + //#define JUCE_FORCE_DEBUG //#define JUCE_LOG_ASSERTIONS -//#define JUCE_ASIO -//#define JUCE_WASAPI -//#define JUCE_DIRECTSOUND -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION -//#define JUCE_ALSA -//#define JUCE_QUICKTIME -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D -//#define JUCE_USE_FLAC -//#define JUCE_USE_OGGVORBIS -//#define JUCE_USE_CDBURNER -//#define JUCE_USE_CDREADER -//#define JUCE_USE_CAMERA -//#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA -//#define JUCE_USE_XSHM -//#define JUCE_USE_XRENDER -//#define JUCE_USE_XCURSOR -//#define JUCE_PLUGINHOST_VST -//#define JUCE_PLUGINHOST_AU -#define JUCE_ONLY_BUILD_CORE_LIBRARY 1 -//#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON //#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES diff --git a/extras/binarybuilder/JuceLibraryCode/JuceHeader.h b/extras/binarybuilder/JuceLibraryCode/JuceHeader.h index 7458bd5fa5..121c0f610a 100644 --- a/extras/binarybuilder/JuceLibraryCode/JuceHeader.h +++ b/extras/binarybuilder/JuceLibraryCode/JuceHeader.h @@ -4,8 +4,8 @@ project - if you alter its contents, your changes may be overwritten! This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration options for your app. */ @@ -14,7 +14,13 @@ #define __APPHEADERFILE_3T6YQETY1__ #include "AppConfig.h" -#include "../../../juce_amalgamated.h" +#include "../../../modules/juce_core/juce_core.h" + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif namespace ProjectInfo { diff --git a/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.cpp b/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.cpp deleted file mode 100644 index c7ea82f558..0000000000 --- a/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated_template.cpp" diff --git a/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.mm b/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.mm deleted file mode 100644 index c7ea82f558..0000000000 --- a/extras/binarybuilder/JuceLibraryCode/JuceLibraryCode.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated_template.cpp" diff --git a/extras/binarybuilder/JuceLibraryCode/ReadMe.txt b/extras/binarybuilder/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/binarybuilder/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.cpp b/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.mm b/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/binarybuilder/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/browser plugin demo/How to build a browser plugin.txt b/extras/browser plugin demo/How to build a browser plugin.txt new file mode 100644 index 0000000000..230e0fe770 --- /dev/null +++ b/extras/browser plugin demo/How to build a browser plugin.txt @@ -0,0 +1,69 @@ + + + Juce Browser Plugin Framework + ============================= + +These classes let you wrap a normal Juce component as a Mac/Windows NPAPI plugin for use in Firefox, +Safari, Chrome, etc., and/or an ActiveX plugin for IE. + +To create your plugin, your code just needs to implement the createBrowserPlugin() function +to return a subclass of BrowserPluginComponent, and this acts as the plugin window. + +To communicate with javascript running in the host webpage, the 'var' and 'DynamicObject' juce +classes emulate javascript objects, so you can create a javascript object that represents +your plugin, and the webpage can invoke methods and access properties on this object. To +get bi-directional communication between the plugin and webpage, your webpage can simply +pass its own object to your plugin, and the plugin can call methods on this object to invoke +javascript actions. + +In a similar style to audio plugins, your project has to contain a BrowserPluginCharacteristics.h +file that defines various properties of the plugin. + + +Building a Mac NPAPI Plugin with XCode +-------------------------------------- + +- Create a new "CFPlugin Bundle" project +- Add the juce wrapper source files to the project (have a look at the demo project to + find out which files this includes). +- Set up all the usual frameworks, etc, like you would for any other juce project. +- In the project or target settings, change the "Wrapper Extension" to "plugin" +- In your target, add a build phase "Build ResourceManager resources", and add the juce_NPAPI_MacResource.r file + to this step. +- Check that your info.plist contains the same items as the demo plugin, because these need to be set for the + browser to recognise it as a plugin. In particular, the "Bundle OS Type Code" should be set to BRPL. +- The finished bundle needs to be copied into "/Library/Internet Plug-Ins", so you might want to set up a + post-build copy step to do this automatically + + +Building a Windows NPAPI plugin in Visual Studio +------------------------------------------------ + +- Create a new project to build a win32 DLL +- Add the juce wrapper source files to the project (have a look at the demo project to + find out which files this includes). +- Your compiled plugin DLL must begin with the letters 'np' (in lower case) for it to be recognised as + a plugin, so you should make sure your target settings reflect this. +- To include the BrowserPluginCharacteristics.h file, you may need to add an include path to wherever this + file lives in your project. Don't use a global include path for this - just add it to the project's + search paths (both the c++ include paths and the resource include paths) +- (Refer to the normal juce instructions for setting up other project settings such as which c++ libs to link to etc) +- The finished plugin needs to be copied into "C:\Program Files\Mozilla Firefox\plugins", so you might want + to add a post-build step to copy it +- Note that the "browser plugins/wrapper/npapi" folder contains a copy of some NPAPI header files. If you're + building a closed-source project, please check the licensing details in these files to make sure + you're not breaking any Mozilla licensing restictions. + + +Building a Windows ActiveX control for Internet Explorer +-------------------------------------------------------- + +- This is actually quite easy, because the same DLL that functions as an NPAPI plugin can + also be used as an ActiveX control. +- Just create a windows NPAPI plugin as described above, but add the juce_ActiveX_GlueCode.cpp + file to the project. +- In your BrowserPluginCharacteristics.h file, the JuceBrowserPlugin_ActiveXCLSID setting needs + to be given a unique GUID for your plugin. +- Because the plugin is a COM object, it doesn't matter where the DLL lives, but it needs to + be registered in the normal COM way, with regsvr32.exe. Note that on Vista, this command + needs to be run with administrator permissions for it to be able to write to the registry. diff --git a/extras/browser plugins/demo/build/mac/Info.plist b/extras/browser plugin demo/build/mac/Info.plist similarity index 100% rename from extras/browser plugins/demo/build/mac/Info.plist rename to extras/browser plugin demo/build/mac/Info.plist diff --git a/extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj b/extras/browser plugin demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj similarity index 73% rename from extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj rename to extras/browser plugin demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj index 15b4fcbe06..9cbe3e6c03 100644 --- a/extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj +++ b/extras/browser plugin demo/build/mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj @@ -7,9 +7,15 @@ objects = { /* Begin PBXBuildFile section */ - 842CC42B0FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */; }; - 842CC4320FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */; }; - 842CC4330FA5BD57008C7970 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */; }; + 8415443F13DED0F800D66D72 /* juce_NPAPI_MacResource.r in Rez */ = {isa = PBXBuildFile; fileRef = 8415443313DEB84C00D66D72 /* juce_NPAPI_MacResource.r */; }; + 8415449013DEEF0D00D66D72 /* juce_browser_plugin_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448213DEEF0D00D66D72 /* juce_browser_plugin_wrapper.mm */; }; + 8415449213DEEF0D00D66D72 /* juce_core_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448413DEEF0D00D66D72 /* juce_core_wrapper.mm */; }; + 8415449413DEEF0D00D66D72 /* juce_data_structures_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448613DEEF0D00D66D72 /* juce_data_structures_wrapper.mm */; }; + 8415449613DEEF0D00D66D72 /* juce_events_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448813DEEF0D00D66D72 /* juce_events_wrapper.mm */; }; + 8415449813DEEF0D00D66D72 /* juce_graphics_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448A13DEEF0D00D66D72 /* juce_graphics_wrapper.mm */; }; + 8415449A13DEEF0D00D66D72 /* juce_gui_basics_wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8415448C13DEEF0D00D66D72 /* juce_gui_basics_wrapper.mm */; }; + 841544B613DEF1DC00D66D72 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841544B513DEF1DC00D66D72 /* QuartzCore.framework */; }; + 8415454713DF243A00D66D72 /* JuceBrowserPluginDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */; }; 842CC8E20FA5D26A008C7970 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D30FA5D26A008C7970 /* Carbon.framework */; }; 842CC8E30FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D40FA5D26A008C7970 /* CoreFoundation.framework */; }; 842CC8E40FA5D26A008C7970 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D50FA5D26A008C7970 /* DiscRecording.framework */; }; @@ -25,9 +31,7 @@ 842CC8EE0FA5D26A008C7970 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DF0FA5D26A008C7970 /* CoreServices.framework */; }; 842CC8EF0FA5D26A008C7970 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8E00FA5D26A008C7970 /* ApplicationServices.framework */; }; 842CC8F00FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */; }; - 842CC94A0FA5D934008C7970 /* juce_NPAPI_MacResource.r in Rez */ = {isa = PBXBuildFile; fileRef = 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */; }; 842CCB300FA5F201008C7970 /* JuceBrowserPluginDemo.plugin in CopyFiles */ = {isa = PBXBuildFile; fileRef = 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.plugin */; }; - 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B49A704867FD3000E48DA /* InfoPlist.strings */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -44,14 +48,19 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 842CC4250FA5BD2D008C7970 /* How to build a browser plugin.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "How to build a browser plugin.txt"; path = "../../../How to build a browser plugin.txt"; sourceTree = SOURCE_ROOT; }; - 842CC4270FA5BD3C008C7970 /* juce_BrowserPluginComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BrowserPluginComponent.h; path = ../../../wrapper/juce_BrowserPluginComponent.h; sourceTree = SOURCE_ROOT; }; - 842CC4280FA5BD3C008C7970 /* juce_IncludeBrowserPluginInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_IncludeBrowserPluginInfo.h; path = ../../../wrapper/juce_IncludeBrowserPluginInfo.h; sourceTree = SOURCE_ROOT; }; - 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_NPAPI_GlueCode.mm; path = ../../../wrapper/juce_NPAPI_GlueCode.mm; sourceTree = SOURCE_ROOT; }; - 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = juce_NPAPI_MacResource.r; path = ../../../wrapper/juce_NPAPI_MacResource.r; sourceTree = SOURCE_ROOT; }; + 8415442C13DEB82500D66D72 /* How to build a browser plugin.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "How to build a browser plugin.txt"; path = "../../How to build a browser plugin.txt"; sourceTree = SOURCE_ROOT; }; + 8415442E13DEB84C00D66D72 /* juce_ActiveX_GlueCode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActiveX_GlueCode.cpp; path = ../../../../modules/juce_browser_plugin/wrapper/juce_ActiveX_GlueCode.cpp; sourceTree = SOURCE_ROOT; }; + 8415442F13DEB84C00D66D72 /* juce_BrowserPluginComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BrowserPluginComponent.h; path = ../../../../modules/juce_browser_plugin/wrapper/juce_BrowserPluginComponent.h; sourceTree = SOURCE_ROOT; }; + 8415443113DEB84C00D66D72 /* juce_NPAPI_GlueCode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_NPAPI_GlueCode.cpp; path = ../../../../modules/juce_browser_plugin/wrapper/juce_NPAPI_GlueCode.cpp; sourceTree = SOURCE_ROOT; }; + 8415443313DEB84C00D66D72 /* juce_NPAPI_MacResource.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = juce_NPAPI_MacResource.r; path = ../../../../modules/juce_browser_plugin/wrapper/juce_NPAPI_MacResource.r; sourceTree = SOURCE_ROOT; }; + 8415448213DEEF0D00D66D72 /* juce_browser_plugin_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_browser_plugin_wrapper.mm; path = ../../src/juce_browser_plugin_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 8415448413DEEF0D00D66D72 /* juce_core_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_core_wrapper.mm; path = ../../src/juce_core_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 8415448613DEEF0D00D66D72 /* juce_data_structures_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_data_structures_wrapper.mm; path = ../../src/juce_data_structures_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 8415448813DEEF0D00D66D72 /* juce_events_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_events_wrapper.mm; path = ../../src/juce_events_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 8415448A13DEEF0D00D66D72 /* juce_graphics_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_graphics_wrapper.mm; path = ../../src/juce_graphics_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 8415448C13DEEF0D00D66D72 /* juce_gui_basics_wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_gui_basics_wrapper.mm; path = ../../src/juce_gui_basics_wrapper.mm; sourceTree = SOURCE_ROOT; }; + 841544B513DEF1DC00D66D72 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JuceBrowserPluginDemo.cpp; path = ../../src/JuceBrowserPluginDemo.cpp; sourceTree = SOURCE_ROOT; }; - 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; }; 842CC4310FA5BD57008C7970 /* BrowserPluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserPluginCharacteristics.h; path = ../../src/BrowserPluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; 842CC8D30FA5D26A008C7970 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 842CC8D40FA5D26A008C7970 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; @@ -70,6 +79,8 @@ 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceBrowserPluginDemo.plugin; sourceTree = BUILT_PRODUCTS_DIR; }; 842CC93B0FA5D5D1008C7970 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = test.html; path = ../../test.html; sourceTree = SOURCE_ROOT; }; + 84F71BD913E6E86D00AFBCF3 /* AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../src/AppConfig.h; sourceTree = SOURCE_ROOT; }; + 84F71BDC13E6E8D900AFBCF3 /* JuceHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../src/JuceHeader.h; sourceTree = SOURCE_ROOT; }; 8D576317048677EA00EA77CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ @@ -93,6 +104,7 @@ 842CC8EE0FA5D26A008C7970 /* CoreServices.framework in Frameworks */, 842CC8EF0FA5D26A008C7970 /* ApplicationServices.framework in Frameworks */, 842CC8F00FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */, + 841544B613DEF1DC00D66D72 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -128,6 +140,7 @@ 842CC8DF0FA5D26A008C7970 /* CoreServices.framework */, 842CC8E00FA5D26A008C7970 /* ApplicationServices.framework */, 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */, + 841544B513DEF1DC00D66D72 /* QuartzCore.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; @@ -136,7 +149,6 @@ isa = PBXGroup; children = ( 8D576317048677EA00EA77CD /* Info.plist */, - 8D5B49A704867FD3000E48DA /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; @@ -144,11 +156,10 @@ 08FB77AFFE84173DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( - 842CC4250FA5BD2D008C7970 /* How to build a browser plugin.txt */, + 8415442C13DEB82500D66D72 /* How to build a browser plugin.txt */, 842CC93B0FA5D5D1008C7970 /* test.html */, 842CC4130FA5BB01008C7970 /* wrapper code */, 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */, - 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */, 842CC4310FA5BD57008C7970 /* BrowserPluginCharacteristics.h */, ); name = Source; @@ -157,10 +168,18 @@ 842CC4130FA5BB01008C7970 /* wrapper code */ = { isa = PBXGroup; children = ( - 842CC4270FA5BD3C008C7970 /* juce_BrowserPluginComponent.h */, - 842CC4280FA5BD3C008C7970 /* juce_IncludeBrowserPluginInfo.h */, - 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */, - 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */, + 84F71BDC13E6E8D900AFBCF3 /* JuceHeader.h */, + 84F71BD913E6E86D00AFBCF3 /* AppConfig.h */, + 8415448213DEEF0D00D66D72 /* juce_browser_plugin_wrapper.mm */, + 8415448413DEEF0D00D66D72 /* juce_core_wrapper.mm */, + 8415448613DEEF0D00D66D72 /* juce_data_structures_wrapper.mm */, + 8415448813DEEF0D00D66D72 /* juce_events_wrapper.mm */, + 8415448A13DEEF0D00D66D72 /* juce_graphics_wrapper.mm */, + 8415448C13DEEF0D00D66D72 /* juce_gui_basics_wrapper.mm */, + 8415442E13DEB84C00D66D72 /* juce_ActiveX_GlueCode.cpp */, + 8415442F13DEB84C00D66D72 /* juce_BrowserPluginComponent.h */, + 8415443113DEB84C00D66D72 /* juce_NPAPI_GlueCode.cpp */, + 8415443313DEB84C00D66D72 /* juce_NPAPI_MacResource.r */, ); name = "wrapper code"; sourceTree = ""; @@ -226,7 +245,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -237,7 +255,7 @@ isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 842CC94A0FA5D934008C7970 /* juce_NPAPI_MacResource.r in Rez */, + 8415443F13DED0F800D66D72 /* juce_NPAPI_MacResource.r in Rez */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -248,25 +266,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 842CC42B0FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm in Sources */, - 842CC4320FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp in Sources */, - 842CC4330FA5BD57008C7970 /* juce_LibrarySource.mm in Sources */, + 8415449013DEEF0D00D66D72 /* juce_browser_plugin_wrapper.mm in Sources */, + 8415449213DEEF0D00D66D72 /* juce_core_wrapper.mm in Sources */, + 8415449413DEEF0D00D66D72 /* juce_data_structures_wrapper.mm in Sources */, + 8415449613DEEF0D00D66D72 /* juce_events_wrapper.mm in Sources */, + 8415449813DEEF0D00D66D72 /* juce_graphics_wrapper.mm in Sources */, + 8415449A13DEEF0D00D66D72 /* juce_gui_basics_wrapper.mm in Sources */, + 8415454713DF243A00D66D72 /* JuceBrowserPluginDemo.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXVariantGroup section */ - 8D5B49A704867FD3000E48DA /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 089C167EFE841241C02AAC07 /* English */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ 1DEB911B08733D790010E9CD /* Debug */ = { isa = XCBuildConfiguration; diff --git a/extras/browser plugins/demo/build/win32/JuceBrowserPluginDemo.sln b/extras/browser plugin demo/build/win32/JuceBrowserPluginDemo.sln similarity index 100% rename from extras/browser plugins/demo/build/win32/JuceBrowserPluginDemo.sln rename to extras/browser plugin demo/build/win32/JuceBrowserPluginDemo.sln diff --git a/extras/browser plugins/demo/build/win32/JuceBrowserPluginDemo.vcproj b/extras/browser plugin demo/build/win32/JuceBrowserPluginDemo.vcproj similarity index 83% rename from extras/browser plugins/demo/build/win32/JuceBrowserPluginDemo.vcproj rename to extras/browser plugin demo/build/win32/JuceBrowserPluginDemo.vcproj index dbfc7496f2..2e3c1d2df0 100644 --- a/extras/browser plugins/demo/build/win32/JuceBrowserPluginDemo.vcproj +++ b/extras/browser plugin demo/build/win32/JuceBrowserPluginDemo.vcproj @@ -182,34 +182,46 @@ > + + + + + + diff --git a/extras/browser plugin demo/src/AppConfig.h b/extras/browser plugin demo/src/AppConfig.h new file mode 100644 index 0000000000..a7b9dabea2 --- /dev/null +++ b/extras/browser plugin demo/src/AppConfig.h @@ -0,0 +1,2 @@ + +#include "BrowserPluginCharacteristics.h" \ No newline at end of file diff --git a/extras/browser plugins/demo/src/BrowserPluginCharacteristics.h b/extras/browser plugin demo/src/BrowserPluginCharacteristics.h similarity index 100% rename from extras/browser plugins/demo/src/BrowserPluginCharacteristics.h rename to extras/browser plugin demo/src/BrowserPluginCharacteristics.h diff --git a/extras/browser plugins/demo/src/JuceBrowserPluginDemo.cpp b/extras/browser plugin demo/src/JuceBrowserPluginDemo.cpp similarity index 79% rename from extras/browser plugins/demo/src/JuceBrowserPluginDemo.cpp rename to extras/browser plugin demo/src/JuceBrowserPluginDemo.cpp index 67a44d4823..d8164cec44 100644 --- a/extras/browser plugins/demo/src/JuceBrowserPluginDemo.cpp +++ b/extras/browser plugin demo/src/JuceBrowserPluginDemo.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../wrapper/juce_BrowserPluginComponent.h" +#include "JuceHeader.h" //============================================================================== @@ -35,27 +35,25 @@ class JuceDemoBrowserPlugin : public BrowserPluginComponent, { public: JuceDemoBrowserPlugin() + : textBox (String::empty), + button ("Send a message to the webpage") { - addAndMakeVisible (textBox = new TextEditor (String::empty)); - textBox->setMultiLine (true); - textBox->setBounds (8, 8, 300, 300); + addAndMakeVisible (&textBox); + textBox.setMultiLine (true); + textBox.setBounds (8, 8, 300, 300); - addAndMakeVisible (button = new TextButton ("Send a message to the webpage")); - button->setBounds (320, 8, 180, 22); - button->addListener (this); - button->setEnabled (false); + addAndMakeVisible (&button); + button.setBounds (320, 8, 180, 22); + button.addListener (this); + button.setEnabled (false); ourJavascriptObject = new DemoBrowserObject (this); - textBox->setText ("Browser version info: " + getBrowserVersion()); + textBox.setText (SystemStats::getJUCEVersion() + "\n\n" + + "Browser: " + getBrowserVersion()); } - ~JuceDemoBrowserPlugin() - { - deleteAllChildren(); - } - - const var getJavascriptObject() + var getJavascriptObject() { // The browser calls this to get the javascript object that represents our plugin.. return ourJavascriptObject; @@ -70,7 +68,7 @@ public: { javascriptObjectFromBrowser = callbackObject; - button->setEnabled (javascriptObjectFromBrowser.isObject()); + button.setEnabled (javascriptObjectFromBrowser.isObject()); } void buttonClicked (Button*) @@ -80,8 +78,8 @@ public: var ourJavascriptObject; var javascriptObjectFromBrowser; - TextEditor* textBox; - TextButton* button; + TextEditor textBox; + TextButton button; //============================================================================== /** This is the javascript object that the browser uses when the webpage accesses @@ -103,16 +101,12 @@ public: setProperty ("property2", 12345678.0); } - DemoBrowserObject() - { - } - //============================================================================== // These methods are called by javascript in the webpage... const var printText (const var* params, int numParams) { if (numParams > 0) - owner->textBox->setText (owner->textBox->getText() + "\n" + params[0].toString()); + owner->textBox.setText (owner->textBox.getText() + "\n" + params[0].toString()); return "text was printed ok!"; } @@ -124,7 +118,7 @@ public: "A message from the webpage", params[0].toString(), String::empty, owner); - return var(); + return var::null; } const var registerCallbackObject (const var* params, int numParams) @@ -132,7 +126,7 @@ public: if (numParams > 0) owner->setJavascriptObjectFromBrowser (params[0]); - return var(); + return var::null; } //============================================================================== diff --git a/extras/browser plugin demo/src/JuceHeader.h b/extras/browser plugin demo/src/JuceHeader.h new file mode 100644 index 0000000000..5dbe269d0a --- /dev/null +++ b/extras/browser plugin demo/src/JuceHeader.h @@ -0,0 +1,18 @@ +/* + ============================================================================== + + This file contains values that describe your plugin's behaviour. + + ============================================================================== +*/ + + +#include "AppConfig.h" +#include "../../../modules/juce_browser_plugin/juce_browser_plugin.h" + +#if defined (JUCE_NAMESPACE) && ! DONT_SET_USING_JUCE_NAMESPACE + /* If you're not mixing JUCE with other libraries, then this will obviously save + a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + */ + using namespace JUCE_NAMESPACE; +#endif diff --git a/extras/browser plugin demo/src/juce_browser_plugin_wrapper.cpp b/extras/browser plugin demo/src/juce_browser_plugin_wrapper.cpp new file mode 100644 index 0000000000..1aab92ffeb --- /dev/null +++ b/extras/browser plugin demo/src/juce_browser_plugin_wrapper.cpp @@ -0,0 +1,3 @@ + +#include "AppConfig.h" +#include "../../../modules/juce_browser_plugin/juce_browser_plugin.cpp" diff --git a/extras/browser plugin demo/src/juce_browser_plugin_wrapper.mm b/extras/browser plugin demo/src/juce_browser_plugin_wrapper.mm new file mode 100644 index 0000000000..1aab92ffeb --- /dev/null +++ b/extras/browser plugin demo/src/juce_browser_plugin_wrapper.mm @@ -0,0 +1,3 @@ + +#include "AppConfig.h" +#include "../../../modules/juce_browser_plugin/juce_browser_plugin.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.cpp b/extras/browser plugin demo/src/juce_core_wrapper.cpp similarity index 70% rename from extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.cpp rename to extras/browser plugin demo/src/juce_core_wrapper.cpp index 2d6380298b..7af4bafb6b 100644 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.cpp +++ b/extras/browser plugin demo/src/juce_core_wrapper.cpp @@ -3,7 +3,7 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - This file pulls in all the Juce source code, and builds it using the settings + This file pulls in a module's source code, and builds it using the settings defined in AppConfig.h. If you want to change the method by which Juce is linked into your app, use the @@ -12,4 +12,4 @@ */ #include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.mm b/extras/browser plugin demo/src/juce_core_wrapper.mm similarity index 70% rename from extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.mm rename to extras/browser plugin demo/src/juce_core_wrapper.mm index 2d6380298b..7af4bafb6b 100644 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode1.mm +++ b/extras/browser plugin demo/src/juce_core_wrapper.mm @@ -3,7 +3,7 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - This file pulls in all the Juce source code, and builds it using the settings + This file pulls in a module's source code, and builds it using the settings defined in AppConfig.h. If you want to change the method by which Juce is linked into your app, use the @@ -12,4 +12,4 @@ */ #include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/browser plugin demo/src/juce_data_structures_wrapper.cpp b/extras/browser plugin demo/src/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..c5f9b3cc4b --- /dev/null +++ b/extras/browser plugin demo/src/juce_data_structures_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/browser plugin demo/src/juce_data_structures_wrapper.mm b/extras/browser plugin demo/src/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..c5f9b3cc4b --- /dev/null +++ b/extras/browser plugin demo/src/juce_data_structures_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.cpp b/extras/browser plugin demo/src/juce_events_wrapper.cpp similarity index 70% rename from extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.cpp rename to extras/browser plugin demo/src/juce_events_wrapper.cpp index 655d816baf..06affc1d9b 100644 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.cpp +++ b/extras/browser plugin demo/src/juce_events_wrapper.cpp @@ -3,7 +3,7 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - This file pulls in all the Juce source code, and builds it using the settings + This file pulls in a module's source code, and builds it using the settings defined in AppConfig.h. If you want to change the method by which Juce is linked into your app, use the @@ -12,4 +12,4 @@ */ #include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.mm b/extras/browser plugin demo/src/juce_events_wrapper.mm similarity index 70% rename from extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.mm rename to extras/browser plugin demo/src/juce_events_wrapper.mm index 655d816baf..06affc1d9b 100644 --- a/extras/Introjucer/JuceLibraryCode/JuceLibraryCode2.mm +++ b/extras/browser plugin demo/src/juce_events_wrapper.mm @@ -3,7 +3,7 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - This file pulls in all the Juce source code, and builds it using the settings + This file pulls in a module's source code, and builds it using the settings defined in AppConfig.h. If you want to change the method by which Juce is linked into your app, use the @@ -12,4 +12,4 @@ */ #include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/browser plugin demo/src/juce_graphics_wrapper.cpp b/extras/browser plugin demo/src/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..8668e4f787 --- /dev/null +++ b/extras/browser plugin demo/src/juce_graphics_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/browser plugin demo/src/juce_graphics_wrapper.mm b/extras/browser plugin demo/src/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..8668e4f787 --- /dev/null +++ b/extras/browser plugin demo/src/juce_graphics_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/browser plugin demo/src/juce_gui_basics_wrapper.cpp b/extras/browser plugin demo/src/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..52b697ea2a --- /dev/null +++ b/extras/browser plugin demo/src/juce_gui_basics_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/browser plugin demo/src/juce_gui_basics_wrapper.mm b/extras/browser plugin demo/src/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..52b697ea2a --- /dev/null +++ b/extras/browser plugin demo/src/juce_gui_basics_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/browser plugins/demo/test.html b/extras/browser plugin demo/test.html similarity index 100% rename from extras/browser plugins/demo/test.html rename to extras/browser plugin demo/test.html diff --git a/extras/browser plugins/demo/build/mac/English.lproj/InfoPlist.strings b/extras/browser plugins/demo/build/mac/English.lproj/InfoPlist.strings deleted file mode 100644 index 5e45963c382ba690b781b953a00585212b898ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmW-XQ3`+{5C!MkQ~2$No+IcIkqMDxWCV8j>LCj|yTg2Mz+o9F%uHlf9u}h9EuK`F a!Y*1dX%G66ZqL#C$|bw0ZoP5@jOGW1ArT7z diff --git a/extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff b/extras/browser plugins/demo/build/mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff deleted file mode 100644 index 82326a6c87c353e2999689b516472edb622dfdf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3068 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 diff --git a/extras/browser plugins/demo/src/juce_LibrarySource.cpp b/extras/browser plugins/demo/src/juce_LibrarySource.cpp deleted file mode 100644 index 234af483cb..0000000000 --- a/extras/browser plugins/demo/src/juce_LibrarySource.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -/* - This file includes the entire juce source tree via the amalgamated file. - - You could add the amalgamated file directly to your project, but doing it - like this allows you to put your app's config settings in the - juce_AppConfig.h file and have them applied to both the juce headers and - the source code. -*/ - -#include "../../../../juce_amalgamated.cpp" diff --git a/extras/browser plugins/demo/src/juce_LibrarySource.mm b/extras/browser plugins/demo/src/juce_LibrarySource.mm deleted file mode 100644 index ea3a3739eb..0000000000 --- a/extras/browser plugins/demo/src/juce_LibrarySource.mm +++ /dev/null @@ -1,11 +0,0 @@ - -/* - This file includes the entire juce source tree via the amalgamated file. - - You could add the amalgamated file directly to your project, but doing it - like this allows you to put your app's config settings in the - juce_AppConfig.h file and have them applied to both the juce headers and - the source code. -*/ - -#include "../../../../juce_amalgamated.mm" diff --git a/extras/example projects/Builds/Linux/Makefile b/extras/example projects/Builds/Linux/Makefile index 00bea9f9a7..7370d277dc 100644 --- a/extras/example projects/Builds/Linux/Makefile +++ b/extras/example projects/Builds/Linux/Makefile @@ -1,5 +1,5 @@ -# Automatically generated makefile, created by the Jucer -# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! ifndef CONFIG CONFIG=Debug @@ -45,10 +45,12 @@ endif OBJECTS := \ $(OBJDIR)/Main_90ebc5c2.o \ $(OBJDIR)/MainComponent_a6ffb4a5.o \ - $(OBJDIR)/JuceLibraryCode1_682c927f.o \ - $(OBJDIR)/JuceLibraryCode2_683aaa00.o \ - $(OBJDIR)/JuceLibraryCode3_6848c181.o \ - $(OBJDIR)/JuceLibraryCode4_6856d902.o \ + $(OBJDIR)/juce_core_wrapper_b07ed786.o \ + $(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o \ + $(OBJDIR)/juce_events_wrapper_a8dc8280.o \ + $(OBJDIR)/juce_graphics_wrapper_a0e77172.o \ + $(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o \ + $(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o \ .PHONY: clean @@ -75,24 +77,34 @@ $(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp @echo "Compiling MainComponent.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode1_682c927f.o: ../../JuceLibraryCode/JuceLibraryCode1.cpp +$(OBJDIR)/juce_core_wrapper_b07ed786.o: ../../JuceLibraryCode/juce_core_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode1.cpp" + @echo "Compiling juce_core_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode2_683aaa00.o: ../../JuceLibraryCode/JuceLibraryCode2.cpp +$(OBJDIR)/juce_data_structures_wrapper_4f7fd480.o: ../../JuceLibraryCode/juce_data_structures_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode2.cpp" + @echo "Compiling juce_data_structures_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode3_6848c181.o: ../../JuceLibraryCode/JuceLibraryCode3.cpp +$(OBJDIR)/juce_events_wrapper_a8dc8280.o: ../../JuceLibraryCode/juce_events_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode3.cpp" + @echo "Compiling juce_events_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JuceLibraryCode4_6856d902.o: ../../JuceLibraryCode/JuceLibraryCode4.cpp +$(OBJDIR)/juce_graphics_wrapper_a0e77172.o: ../../JuceLibraryCode/juce_graphics_wrapper.cpp -@mkdir -p $(OBJDIR) - @echo "Compiling JuceLibraryCode4.cpp" + @echo "Compiling juce_graphics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_wrapper_e00f2ff0.o: ../../JuceLibraryCode/juce_gui_basics_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics_wrapper.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_wrapper_b6e18277.o: ../../JuceLibraryCode/juce_gui_extra_wrapper.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra_wrapper.cpp" @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj index 28d3d6e355..34dc2389de 100644 --- a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj +++ b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj @@ -20,10 +20,12 @@ A9F87921F5EF364874BF8D08 = { isa = PBXBuildFile; fileRef = 38D39096CD656A18BC6E6D85; }; C67B5243DBC7218FEC5DBCC0 = { isa = PBXBuildFile; fileRef = E7507E799D8BDA92BDB78915; }; 9B11A7532637EC12F1DC4B2E = { isa = PBXBuildFile; fileRef = 0DB195C2B3538434D7D20B51; }; - CFFBB821ECB7D85603624533 = { isa = PBXBuildFile; fileRef = 57FFE120531343D50B7D2D28; }; - CB81C9C2C8729E6E3D47894E = { isa = PBXBuildFile; fileRef = 9025A92B6F0FB6F8EF51A168; }; - D718D953943D6576572CCD49 = { isa = PBXBuildFile; fileRef = EA4C72277CEA392BC33435A7; }; - D3AEE9F470093C7E82F10144 = { isa = PBXBuildFile; fileRef = 23634B2289D5AC4EA728B8F7; }; + C2F06AB24C47C40A7D744BDA = { isa = PBXBuildFile; fileRef = 49F82562788D22155BA6027F; }; + 834983ACC3944599D2033A8C = { isa = PBXBuildFile; fileRef = 42C3D1882155445973CDC6FC; }; + 5C4B4C4C978A1E91EDAFD15E = { isa = PBXBuildFile; fileRef = EAEC535F117A301B82A1535E; }; + 3E2412ABC1E675C5D196518B = { isa = PBXBuildFile; fileRef = A360104FE6E53E87F6286880; }; + 1FA264E289C57040EDF54581 = { isa = PBXBuildFile; fileRef = 85EB813A1B337F2133DBA6D1; }; + 176036A9FFC9B760DBC7081C = { isa = PBXBuildFile; fileRef = B952B50156EE2A711202FC7B; }; 18665A7A93EDBA956B64774E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 076655B982BD7FD33C52BAEE = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; C820D5B3DC8B4E486B13FF4A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -41,25 +43,1340 @@ E7507E799D8BDA92BDB78915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; 0DB195C2B3538434D7D20B51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/MainComponent.cpp; sourceTree = "SOURCE_ROOT"; }; A1E4765345FA980DAFA5BDE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; + A32A4F9CCF1120737F0E829A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75CFB4E1F7A81E546B06FD83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 2E0B7EFF592C64B76E8A7C8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 1B48B383C52AF101BFF088E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + CB7FD4A1F3AEA0147AD43C06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 84D684FBFB5835F09C4F9CDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 65C2291AC33F649689083F26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5CA34A7C52A4672E6DF9F0D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + 9D81929523C747F368AEE13C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46718D0C31F71B0DF633530E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + BB608C6FE34BCE4356FC85B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + C627F262BF41AB8E41F3C610 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD544BE1455875DD0C793A6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 865E71D269BD532E5024AE5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA846A3A5B04B59CF29B7E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 1F73888755C513EE2AFBDA91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F29F5B6B0204517F9195CF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + CCCC46F3B4F616B348AAD085 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 535AA91D48E6658C3EF54FBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + 65923C79ECAF77D60FF6BBFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11CAF73EB61AB6446F8E6B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 712318A3DD7DAFC92A0DCC43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 351BBA3A8C331C286EBC0355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 2435EB7D347386D550659C78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + D05063FB5DD1CA53828969AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7EF119C6AC3D4E45F27FC514 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 3D0B4C3DC795650542CD3504 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + AF873D5814A1FA50EC93021E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + D4A4AB2A3F60563DEC7941B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 563AD20CBB3C6A83D1727F1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 008294F81F18B5248F7CCE54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 9CD50EAA76FEDBFFF2375CD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + 6CCD1FADA256307827394621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F979D97853C3A0AD27EB090 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 52588D13BDE8D9CC21CF8220 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + C93CF448310DD14A2B22D34B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 6C827895A84242F0A1CE0D18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 81EC2AC7F8CABE55DC2FF8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + B7008955C8758E6857070D7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + E9355AFD088D78C6F2777239 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + E154BD37CEAF906C57F237EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 675CE87CDAF49436E626188C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 2C2A2CEA22BAF276F40F56ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 3CF69DA88D6EA546060B595E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03FF7AE88AE0C73311F714C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 84696D46439DDCDCB49B4350 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 588184748D4BE154FD5CBC65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 2194189195E4CC079D969BFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 5A389F8672EAD1EFE9A456E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02BC5E3792D9D824E13568A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 600A5C30DE0BFD7BD076BF7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 6BA82775D60D941BBEB366EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41AC41EDE0A3358C5C4349B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 2E35B809981470A547C02E64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + FEDC82791673E4F245CF26F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 147458ADA264D55006A27E8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 980822A0F1F5E7EC8FC26D80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 50CF4B7F3410202B4C569285 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + CACDAFD08BDE8A84B0BE8EA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 31F730546E3B29BFE92A1D24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 562F94E00EE23C919232C7A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 6018E372E585BCAE4E0B2F7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + CB7126413109ED8F26B039D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + B27DEC31391E5B719E9D5CCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + E65A72904EF2E344367B4420 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 0F817CF0CB7CA84C761C9218 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + BDA884A96EF84807EC157250 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2293CECE46EE94D13E0D83F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 7398FD6C7958A5CBAC60BB6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + D1CE275FC4266873EB598DBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58E047D7D5111E13E46E42C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 421807FD3ACD799FD567CD40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + C151D21C9B0CAD9F75EA4D45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 707561D7119BC3A1DA3B3468 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE94B432B3C746718D0C31F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + A12E919DB1210F76AE6A0E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + C9A535E6CB35F830EB9D237E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26FE216325D5A9AF01481350 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + F6B1B0E09E43EA0631EF7606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9703F9629F59179C74C3048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + C26B82DC5CF294BC271013CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC578E99FA19130E95641D6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 9C67A8EA8FDEA0C82701FD1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7B3F0069280290486A6D9D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 79D623D8720122C155A2EB50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5DBABB33A712C4E5A94CB517 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + E3C87BF96C6D9D01A3D81FCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1EF8B8DE8B7F53E006D5D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + A91F9C5DE419991013E7C0F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + F92AA16870D863240379EB35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + A7F8E5B95FBB8D6AE30B187F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1BEB324693FDE2E34AE4B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + 4D62146674A1C5359CBB3D43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + FC987242A70ED75067FE18D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0DC7444C5738A7F8986BA32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 3DD300529F3A7E6CB4222EEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AFCC9CED2F158CA5530CDEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 1C17700C05D61AB7180B7B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4DDAACDB9DB85BEE8E6F5E09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 394E055BABC6011E508E0E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 041D56E8CA4C914812DF01A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 9855BF167A8DFB148E38D9FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5F4549F02171551AA546C6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + C777D53AFFA5FE52CD55AD24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 666CDF4A92AE3864B8EDB533 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 3C282A0812E4882AD32ED8A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91ACB8A2D49CBF4C2EC63FA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + A5145C8116FAC385688A7AA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + ABF9C15FE51D4073E3D25B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 630394FE5104771F86C9380C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + CFC3B1DD41AAF04DA2370810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82C65D12CEBBCB34F414D7E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E955235786059FD5CF357570 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6DECB9EDA7852A9F15DD7C51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0309CDD8778F178D42FD62CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC178C0AB6FAC9A4790D7E61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 92CBC00C8FC9B7492836FEAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3108DC3A632E9975D4BEA5B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 1208B46953A3BC9AD4B7D7BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6BEFD957A2AD4145FDE596AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + F223E9AE5147B51FB935F204 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53A49DCA988366E5B87FF6E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + A9229B48F7DA7A24D9B62966 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + CC7069271842C973DA165D85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 0335CFDB03C86E27105B010F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 965CA1CB53311520756C0CDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 06CE3977D03B24A00E252DF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 079797CB902D84B916B59027 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3FAB396BE4D0C393B223E2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + C21D55B64564A970D588CC35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2D5BBB5AFDCEDAE6A416D94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + 890799F45FCAD5E316D06C41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF8C3A4B228A30D46F3EF04D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 5DFC7492E7BB1B30384AC91C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BF06F5E160F06E7FAD8B5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E0955972B5FA0CC0ED5AE629 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 825BCAD4F61876D388BDAAD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 26E17474E5F0C0E8B5105D60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00B3EB25323B87196914DE18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 580C2C23E477330A9643F50D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + E870E5CD43C394DF822EDE83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + 671C4199DBE1792E022431E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BBCC0624D9A3688B47BD8D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 8AB7098D46EBE80C37EBC7B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76459A61189B0AB0911B4183 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + B4872E7D5162A18A82C51B5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 858A04C4C8CBC88D4A2179EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F15E86098281C4A72FE7E1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 7EF0CC632F794A70799D1638 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C849742982323210E18BF08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + C7F0A8FDF735305EE131ACA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B82FF0B97DBD49B53B8E42E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10EA7568D49B9172CAD24BAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 7B2925D0DAFA0A1EE8F96FA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7667770667CA5B6680E291CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89111F42A304186F2B8F8669 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87F4E296E87D8DA5E892039D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D6B8568AFC101C531E8C3CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 31E7FBDDD1DD1A20BCAA432E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 27BE346DB46F7D983ADACE2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + 8F96075E1E9CEB0D8A4C0F37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 0F944E25516957BC1062FF8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + DE05BA7F0D9AB722E0B3978C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 99972D87ADD1BA02C13D2DCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + A68A2FFAC0554963E5146334 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + BE641D06A96AB1619E2CF343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + B05B56D82B915CF19FA0235C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 6A9E7AC0D45D676219DDC7DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB411F3DDECC4C1FFE37F94D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A125A5C938D895E8F029FB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + DCE62DBFE9ACE26DB8D6BB7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + DDDE89CD5E8F8F5E56D76A0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E4BCF4872013883E6BC58DA = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4A014ACA046609DF770D6EBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 617B7CC21609927A1116167A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 199C0EB2D77EDF6B8C7D3671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03FBAB3743D7CB07659E4753 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 95B3F3AE0F0E74EFEF453CB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A8284D8DFF35FFBA1FD800B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + B48AB5F597ED3425F3E8BA18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + 8CE01EF127F367DA465F4C50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4AF9296F0EC081B28C4C810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + 70BCB5CAAA737BA5D9AF31A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA1F7234162EF60CC8CA9988 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 02E64BAC03BBBE87F4D3F200 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F46DA2D846DC709FC444DD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + FC3D728ACF9297C377E5F84E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 30478AE9B1AB613EF67957AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + B5D3BB2FDB0DA95EA51C939E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + D766D4F894E4A7B0259EC54D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8187533D81FA5F1907253111 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 68E3640FEE810935B032CA4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 3E7E693F81D0870A67BE1EB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6C820EDC196A6439941A292 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + 448335247CAB88CFE1F56E76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + C69D945A52D6895B4A865F19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 20B363303E41776759EB3902 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + A33528F02219E34E5FF85DA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 26E5392A22296EA13B471A2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + A2DA0B15E14ED7CA655AD841 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + D404EF4902D824EFDA4F94F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0C9FA9DDBFA83D677C14D7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + 7032D216A2E339B9A5C32237 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DED2ED05BA2DA3D95081470 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + 6BB8CAF65D8655EAB63AB654 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3835A9A6414CEE25ED6AB5E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 19E0896299B190E459757AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + EFD05000AF3C90F7F4C84A2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38FD5B7BAF0DBB13FD9D42A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + 9C51CCEC4A64439F1409854A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + AEC7FE0322458C9C2BAEEC77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 1EDEF371C7BB57BB5900C080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 01361E3F076536DF2DCA8BD8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 466522CD4C5F1335BE5E45C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8ED3771E0A50CD816D2A6FA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + D125AD2DBFEB171B7E5FAE5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 923587304E96F88E38F35F62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + AA8CE7F363D9F673FB4C540C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 476F154F268C1286FA447164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 15038E8308631BDB0AE9C47D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 391E372A26A5761D64487138 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 66F1583578E9B653234956D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 55A99D8C159067DAFC8BFE4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 3B01934E1717660BD624B847 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + BE0ED9F8F9E2E3B80F6A8B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0FB65267CB231D728374D9E5 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 311B276734E69145BD8ED899 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + 724DA317CDBC6C4FBA2A54D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + E78630EB80EAC0B8A58426F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4572B3F34F15046A3CAF7A35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + CBD02F4B4CBC2D6A2D469C40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9CCFF7BD07C36AC2ECF10942 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + 7B50C7176913E89123C8B52D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2FD49927B4D14C0ADDB1A6D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 1BCE61A5068CA13D8F47FF9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6318A83AE69CB10531D0E12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + F9DB3F1167D1AA90D1CD8AA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 285CE0550D814A792D793BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + E07243CF610E8FF712E368E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + FDD0DD9C51D920B7935516E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 0637806CC26B12477DD3EF0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + EDABDD936506B77F19D767B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 6A6F36F2D317CC9800269124 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E337FE289F6F167B3AD4605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + FDF2AC7D0C36ABADF47EF4DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB098985B00A713586C8964C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 5FBB12372B12A3D0A62EF58A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + DAA58C67379104E12EE38993 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + B11567D3979F2B664463A67E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 164761962F894D77EF247CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + 474CA212B1B8A981AC3A10AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CB9FEA63EC2AFAE31AA694B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 25B1F5FEB57DD20E48EA5201 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8DF540BC2CEB028F9E31EC6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B4C580DAD0E86277828FE4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + D036A7BB5337D270BC33E451 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BADC0CF1905D0CB829741A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 56ED8E3303A502BD3D911673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 1E86215EC6B571948B8036BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9421B71BFE264DA9729106F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7BC98A8A3C4DE1A0D7677C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + 6E35CD50AA827127AEC63385 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F6253BE6DB6BEBE65B428A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + 82F87ADC7312F96920443B40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45B33570E62059C1525FD0F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + DC779E57F8CB98A35B168B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A30B247E081D099964DB201 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + 8BABAE34D97FB489D68C1343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + C5C5385C4575C9A0FAFEF513 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 990953166A7B50C7176913E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + B588504FE2FAA13CAF8253D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 34A0FC3D36D12F6B31FDFF1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + F640D7FB81C0CA166489B927 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + A9388C83D6FC7DD89E8269E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A37E4084E27CF3353F61E3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + 7CA77A4557C6898695EB11A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + D762E76352960A7F8F1E30E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 181D04273DA500027DF3920A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7636D7B52DDD313FCC84B9C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 1C57A39FA2C6BCDF63A35A99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2075A13DDFAC11BBB92F4680 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + E8498381F40E886E4AC19D3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A20DF49E875B833369FE77C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + FE588BA4D4EB90CD564DD456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 952B7FEA693748270A467FB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + 936BBD5425D74172B20651CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65B6E9A96454A73683C07E68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 133D9771D268413B1DB94C19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + D688D704CB9D3D799056426F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + D10902733297CEA2FA2F0099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + CBEBD1A75B19D34CF3DF4C09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFC1106A08C72CF352BAD00C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + A95B260382FF6601B63F7203 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CCC4B3F299B3E55BE902D5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 85C2017AF261ADFCE8FCB194 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 555399EE46713DA61EDCC2F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 9AABF931E5C52CE62284D475 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 48F3A658B6E1A3D74B30C634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB9958110813A97F20C1DAAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 060C465DC252D61EE16F2B77 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4DBA2A5E5E10D3CDA6283EF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 1AD9ED83015D842C42CC7A86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC3F7A1CA13E69956D86F28E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 262F0D7D8000F7F53925CFF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + 4CC6031DA4AB28D347459614 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + F084D6FF2EB330B9904D0AF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 5E8E8A4241239D0EE45895A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86FA52164BFCDF57A5AA752C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + 8FF0145FB4E6FDFA40090D7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE0E07250091FEC5157F9A64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + F8B0FCE01F72F295071064C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC29588CA9F0F0538B653D18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 01F8AE0DF40CB1128141400B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F68180144365769E1F73B8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 0D309C9C627A2C679B3FF56E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 0ECE17F4A4C6504709D70387 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 772172F45F2A2A15421A84B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E592CB0ABF21DB94E746FA03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F026D37C30D556B52D11724 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + B950202F4EB67ED6018E4EE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 882F76997B181590A694D130 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 384941BF1DECA37CD6C7F9F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + A16FB94B53D56F9CEA47281D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + FDB93E1CEDD3ECC8109D7B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26D8D5EF294B2AF3DE83F6DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 42AA21CDC91EA122266EBD78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + 427BA649EFEE4020AC0D436B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + 40B5A2B8C8A3511FE91672FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 57628E11DF23738E4EFD2323 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 428689A9452C4FC0A1D73487 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + E78FE4B7B5973D5E4A640E6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 1FC84A5FD219396C6F24387E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E4D9E60356F5D28A5834DAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + 7A36AC3848F3C0CB23AD4787 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 510C0E72D8329A64C007980C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + 54BE2FA1F57658061BB84862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0CAD114B234F37DB5DFBC54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + 9175EA44CDEF2E2C35BD8A4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + A088A88BCD9A7FFF9D6E6731 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + CE30C1EF785BDCE838824F9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 2FDD9BBDBE233301DD5BCBAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + D66332A1C9ACD98D73DED9F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + 8B884C43C8D053274571F9D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11C2F9B4B07C9D4C602881E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E128987F279F2AE579C10528 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC0386165FB0C17064476FE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 551AAECF9921F7B2D23551D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0DE973A3E2A4D89D9A869B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 8FA4AADAE4E48C91DF955DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 29131610EAB20D1B13B452DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + B9CCFD10A75B9FD49AA98F74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC0FB5730E4879CCFCD5A9A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + 9F706C588AC41F5FE5D5090A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B0EC1B1EC4B23C2784D6074B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ECB901FEFD2375C68BCFC2BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46E9FD790663A4CDDF864977 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + AE1DBB79887281F961BF847B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C77F929FF78E0621DDDAB9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 2668A6D79975F9051DB1CB5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 102BAE57AAA43A7685FCBD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + B417B91A10C3513CE5603EAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44A17B11D96CDB313ED60D8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 13BADE6C36A6A7A25C3F4975 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + A52711DF48CAF646C3C4D149 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4C753F7E5793ACDC859AA1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + B5EF34B14DE4C3BDC02338D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA7DA96AF58D027A7A0BBD63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + BD14E40BF6944D8F2F5FBE91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47A04510427BA649EFEE4020 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 8D89DB4E908C3FF95BB36590 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + C41703B1FAA677883265748E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 010703CFE5A0C8447BD05168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 801680BE5BF1653DB6A0B11B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 1CFE031686F6CFE015A9DAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + FACAB46397FF6AD7EE935063 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + F06F736D770FCDAC86084A49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5A5A2ACF90D84E451D4D5AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 18C8D7316116B9DAFBC59C2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + E6AC13434B132162DF0859BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA44F72A4D61BCFE4EBD14D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + C6FB1321A49F448690525E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 923FA63584DA3DC9F454670B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 09B3B1955BACAF5E8D471184 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + DADE2F4F6CD00500D1EB7563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + E4E8A1DCFBDEA05CF4490498 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + B21898E93551752542DD9D77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 77A3215BAB9CAEA2A4EA4EDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1341663271E429AC168A6E26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3A602155AE376914AB3D00A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B03DC8A825E0E4F46C6012A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + F8E51849B5980D23E62FF6BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + 77D6F061D40DA56AFA1721E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 1240D7D11E530E72B4EB326B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8C9A53F6FAE609459564257 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 79796E142BF9D279F07F939D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 733E629386B1DC98717F1C20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + DC6793630C8F66B24B5AC5A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86B93D6EA85E0878C4DF8009 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + 9DF87A1EF439C00131C93290 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + A53F600989A4F02ED77E6448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + B08C30CDF7A142B670C20FE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38E2E974C3CC4E489621B96D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 31035DE98E2FB726C645ED10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9292ECA434A41F19E037A24E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 8FFABBA161F1882484F858E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADBDF87BD19F27AD373E3570 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 24438EE90BCB1769A5BDDB15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 076516FAECF8D5361E597AD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B5E74F550160AE16974DF1CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CC215FFD41AD2EF191BBF6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CBAE370724A30DC42EA602EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DBFF1C9AC88CC2791F91388 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + FB01F82BCC82F92921F90748 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87FD3EF030E4ACE337C6204B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 79596AC1B35E783024040C61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4F6397A2B69066806F506B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + EE8A8AE67191BF286978FED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E60C5F02FAA094125F9922E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + 6545813E67C2C2981568979D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22D6ACB55941087E130401C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + C3E811FA68100FBE3CF672D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E7DDA2B3151609C28F1FDC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4D159AAB26ABC80936247885 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3C55224531530D36606E7D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 289392DCB01150EAE784EB75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE595B010DDA41DC30F8F034 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 9739BAE482C8FDC26CA0A158 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA6D54A86974C177D8C819C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 0D7E160135ABF94CB36AF921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D907A470244BD49A696A763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 1C26A34ED09398E87D842D15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75A51AD8107AF8967F00E622 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + 72C8A73787715A1BDB64C7B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + F31FD81E508069924CFBB2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + BE263FE98CE77A5427BC3213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 704165AD9FDBF1F17A79FB88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + F23700EC9B3625585A97F3D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D7BE84D46270BBB219BED044 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + 817652EC173A08676F6E592A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF7E735B8F18A6A56A1E6E99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + DCBC8F3473E5CF5A8F4FB772 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8503C9A3B406687383E7B174 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + 6FAEB244A5931337D65B598E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2AC8FE42EC2A31068D09A6B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + D9F58B09F67E00AF09B4A71D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8052FA33C4800A40DABB1B08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 483A6673516013606125D4A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + BCEC73FFCCBF87AEB18FAE8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + 5FE7484485B599B65B575077 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + EE9E5EC214D155A9628D5B7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + 4CECFF3C8E0A5E781BDDAC04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2B82CC21E4D999B4AA51FFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + C3CE7E78BDB63ED7C5594614 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 109A47386FB02F6A6E521132 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + FB96D2AC82EB2CD73D58C3E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF89EBAC8A864AAC9A9E6C27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 4519E9C892334AEDC1D1E5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C04FB0903CE700EE4810812 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + CAF81A6FB2BE6EBED029A0E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31C4644534EFBB2EEF0E5EC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 02E53134D5DDEA9C842E33E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED1B2AFE610AF9E4ADCB191C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 5F3CBD7273E1585E18CA841A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9284D221BA17C7E5DA682A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 22BB598301E250735947DAD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7AF029702B3954F6968AE804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + D96D466A5F6DD5211495B984 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 267AFE448F8ACAAE9A5354E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + A30DAFD73D09090C0AA9AA58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F326A56EFFBA2D6CE7AA12A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + BC8987536AFBDD9313457B32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A8ADE53E7952417927E323B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA271DB22A58D8F8AC933714 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DA00D76D8724137CF1AB4144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7EF589314F8C7FBBFD5835F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EB3D11D0E9D5BD4D41C0B880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76A97601D2FD08C0932B30EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 823FA000B2C62F9307B17346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31C617A6BD78C8899E3EF358 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9E09EF0CEA1E377BE6E0B2FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 33AF1ED3B236DED58212C797 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 960B68DD9D277C1BB9429AED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CA6015153DC88D575B27C9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 029098BF8FB854332A788E51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D2C47DF6190643015D581D88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CC4F4DB2266D3BAD65ED1168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + B693FB9E8CBA57496271737F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 8DABBC640E7A4B4E84D45CCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2220A5B902E6DF794AC23AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6D782142837DD19790900838 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + F91B17758DBB6DBA39C6D1EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + B334BBEF296B148D5E8B8D0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8993CEA9FF769BFB8D5F4084 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B0FD3887A8F63665DAD73E0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + AC2B9275540C5CC70CF34252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4FE2203D5739F86359B244B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + 6B8C1F3D77BF303BE4A1C3F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + D09A1421469CC1A9B2675AE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 24F52042CD67851BCF3F24E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED359C0FF49D12BA9F60F640 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 75EF08B8A96C65C118C400AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1D3AD092FD44E44214F0048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4F74B928AD873ECDB685CDC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42E209D1A7282D9355B4F623 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 29BA64947611D66FA7699180 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 606EA04364C448E428335991 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 976CB35D28D5A83B6F5441ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9AAC2AB7CCCCF43268C936C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87C5D5BB9DA78842A182380C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 94C6758E72DFE938197E8293 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38AF5FE5BF4679D9201C5AAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FFC7E0131147BBE8A74583CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42C7C43436C7EEC006E04E14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 60F477C385B734405E47BC92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + 460B6001A348A4ABC2C63A61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10E919D49BE322050F2B8946 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 512F7515354D54B4C097B16C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFBDB0925388FC99EE6BB8A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + 96A1FB30A13FCD06846509A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F407D523CB494344FFF5DB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 5DF44E20AD72E55F2F83B495 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF35F5314CAC65923ED405C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 3D8ACAF9D371CC6FF992D1B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E89D3D502DEA86CB3023441 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 02BCB0289AF914BB165E14C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + A72735B11FDF0A75C3752BD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + B14C1027DFE30E3B66B0A01C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7EFB40D99C9C96C1946F71E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + EF34A41325E5EB605C75F440 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + A6A5D58849F5C4CD7901C66F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E2A5E87734F794AD8EC795C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB3CAA98DF478054A5B1F833 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 4D9A9572AE868B160A8A5D67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + D022D69F8BAA63361E4C4123 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + BEE2BB0D198B116EF2F0D657 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE2ADA5DC3CD09C6CAE4CB19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F361FA4B9580942DB5BB12D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + C3106A0E4E59C8B6916567B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + C6846B813744A54BE09FF646 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + DE4337EBDFC00F4053F0CF08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 6E11C12629C29F774EF4FAA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 2B5C71C695A0692F630B7BB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7D2F85FCD2D1A81010E93AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + A1836510B169F825DAEB5A69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BD7C5E9B0356421136FC176 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 99D90DF3A6A405AD47BAD5F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 32398E867D19B0BFAEE218D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BDBFF82A17CB1891AD01762 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C40992C55B348EF67123956 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 4EB82AA5AF01B73D17DA570C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B82243C4E4390DF87B90DFDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8BF06F0C56C3CA061BC57220 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 2C4BC31C95D6EA8C67B450A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2BEC9A164BBED99E6DADD70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + B09417846B35FE353DCFD810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + ABEDE52541F35F08DAAB5EDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 81D58EE87F67A29DC586F785 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 46DE95EBFD5DD32CF3C0E496 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E1366DC19FA3A3D19F7C6471 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7EEC4E73CC2943FE741FACD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D1BA5F10EAC1A1F3031D8A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + D2A264521FA49FE59C9637AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 0CFD9DA207467F0D87F7474D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34B4DBFDD45CF7DC3ABE112C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 53CC1C46A4B860260CF66012 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1600235636BB13FC2229918D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + CF05AC27D04B76605A510DD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C5C06A01666B3511117DB717 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9DD20176AF51856EF56EBF53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F39B965AE2462169693C84A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + E12BE0EC1DA4FB8EF6728EBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35E88BCF20A6CB57A96119B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + 3852D921D7C8D22A730FF046 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71673B106F6D7E71D33D4831 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + EA1AF200A6422797CDE59403 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C6B318D6930A05FF86AD97D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 14BF0FC7527C8C444DBD45B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7083827845431F26B7995FDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F0522F4C2C81C92515A3DF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + C9B058E8FE2E685D261DF159 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + DD235D415EC7781D7268A634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E482CC19C62F7EB0587B605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68630A2F219CF0B422990F5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + FC1C12941D40CE2CF0C3A0BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2F7A7D923698D1E5BB1B39B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 87DBDF7F4E04271FD004BDDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + BFABC09D9267DC5E2B3CB6E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C03857EC18D17BDDC9D0CAE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + C31446ACA9A16ECC4D084BA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF6013FBC59AB0836FB70315 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + DB0DF608454309742580E256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + F79AC6171CC52BFE4F3EFF7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; 8B21C8D0F53D4B6647916A6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + 49F82562788D22155BA6027F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 42C3D1882155445973CDC6FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + EAEC535F117A301B82A1535E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A360104FE6E53E87F6286880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 85EB813A1B337F2133DBA6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B952B50156EE2A711202FC7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; 43AD9F8DF7F760C6BBADDECC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 57FFE120531343D50B7D2D28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - 9025A92B6F0FB6F8EF51A168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - EA4C72277CEA392BC33435A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 23634B2289D5AC4EA728B8F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; A0C5DD7F69DC35BF462718E4 = { isa = PBXGroup; children = ( E7507E799D8BDA92BDB78915, 0DB195C2B3538434D7D20B51, A1E4765345FA980DAFA5BDE3 ); name = Source; sourceTree = ""; }; 4297D3C9A6348BA224516847 = { isa = PBXGroup; children = ( A0C5DD7F69DC35BF462718E4 ); name = HelloWorld; sourceTree = ""; }; + 43E552497D1816862DB19695 = { isa = PBXGroup; children = ( + A32A4F9CCF1120737F0E829A, + 75CFB4E1F7A81E546B06FD83, + 2E0B7EFF592C64B76E8A7C8C, + 1B48B383C52AF101BFF088E7, + CB7FD4A1F3AEA0147AD43C06, + 84D684FBFB5835F09C4F9CDC, + 65C2291AC33F649689083F26, + 5CA34A7C52A4672E6DF9F0D4, + 9D81929523C747F368AEE13C, + 46718D0C31F71B0DF633530E, + BB608C6FE34BCE4356FC85B5, + C627F262BF41AB8E41F3C610, + DD544BE1455875DD0C793A6D, + 865E71D269BD532E5024AE5D, + EA846A3A5B04B59CF29B7E53, + 1F73888755C513EE2AFBDA91, + 4F29F5B6B0204517F9195CF7, + CCCC46F3B4F616B348AAD085, + 535AA91D48E6658C3EF54FBF ); name = text; sourceTree = ""; }; + 0E5F86319AD56FA407F14211 = { isa = PBXGroup; children = ( + 65923C79ECAF77D60FF6BBFC, + 11CAF73EB61AB6446F8E6B22, + 712318A3DD7DAFC92A0DCC43, + 351BBA3A8C331C286EBC0355, + 2435EB7D347386D550659C78, + D05063FB5DD1CA53828969AF, + 7EF119C6AC3D4E45F27FC514, + 3D0B4C3DC795650542CD3504 ); name = maths; sourceTree = ""; }; + DE7D8C82F792FA2D4DFDBB06 = { isa = PBXGroup; children = ( + AF873D5814A1FA50EC93021E, + D4A4AB2A3F60563DEC7941B8, + 563AD20CBB3C6A83D1727F1A, + 008294F81F18B5248F7CCE54, + 9CD50EAA76FEDBFFF2375CD0, + 6CCD1FADA256307827394621, + 3F979D97853C3A0AD27EB090, + 52588D13BDE8D9CC21CF8220, + C93CF448310DD14A2B22D34B, + 6C827895A84242F0A1CE0D18, + 81EC2AC7F8CABE55DC2FF8AE, + B7008955C8758E6857070D7E ); name = memory; sourceTree = ""; }; + C0DE8A017F4C7A2902E49B02 = { isa = PBXGroup; children = ( + E9355AFD088D78C6F2777239, + E154BD37CEAF906C57F237EC, + 675CE87CDAF49436E626188C, + 2C2A2CEA22BAF276F40F56ED, + 3CF69DA88D6EA546060B595E, + 03FF7AE88AE0C73311F714C3, + 84696D46439DDCDCB49B4350, + 588184748D4BE154FD5CBC65, + 2194189195E4CC079D969BFE, + 5A389F8672EAD1EFE9A456E4, + 02BC5E3792D9D824E13568A5, + 600A5C30DE0BFD7BD076BF7F, + 6BA82775D60D941BBEB366EA, + 41AC41EDE0A3358C5C4349B6, + 2E35B809981470A547C02E64, + FEDC82791673E4F245CF26F7, + 147458ADA264D55006A27E8D, + 980822A0F1F5E7EC8FC26D80, + 50CF4B7F3410202B4C569285, + CACDAFD08BDE8A84B0BE8EA2 ); name = containers; sourceTree = ""; }; + EFF4A6D8F1ED2FF9BE1F86D1 = { isa = PBXGroup; children = ( + 31F730546E3B29BFE92A1D24, + 562F94E00EE23C919232C7A6, + 6018E372E585BCAE4E0B2F7D, + CB7126413109ED8F26B039D4, + B27DEC31391E5B719E9D5CCE, + E65A72904EF2E344367B4420, + 0F817CF0CB7CA84C761C9218, + BDA884A96EF84807EC157250, + 2293CECE46EE94D13E0D83F5, + 7398FD6C7958A5CBAC60BB6A, + D1CE275FC4266873EB598DBA, + 58E047D7D5111E13E46E42C5, + 421807FD3ACD799FD567CD40, + C151D21C9B0CAD9F75EA4D45, + 707561D7119BC3A1DA3B3468, + CE94B432B3C746718D0C31F7, + A12E919DB1210F76AE6A0E31 ); name = threads; sourceTree = ""; }; + 9A216999518262B196120EDF = { isa = PBXGroup; children = ( + C9A535E6CB35F830EB9D237E, + 26FE216325D5A9AF01481350, + F6B1B0E09E43EA0631EF7606, + E9703F9629F59179C74C3048, + C26B82DC5CF294BC271013CA, + CC578E99FA19130E95641D6F ); name = time; sourceTree = ""; }; + 3674BC58CDAFB35120BCB260 = { isa = PBXGroup; children = ( + 9C67A8EA8FDEA0C82701FD1D, + B7B3F0069280290486A6D9D1, + 79D623D8720122C155A2EB50, + 5DBABB33A712C4E5A94CB517, + E3C87BF96C6D9D01A3D81FCB, + F1EF8B8DE8B7F53E006D5D8F, + A91F9C5DE419991013E7C0F2, + F92AA16870D863240379EB35, + A7F8E5B95FBB8D6AE30B187F, + F1BEB324693FDE2E34AE4B48, + 4D62146674A1C5359CBB3D43, + FC987242A70ED75067FE18D6, + C0DC7444C5738A7F8986BA32 ); name = files; sourceTree = ""; }; + CDE38D478CA8E0BAD676D96A = { isa = PBXGroup; children = ( + 3DD300529F3A7E6CB4222EEB, + 4AFCC9CED2F158CA5530CDEF, + 1C17700C05D61AB7180B7B48, + 4DDAACDB9DB85BEE8E6F5E09, + 394E055BABC6011E508E0E7A, + 041D56E8CA4C914812DF01A7, + 9855BF167A8DFB148E38D9FC, + D5F4549F02171551AA546C6E ); name = network; sourceTree = ""; }; + C3FC47C7137FE1B66B138A9E = { isa = PBXGroup; children = ( + C777D53AFFA5FE52CD55AD24, + 666CDF4A92AE3864B8EDB533, + 3C282A0812E4882AD32ED8A1, + 91ACB8A2D49CBF4C2EC63FA5, + A5145C8116FAC385688A7AA9, + ABF9C15FE51D4073E3D25B25, + 630394FE5104771F86C9380C, + CFC3B1DD41AAF04DA2370810, + 82C65D12CEBBCB34F414D7E9, + E955235786059FD5CF357570, + 6DECB9EDA7852A9F15DD7C51, + 0309CDD8778F178D42FD62CA, + DC178C0AB6FAC9A4790D7E61, + 92CBC00C8FC9B7492836FEAF, + 3108DC3A632E9975D4BEA5B9 ); name = streams; sourceTree = ""; }; + EF113D70C9CA31105CF5CBEF = { isa = PBXGroup; children = ( + 1208B46953A3BC9AD4B7D7BF, + 6BEFD957A2AD4145FDE596AA, + F223E9AE5147B51FB935F204, + 53A49DCA988366E5B87FF6E1 ); name = logging; sourceTree = ""; }; + 1D00D7F4CF943C9F2A9E9D71 = { isa = PBXGroup; children = ( + A9229B48F7DA7A24D9B62966, + CC7069271842C973DA165D85, + 0335CFDB03C86E27105B010F, + 965CA1CB53311520756C0CDD, + 06CE3977D03B24A00E252DF7 ); name = system; sourceTree = ""; }; + 4998C7C2B9E74042F0BA47DF = { isa = PBXGroup; children = ( + 079797CB902D84B916B59027, + B3FAB396BE4D0C393B223E2E, + C21D55B64564A970D588CC35, + E2D5BBB5AFDCEDAE6A416D94 ); name = xml; sourceTree = ""; }; + 4B3E5C877D3DFD694678A293 = { isa = PBXGroup; children = ( + 890799F45FCAD5E316D06C41, + BF8C3A4B228A30D46F3EF04D ); name = json; sourceTree = ""; }; + 7C6C82AB80E82A81DACAEBED = { isa = PBXGroup; children = ( + 5DFC7492E7BB1B30384AC91C, + 3BF06F5E160F06E7FAD8B5C9, + E0955972B5FA0CC0ED5AE629, + 825BCAD4F61876D388BDAAD7, + 26E17474E5F0C0E8B5105D60, + 00B3EB25323B87196914DE18 ); name = zip; sourceTree = ""; }; + F9A1C9AE45A58365A197B2FA = { isa = PBXGroup; children = ( + 580C2C23E477330A9643F50D, + E870E5CD43C394DF822EDE83 ); name = "unit_tests"; sourceTree = ""; }; + 8A57CA1CBCBB3E176C2D4527 = { isa = PBXGroup; children = ( + 671C4199DBE1792E022431E6, + 7BBCC0624D9A3688B47BD8D7, + 8AB7098D46EBE80C37EBC7B3, + 76459A61189B0AB0911B4183, + B4872E7D5162A18A82C51B5C ); name = misc; sourceTree = ""; }; + 886F2C01510BAAD0F56027A6 = { isa = PBXGroup; children = ( + 858A04C4C8CBC88D4A2179EB, + 0F15E86098281C4A72FE7E1F, + 7EF0CC632F794A70799D1638, + 8C849742982323210E18BF08, + C7F0A8FDF735305EE131ACA0, + 7B82FF0B97DBD49B53B8E42E, + 10EA7568D49B9172CAD24BAA, + 7B2925D0DAFA0A1EE8F96FA2, + 7667770667CA5B6680E291CD, + 89111F42A304186F2B8F8669, + 87F4E296E87D8DA5E892039D, + 3D6B8568AFC101C531E8C3CB, + 31E7FBDDD1DD1A20BCAA432E, + 27BE346DB46F7D983ADACE2C, + 8F96075E1E9CEB0D8A4C0F37, + 0F944E25516957BC1062FF8F, + DE05BA7F0D9AB722E0B3978C, + 99972D87ADD1BA02C13D2DCE, + A68A2FFAC0554963E5146334, + BE641D06A96AB1619E2CF343, + B05B56D82B915CF19FA0235C, + 6A9E7AC0D45D676219DDC7DB, + CB411F3DDECC4C1FFE37F94D, + 3A125A5C938D895E8F029FB8, + DCE62DBFE9ACE26DB8D6BB7A, + DDDE89CD5E8F8F5E56D76A0D ); name = native; sourceTree = ""; }; + F69AB9EE6EF759AE687B11CB = { isa = PBXGroup; children = ( + 43E552497D1816862DB19695, + 0E5F86319AD56FA407F14211, + DE7D8C82F792FA2D4DFDBB06, + C0DE8A017F4C7A2902E49B02, + EFF4A6D8F1ED2FF9BE1F86D1, + 9A216999518262B196120EDF, + 3674BC58CDAFB35120BCB260, + CDE38D478CA8E0BAD676D96A, + C3FC47C7137FE1B66B138A9E, + EF113D70C9CA31105CF5CBEF, + 1D00D7F4CF943C9F2A9E9D71, + 4998C7C2B9E74042F0BA47DF, + 4B3E5C877D3DFD694678A293, + 7C6C82AB80E82A81DACAEBED, + F9A1C9AE45A58365A197B2FA, + 8A57CA1CBCBB3E176C2D4527, + 886F2C01510BAAD0F56027A6, + 1E4BCF4872013883E6BC58DA, + 4A014ACA046609DF770D6EBD, + 617B7CC21609927A1116167A ); name = "juce_core"; sourceTree = ""; }; + 385E0FD93F12DC738E63448B = { isa = PBXGroup; children = ( + 199C0EB2D77EDF6B8C7D3671, + 03FBAB3743D7CB07659E4753, + 95B3F3AE0F0E74EFEF453CB0, + 6A8284D8DFF35FFBA1FD800B ); name = values; sourceTree = ""; }; + B19E41F8FBD292FE4A6B7FD9 = { isa = PBXGroup; children = ( + B48AB5F597ED3425F3E8BA18, + 8CE01EF127F367DA465F4C50, + A4AF9296F0EC081B28C4C810 ); name = undomanager; sourceTree = ""; }; + 9F5ADB928AC1C05BC1FBD38A = { isa = PBXGroup; children = ( + 70BCB5CAAA737BA5D9AF31A4, + FA1F7234162EF60CC8CA9988, + 02E64BAC03BBBE87F4D3F200, + 0F46DA2D846DC709FC444DD3 ); name = "app_properties"; sourceTree = ""; }; + DC40104D134A51AAD12BFC52 = { isa = PBXGroup; children = ( + 385E0FD93F12DC738E63448B, + B19E41F8FBD292FE4A6B7FD9, + 9F5ADB928AC1C05BC1FBD38A, + FC3D728ACF9297C377E5F84E, + 30478AE9B1AB613EF67957AB, + B5D3BB2FDB0DA95EA51C939E ); name = "juce_data_structures"; sourceTree = ""; }; + A21D09A43360FD4CE56CE531 = { isa = PBXGroup; children = ( + D766D4F894E4A7B0259EC54D, + 8187533D81FA5F1907253111, + 68E3640FEE810935B032CA4A, + 3E7E693F81D0870A67BE1EB6, + D6C820EDC196A6439941A292, + 448335247CAB88CFE1F56E76, + C69D945A52D6895B4A865F19, + 20B363303E41776759EB3902, + A33528F02219E34E5FF85DA0, + 26E5392A22296EA13B471A2D, + A2DA0B15E14ED7CA655AD841 ); name = messages; sourceTree = ""; }; + 2485E03A3D91542D0E6E0972 = { isa = PBXGroup; children = ( + D404EF4902D824EFDA4F94F3, + A0C9FA9DDBFA83D677C14D7A, + 7032D216A2E339B9A5C32237, + 1DED2ED05BA2DA3D95081470 ); name = timers; sourceTree = ""; }; + 0FF6C7BAA4509089D26051FA = { isa = PBXGroup; children = ( + 6BB8CAF65D8655EAB63AB654, + 3835A9A6414CEE25ED6AB5E4, + 19E0896299B190E459757AA0, + EFD05000AF3C90F7F4C84A2D, + 38FD5B7BAF0DBB13FD9D42A2, + 9C51CCEC4A64439F1409854A, + AEC7FE0322458C9C2BAEEC77, + 1EDEF371C7BB57BB5900C080, + 01361E3F076536DF2DCA8BD8 ); name = broadcasters; sourceTree = ""; }; + A95E9D0FE974A969D19CF271 = { isa = PBXGroup; children = ( + 466522CD4C5F1335BE5E45C2, + 8ED3771E0A50CD816D2A6FA6, + D125AD2DBFEB171B7E5FAE5F, + 923587304E96F88E38F35F62 ); name = interprocess; sourceTree = ""; }; + AF12330C1C3A9B61EBDB050A = { isa = PBXGroup; children = ( + AA8CE7F363D9F673FB4C540C, + 476F154F268C1286FA447164, + 15038E8308631BDB0AE9C47D, + 391E372A26A5761D64487138, + 66F1583578E9B653234956D0, + 55A99D8C159067DAFC8BFE4A, + 3B01934E1717660BD624B847, + BE0ED9F8F9E2E3B80F6A8B63 ); name = native; sourceTree = ""; }; + 5A5BE031C0D792E2A3B8581D = { isa = PBXGroup; children = ( + A21D09A43360FD4CE56CE531, + 2485E03A3D91542D0E6E0972, + 0FF6C7BAA4509089D26051FA, + A95E9D0FE974A969D19CF271, + AF12330C1C3A9B61EBDB050A, + 0FB65267CB231D728374D9E5, + 311B276734E69145BD8ED899, + 724DA317CDBC6C4FBA2A54D5 ); name = "juce_events"; sourceTree = ""; }; + 23CE65A8C18113D8E6EA1107 = { isa = PBXGroup; children = ( + E78630EB80EAC0B8A58426F7, + 4572B3F34F15046A3CAF7A35, + CBD02F4B4CBC2D6A2D469C40, + 9CCFF7BD07C36AC2ECF10942, + 7B50C7176913E89123C8B52D, + 2FD49927B4D14C0ADDB1A6D6, + 1BCE61A5068CA13D8F47FF9F, + D6318A83AE69CB10531D0E12, + F9DB3F1167D1AA90D1CD8AA5 ); name = colour; sourceTree = ""; }; + 7487A36AACD2FD239E39F87B = { isa = PBXGroup; children = ( + 285CE0550D814A792D793BE5, + E07243CF610E8FF712E368E5, + FDD0DD9C51D920B7935516E7, + 0637806CC26B12477DD3EF0D, + EDABDD936506B77F19D767B6, + 6A6F36F2D317CC9800269124, + 9E337FE289F6F167B3AD4605 ); name = contexts; sourceTree = ""; }; + E50E2DC760EE78E3CFA6D774 = { isa = PBXGroup; children = ( + FDF2AC7D0C36ABADF47EF4DA, + CB098985B00A713586C8964C, + 5FBB12372B12A3D0A62EF58A, + DAA58C67379104E12EE38993, + B11567D3979F2B664463A67E, + 164761962F894D77EF247CC6, + 474CA212B1B8A981AC3A10AA, + 4CB9FEA63EC2AFAE31AA694B ); name = images; sourceTree = ""; }; + 3F8B2268809332228A9AA255 = { isa = PBXGroup; children = ( + 25B1F5FEB57DD20E48EA5201, + 8DF540BC2CEB028F9E31EC6C, + 2B4C580DAD0E86277828FE4D ); name = "image_formats"; sourceTree = ""; }; + BE763F9B81528AAED5616591 = { isa = PBXGroup; children = ( + D036A7BB5337D270BC33E451, + 9BADC0CF1905D0CB829741A2, + 56ED8E3303A502BD3D911673, + 1E86215EC6B571948B8036BB, + 9421B71BFE264DA9729106F0, + 3F7BC98A8A3C4DE1A0D7677C, + 6E35CD50AA827127AEC63385, + 2F6253BE6DB6BEBE65B428A4, + 82F87ADC7312F96920443B40, + 45B33570E62059C1525FD0F9, + DC779E57F8CB98A35B168B25, + 5A30B247E081D099964DB201, + 8BABAE34D97FB489D68C1343, + C5C5385C4575C9A0FAFEF513, + 990953166A7B50C7176913E8, + B588504FE2FAA13CAF8253D4 ); name = geometry; sourceTree = ""; }; + 5FCBEC54ED16CABF32F0E010 = { isa = PBXGroup; children = ( + 34A0FC3D36D12F6B31FDFF1F, + F640D7FB81C0CA166489B927, + A9388C83D6FC7DD89E8269E1, + 5A37E4084E27CF3353F61E3D ); name = placement; sourceTree = ""; }; + AD425137A3747CCE235E8D08 = { isa = PBXGroup; children = ( + 7CA77A4557C6898695EB11A4, + D762E76352960A7F8F1E30E9, + 181D04273DA500027DF3920A, + 7636D7B52DDD313FCC84B9C3, + 1C57A39FA2C6BCDF63A35A99, + 2075A13DDFAC11BBB92F4680, + E8498381F40E886E4AC19D3F, + 3A20DF49E875B833369FE77C, + FE588BA4D4EB90CD564DD456, + 952B7FEA693748270A467FB8 ); name = fonts; sourceTree = ""; }; + DD16CF11591610205F38A68A = { isa = PBXGroup; children = ( + 936BBD5425D74172B20651CB, + 65B6E9A96454A73683C07E68, + 133D9771D268413B1DB94C19, + D688D704CB9D3D799056426F, + D10902733297CEA2FA2F0099 ); name = effects; sourceTree = ""; }; + EB88019D2AFF41DF959F9428 = { isa = PBXGroup; children = ( + CBEBD1A75B19D34CF3DF4C09, + AFC1106A08C72CF352BAD00C, + A95B260382FF6601B63F7203, + 4CCC4B3F299B3E55BE902D5C, + 85C2017AF261ADFCE8FCB194, + 555399EE46713DA61EDCC2F6, + 9AABF931E5C52CE62284D475, + 48F3A658B6E1A3D74B30C634, + CB9958110813A97F20C1DAAD ); name = native; sourceTree = ""; }; + C2BADF2298D5B6F6F9D5B382 = { isa = PBXGroup; children = ( + 23CE65A8C18113D8E6EA1107, + 7487A36AACD2FD239E39F87B, + E50E2DC760EE78E3CFA6D774, + 3F8B2268809332228A9AA255, + BE763F9B81528AAED5616591, + 5FCBEC54ED16CABF32F0E010, + AD425137A3747CCE235E8D08, + DD16CF11591610205F38A68A, + EB88019D2AFF41DF959F9428, + 060C465DC252D61EE16F2B77, + 4DBA2A5E5E10D3CDA6283EF2, + 1AD9ED83015D842C42CC7A86 ); name = "juce_graphics"; sourceTree = ""; }; + 62B65C4F32CDEE1EF6A8A90E = { isa = PBXGroup; children = ( + CC3F7A1CA13E69956D86F28E, + 262F0D7D8000F7F53925CFF2, + 4CC6031DA4AB28D347459614, + F084D6FF2EB330B9904D0AF1, + 5E8E8A4241239D0EE45895A5, + 86FA52164BFCDF57A5AA752C, + 8FF0145FB4E6FDFA40090D7D, + CE0E07250091FEC5157F9A64 ); name = components; sourceTree = ""; }; + 57D5FA72346C0A36FC77B88D = { isa = PBXGroup; children = ( + F8B0FCE01F72F295071064C7, + FC29588CA9F0F0538B653D18, + 01F8AE0DF40CB1128141400B, + 9F68180144365769E1F73B8F, + 0D309C9C627A2C679B3FF56E, + 0ECE17F4A4C6504709D70387, + 772172F45F2A2A15421A84B1, + E592CB0ABF21DB94E746FA03, + 8F026D37C30D556B52D11724, + B950202F4EB67ED6018E4EE0, + 882F76997B181590A694D130, + 384941BF1DECA37CD6C7F9F6, + A16FB94B53D56F9CEA47281D, + FDB93E1CEDD3ECC8109D7B63, + 26D8D5EF294B2AF3DE83F6DC, + 42AA21CDC91EA122266EBD78, + 427BA649EFEE4020AC0D436B ); name = mouse; sourceTree = ""; }; + FC026C570E719A73049E256A = { isa = PBXGroup; children = ( + 40B5A2B8C8A3511FE91672FB, + 57628E11DF23738E4EFD2323, + 428689A9452C4FC0A1D73487, + E78FE4B7B5973D5E4A640E6E, + 1FC84A5FD219396C6F24387E, + 7E4D9E60356F5D28A5834DAA, + 7A36AC3848F3C0CB23AD4787, + 510C0E72D8329A64C007980C, + 54BE2FA1F57658061BB84862, + F0CAD114B234F37DB5DFBC54, + 9175EA44CDEF2E2C35BD8A4E, + A088A88BCD9A7FFF9D6E6731, + CE30C1EF785BDCE838824F9A ); name = keyboard; sourceTree = ""; }; + 981B49935761D5E86EF2F141 = { isa = PBXGroup; children = ( + 2FDD9BBDBE233301DD5BCBAC, + D66332A1C9ACD98D73DED9F3, + 8B884C43C8D053274571F9D1, + 11C2F9B4B07C9D4C602881E7, + E128987F279F2AE579C10528, + FC0386165FB0C17064476FE3, + 551AAECF9921F7B2D23551D5, + C0DE973A3E2A4D89D9A869B1, + 8FA4AADAE4E48C91DF955DD4, + 29131610EAB20D1B13B452DD, + B9CCFD10A75B9FD49AA98F74, + CC0FB5730E4879CCFCD5A9A1, + 9F706C588AC41F5FE5D5090A, + B0EC1B1EC4B23C2784D6074B, + ECB901FEFD2375C68BCFC2BC, + 46E9FD790663A4CDDF864977, + AE1DBB79887281F961BF847B, + 3C77F929FF78E0621DDDAB9F, + 2668A6D79975F9051DB1CB5E, + 102BAE57AAA43A7685FCBD9A, + B417B91A10C3513CE5603EAA, + 44A17B11D96CDB313ED60D8C, + 13BADE6C36A6A7A25C3F4975, + A52711DF48CAF646C3C4D149, + A4C753F7E5793ACDC859AA1B, + B5EF34B14DE4C3BDC02338D2, + EA7DA96AF58D027A7A0BBD63 ); name = widgets; sourceTree = ""; }; + BB45CEB3B0913F98FC817F56 = { isa = PBXGroup; children = ( + BD14E40BF6944D8F2F5FBE91, + 47A04510427BA649EFEE4020, + 8D89DB4E908C3FF95BB36590, + C41703B1FAA677883265748E, + 010703CFE5A0C8447BD05168, + 801680BE5BF1653DB6A0B11B, + 1CFE031686F6CFE015A9DAAF, + FACAB46397FF6AD7EE935063, + F06F736D770FCDAC86084A49, + A5A5A2ACF90D84E451D4D5AD, + 18C8D7316116B9DAFBC59C2B, + E6AC13434B132162DF0859BF, + CA44F72A4D61BCFE4EBD14D7, + C6FB1321A49F448690525E53, + 923FA63584DA3DC9F454670B, + 09B3B1955BACAF5E8D471184, + DADE2F4F6CD00500D1EB7563, + E4E8A1DCFBDEA05CF4490498, + B21898E93551752542DD9D77 ); name = windows; sourceTree = ""; }; + DCD943563E05DCBE64252353 = { isa = PBXGroup; children = ( + 77A3215BAB9CAEA2A4EA4EDC, + 1341663271E429AC168A6E26, + 3A602155AE376914AB3D00A5, + 9B03DC8A825E0E4F46C6012A, + F8E51849B5980D23E62FF6BB, + 77D6F061D40DA56AFA1721E4 ); name = menus; sourceTree = ""; }; + 664AABD7F28F3AB0C58D82B9 = { isa = PBXGroup; children = ( + 1240D7D11E530E72B4EB326B, + A8C9A53F6FAE609459564257, + 79796E142BF9D279F07F939D, + 733E629386B1DC98717F1C20, + DC6793630C8F66B24B5AC5A0, + 86B93D6EA85E0878C4DF8009, + 9DF87A1EF439C00131C93290, + A53F600989A4F02ED77E6448, + B08C30CDF7A142B670C20FE8, + 38E2E974C3CC4E489621B96D, + 31035DE98E2FB726C645ED10, + 9292ECA434A41F19E037A24E, + 8FFABBA161F1882484F858E7, + ADBDF87BD19F27AD373E3570, + 24438EE90BCB1769A5BDDB15, + 076516FAECF8D5361E597AD1, + B5E74F550160AE16974DF1CB, + 6CC215FFD41AD2EF191BBF6B, + CBAE370724A30DC42EA602EF, + 2DBFF1C9AC88CC2791F91388, + FB01F82BCC82F92921F90748, + 87FD3EF030E4ACE337C6204B, + 79596AC1B35E783024040C61, + E4F6397A2B69066806F506B7, + EE8A8AE67191BF286978FED5, + 1E60C5F02FAA094125F9922E, + 6545813E67C2C2981568979D, + 22D6ACB55941087E130401C3, + C3E811FA68100FBE3CF672D9, + 3E7DDA2B3151609C28F1FDC2, + 4D159AAB26ABC80936247885, + C3C55224531530D36606E7D6 ); name = layout; sourceTree = ""; }; + 5D5B114D45CA7771792D8159 = { isa = PBXGroup; children = ( + 289392DCB01150EAE784EB75, + DE595B010DDA41DC30F8F034, + 9739BAE482C8FDC26CA0A158, + AA6D54A86974C177D8C819C6, + 0D7E160135ABF94CB36AF921, + 5D907A470244BD49A696A763, + 1C26A34ED09398E87D842D15, + 75A51AD8107AF8967F00E622, + 72C8A73787715A1BDB64C7B9, + F31FD81E508069924CFBB2F8, + BE263FE98CE77A5427BC3213, + 704165AD9FDBF1F17A79FB88, + F23700EC9B3625585A97F3D0, + D7BE84D46270BBB219BED044, + 817652EC173A08676F6E592A, + DF7E735B8F18A6A56A1E6E99, + DCBC8F3473E5CF5A8F4FB772, + 8503C9A3B406687383E7B174 ); name = buttons; sourceTree = ""; }; + 657E2A9DC9D527AD6ECB500A = { isa = PBXGroup; children = ( + 6FAEB244A5931337D65B598E, + 2AC8FE42EC2A31068D09A6B4, + D9F58B09F67E00AF09B4A71D, + 8052FA33C4800A40DABB1B08, + 483A6673516013606125D4A3, + BCEC73FFCCBF87AEB18FAE8C, + 5FE7484485B599B65B575077, + EE9E5EC214D155A9628D5B7D, + 4CECFF3C8E0A5E781BDDAC04, + B2B82CC21E4D999B4AA51FFF, + C3CE7E78BDB63ED7C5594614, + 109A47386FB02F6A6E521132, + FB96D2AC82EB2CD73D58C3E1, + AF89EBAC8A864AAC9A9E6C27 ); name = positioning; sourceTree = ""; }; + DFDEFB59FA490DFEA052E3E9 = { isa = PBXGroup; children = ( + 4519E9C892334AEDC1D1E5C9, + 9C04FB0903CE700EE4810812, + CAF81A6FB2BE6EBED029A0E8, + 31C4644534EFBB2EEF0E5EC5, + 02E53134D5DDEA9C842E33E6, + ED1B2AFE610AF9E4ADCB191C, + 5F3CBD7273E1585E18CA841A, + B9284D221BA17C7E5DA682A0, + 22BB598301E250735947DAD5, + 7AF029702B3954F6968AE804, + D96D466A5F6DD5211495B984, + 267AFE448F8ACAAE9A5354E4, + A30DAFD73D09090C0AA9AA58, + 1F326A56EFFBA2D6CE7AA12A, + BC8987536AFBDD9313457B32 ); name = drawables; sourceTree = ""; }; + 3496689C6578CB68592B5EF0 = { isa = PBXGroup; children = ( + 8A8ADE53E7952417927E323B, + CA271DB22A58D8F8AC933714, + DA00D76D8724137CF1AB4144, + B7EF589314F8C7FBBFD5835F, + EB3D11D0E9D5BD4D41C0B880, + 76A97601D2FD08C0932B30EE, + 823FA000B2C62F9307B17346, + 31C617A6BD78C8899E3EF358, + 9E09EF0CEA1E377BE6E0B2FD, + 33AF1ED3B236DED58212C797, + 960B68DD9D277C1BB9429AED, + 8CA6015153DC88D575B27C9E, + 029098BF8FB854332A788E51, + D2C47DF6190643015D581D88 ); name = properties; sourceTree = ""; }; + 8FA7B5A393713A5948376930 = { isa = PBXGroup; children = ( + CC4F4DB2266D3BAD65ED1168, + B693FB9E8CBA57496271737F ); name = lookandfeel; sourceTree = ""; }; + 781B2E6C4FC75403B30F07F8 = { isa = PBXGroup; children = ( + 8DABBC640E7A4B4E84D45CCD, + 2220A5B902E6DF794AC23AE8, + 6D782142837DD19790900838, + F91B17758DBB6DBA39C6D1EC, + B334BBEF296B148D5E8B8D0E, + 8993CEA9FF769BFB8D5F4084, + B0FD3887A8F63665DAD73E0E, + AC2B9275540C5CC70CF34252, + 4FE2203D5739F86359B244B0, + 6B8C1F3D77BF303BE4A1C3F0, + D09A1421469CC1A9B2675AE0, + 24F52042CD67851BCF3F24E0, + ED359C0FF49D12BA9F60F640, + 75EF08B8A96C65C118C400AE, + B1D3AD092FD44E44214F0048, + 4F74B928AD873ECDB685CDC3, + 42E209D1A7282D9355B4F623, + 29BA64947611D66FA7699180, + 606EA04364C448E428335991, + 976CB35D28D5A83B6F5441ED, + 9AAC2AB7CCCCF43268C936C4, + 87C5D5BB9DA78842A182380C, + 94C6758E72DFE938197E8293, + 38AF5FE5BF4679D9201C5AAE, + FFC7E0131147BBE8A74583CB, + 42C7C43436C7EEC006E04E14 ); name = filebrowser; sourceTree = ""; }; + 8FABE1E2BA8351FC4A712BE3 = { isa = PBXGroup; children = ( + 60F477C385B734405E47BC92, + 460B6001A348A4ABC2C63A61, + 10E919D49BE322050F2B8946, + 512F7515354D54B4C097B16C, + CFBDB0925388FC99EE6BB8A5, + 96A1FB30A13FCD06846509A4, + 1F407D523CB494344FFF5DB2, + 5DF44E20AD72E55F2F83B495, + FF35F5314CAC65923ED405C0 ); name = commands; sourceTree = ""; }; + 3ABE3B9F75DD1497E4887788 = { isa = PBXGroup; children = ( + 3D8ACAF9D371CC6FF992D1B1, + 9E89D3D502DEA86CB3023441, + 02BCB0289AF914BB165E14C2, + A72735B11FDF0A75C3752BD6 ); name = misc; sourceTree = ""; }; + B40D92429BA8B46F72B44E8E = { isa = PBXGroup; children = ( + B14C1027DFE30E3B66B0A01C, + 7EFB40D99C9C96C1946F71E0, + EF34A41325E5EB605C75F440 ); name = application; sourceTree = ""; }; + 5F80A7A80433BF9686B4E254 = { isa = PBXGroup; children = ( + A6A5D58849F5C4CD7901C66F, + 9E2A5E87734F794AD8EC795C, + BB3CAA98DF478054A5B1F833, + 4D9A9572AE868B160A8A5D67, + D022D69F8BAA63361E4C4123, + BEE2BB0D198B116EF2F0D657, + FE2ADA5DC3CD09C6CAE4CB19, + 0F361FA4B9580942DB5BB12D, + C3106A0E4E59C8B6916567B1, + C6846B813744A54BE09FF646, + DE4337EBDFC00F4053F0CF08, + 6E11C12629C29F774EF4FAA6, + 2B5C71C695A0692F630B7BB5, + 7D2F85FCD2D1A81010E93AA0, + A1836510B169F825DAEB5A69 ); name = native; sourceTree = ""; }; + 2E9CA4DA17EAFE38D7A78E7D = { isa = PBXGroup; children = ( + 62B65C4F32CDEE1EF6A8A90E, + 57D5FA72346C0A36FC77B88D, + FC026C570E719A73049E256A, + 981B49935761D5E86EF2F141, + BB45CEB3B0913F98FC817F56, + DCD943563E05DCBE64252353, + 664AABD7F28F3AB0C58D82B9, + 5D5B114D45CA7771792D8159, + 657E2A9DC9D527AD6ECB500A, + DFDEFB59FA490DFEA052E3E9, + 3496689C6578CB68592B5EF0, + 8FA7B5A393713A5948376930, + 781B2E6C4FC75403B30F07F8, + 8FABE1E2BA8351FC4A712BE3, + 3ABE3B9F75DD1497E4887788, + B40D92429BA8B46F72B44E8E, + 5F80A7A80433BF9686B4E254, + 7BD7C5E9B0356421136FC176, + 99D90DF3A6A405AD47BAD5F6, + 32398E867D19B0BFAEE218D2 ); name = "juce_gui_basics"; sourceTree = ""; }; + 5A383C70731C60911E6985F5 = { isa = PBXGroup; children = ( + 2BDBFF82A17CB1891AD01762, + 4C40992C55B348EF67123956, + 4EB82AA5AF01B73D17DA570C, + B82243C4E4390DF87B90DFDB, + 8BF06F0C56C3CA061BC57220, + 2C4BC31C95D6EA8C67B450A2, + B2BEC9A164BBED99E6DADD70 ); name = "code_editor"; sourceTree = ""; }; + DD89F0434849D9CA29F2A2DA = { isa = PBXGroup; children = ( + B09417846B35FE353DCFD810, + ABEDE52541F35F08DAAB5EDD ); name = documents; sourceTree = ""; }; + F1A287F1B4FCA759EF3A5233 = { isa = PBXGroup; children = ( + 81D58EE87F67A29DC586F785, + 46DE95EBFD5DD32CF3C0E496, + E1366DC19FA3A3D19F7C6471 ); name = embedding; sourceTree = ""; }; + 5B19D4A71CE0E3D17B500A33 = { isa = PBXGroup; children = ( + 7EEC4E73CC2943FE741FACD0, + 2D1BA5F10EAC1A1F3031D8A3 ); name = lookandfeel; sourceTree = ""; }; + 6BF5E15522D8A272032AE928 = { isa = PBXGroup; children = ( + D2A264521FA49FE59C9637AB, + 0CFD9DA207467F0D87F7474D, + 34B4DBFDD45CF7DC3ABE112C, + 53CC1C46A4B860260CF66012, + 1600235636BB13FC2229918D, + CF05AC27D04B76605A510DD7, + C5C06A01666B3511117DB717, + 9DD20176AF51856EF56EBF53, + 9F39B965AE2462169693C84A, + E12BE0EC1DA4FB8EF6728EBE, + 35E88BCF20A6CB57A96119B9, + 3852D921D7C8D22A730FF046, + 71673B106F6D7E71D33D4831, + EA1AF200A6422797CDE59403, + 6C6B318D6930A05FF86AD97D, + 14BF0FC7527C8C444DBD45B3 ); name = misc; sourceTree = ""; }; + B7B3A5120FFDDC425428BDD3 = { isa = PBXGroup; children = ( + 7083827845431F26B7995FDF, + 0F0522F4C2C81C92515A3DF3, + C9B058E8FE2E685D261DF159, + DD235D415EC7781D7268A634, + 5E482CC19C62F7EB0587B605, + 68630A2F219CF0B422990F5F, + FC1C12941D40CE2CF0C3A0BE, + 2F7A7D923698D1E5BB1B39B1, + 87DBDF7F4E04271FD004BDDC, + BFABC09D9267DC5E2B3CB6E8, + C03857EC18D17BDDC9D0CAE8, + C31446ACA9A16ECC4D084BA6 ); name = native; sourceTree = ""; }; + 8964A494E6D2B4387F8CA835 = { isa = PBXGroup; children = ( + 5A383C70731C60911E6985F5, + DD89F0434849D9CA29F2A2DA, + F1A287F1B4FCA759EF3A5233, + 5B19D4A71CE0E3D17B500A33, + 6BF5E15522D8A272032AE928, + B7B3A5120FFDDC425428BDD3, + CF6013FBC59AB0836FB70315, + DB0DF608454309742580E256, + F79AC6171CC52BFE4F3EFF7A ); name = "juce_gui_extra"; sourceTree = ""; }; + 82A850C8020C4560C4084D54 = { isa = PBXGroup; children = ( + F69AB9EE6EF759AE687B11CB, + DC40104D134A51AAD12BFC52, + 5A5BE031C0D792E2A3B8581D, + C2BADF2298D5B6F6F9D5B382, + 2E9CA4DA17EAFE38D7A78E7D, + 8964A494E6D2B4387F8CA835 ); name = "Juce Modules"; sourceTree = ""; }; E9187C22BD3E64A16116DF8C = { isa = PBXGroup; children = ( 8B21C8D0F53D4B6647916A6C, - 43AD9F8DF7F760C6BBADDECC, - 57FFE120531343D50B7D2D28, - 9025A92B6F0FB6F8EF51A168, - EA4C72277CEA392BC33435A7, - 23634B2289D5AC4EA728B8F7 ); name = "Juce Library Code"; sourceTree = ""; }; + 49F82562788D22155BA6027F, + 42C3D1882155445973CDC6FC, + EAEC535F117A301B82A1535E, + A360104FE6E53E87F6286880, + 85EB813A1B337F2133DBA6D1, + B952B50156EE2A711202FC7B, + 43AD9F8DF7F760C6BBADDECC ); name = "Juce Library Code"; sourceTree = ""; }; AE86EC0712AA99EF212AD4AE = { isa = PBXGroup; children = ( B786F246076E6F5D363A6A2C ); name = Resources; sourceTree = ""; }; C134A2DBF8134BD791778F0F = { isa = PBXGroup; children = ( @@ -79,6 +1396,7 @@ D5A29444C637255D66ACB7AE ); name = Products; sourceTree = ""; }; B3F3C4C19F8E5C6897A5B3C3 = { isa = PBXGroup; children = ( 4297D3C9A6348BA224516847, + 82A850C8020C4560C4084D54, E9187C22BD3E64A16116DF8C, AE86EC0712AA99EF212AD4AE, C134A2DBF8134BD791778F0F, @@ -153,10 +1471,12 @@ 172414663F1A38D78D2B00C3 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( C67B5243DBC7218FEC5DBCC0, 9B11A7532637EC12F1DC4B2E, - CFFBB821ECB7D85603624533, - CB81C9C2C8729E6E3D47894E, - D718D953943D6576572CCD49, - D3AEE9F470093C7E82F10144 ); runOnlyForDeploymentPostprocessing = 0; }; + C2F06AB24C47C40A7D744BDA, + 834983ACC3944599D2033A8C, + 5C4B4C4C978A1E91EDAFD15E, + 3E2412ABC1E675C5D196518B, + 1FA264E289C57040EDF54581, + 176036A9FFC9B760DBC7081C ); runOnlyForDeploymentPostprocessing = 0; }; CB4944AF280662FF07FEFEC4 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D397D8CEF8663F449B4439C0, 7BC4087FD54A2C1ED196C892, diff --git a/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj b/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj index f2f3e57c27..97ff62dee0 100644 --- a/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj +++ b/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj @@ -134,13 +134,3129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj b/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj index 436b0c7287..24a2568e55 100644 --- a/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj +++ b/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj @@ -134,13 +134,3129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj b/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj index c61d8beaa7..01a6d086c1 100644 --- a/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj +++ b/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj @@ -15,10 +15,12 @@ BAEB975FAD8A99FA884DC593 = { isa = PBXBuildFile; fileRef = 6B236CD90C0803738D7B5235; }; C67B5243DBC7218FEC5DBCC0 = { isa = PBXBuildFile; fileRef = E7507E799D8BDA92BDB78915; }; 9B11A7532637EC12F1DC4B2E = { isa = PBXBuildFile; fileRef = 0DB195C2B3538434D7D20B51; }; - CFFBB821ECB7D85603624533 = { isa = PBXBuildFile; fileRef = 57FFE120531343D50B7D2D28; }; - CB81C9C2C8729E6E3D47894E = { isa = PBXBuildFile; fileRef = 9025A92B6F0FB6F8EF51A168; }; - D718D953943D6576572CCD49 = { isa = PBXBuildFile; fileRef = EA4C72277CEA392BC33435A7; }; - D3AEE9F470093C7E82F10144 = { isa = PBXBuildFile; fileRef = 23634B2289D5AC4EA728B8F7; }; + C2F06AB24C47C40A7D744BDA = { isa = PBXBuildFile; fileRef = 49F82562788D22155BA6027F; }; + 834983ACC3944599D2033A8C = { isa = PBXBuildFile; fileRef = 42C3D1882155445973CDC6FC; }; + 5C4B4C4C978A1E91EDAFD15E = { isa = PBXBuildFile; fileRef = EAEC535F117A301B82A1535E; }; + 3E2412ABC1E675C5D196518B = { isa = PBXBuildFile; fileRef = A360104FE6E53E87F6286880; }; + 1FA264E289C57040EDF54581 = { isa = PBXBuildFile; fileRef = 85EB813A1B337F2133DBA6D1; }; + 176036A9FFC9B760DBC7081C = { isa = PBXBuildFile; fileRef = B952B50156EE2A711202FC7B; }; 18665A7A93EDBA956B64774E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; AA21728A979A53287A0DEFED = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; B9E8EA7A70EBC92D121DD5EF = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; @@ -31,25 +33,1340 @@ E7507E799D8BDA92BDB78915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; 0DB195C2B3538434D7D20B51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/MainComponent.cpp; sourceTree = "SOURCE_ROOT"; }; A1E4765345FA980DAFA5BDE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; + A32A4F9CCF1120737F0E829A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75CFB4E1F7A81E546B06FD83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 2E0B7EFF592C64B76E8A7C8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 1B48B383C52AF101BFF088E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + CB7FD4A1F3AEA0147AD43C06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 84D684FBFB5835F09C4F9CDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 65C2291AC33F649689083F26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5CA34A7C52A4672E6DF9F0D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + 9D81929523C747F368AEE13C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46718D0C31F71B0DF633530E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + BB608C6FE34BCE4356FC85B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + C627F262BF41AB8E41F3C610 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD544BE1455875DD0C793A6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 865E71D269BD532E5024AE5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA846A3A5B04B59CF29B7E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 1F73888755C513EE2AFBDA91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F29F5B6B0204517F9195CF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + CCCC46F3B4F616B348AAD085 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 535AA91D48E6658C3EF54FBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + 65923C79ECAF77D60FF6BBFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11CAF73EB61AB6446F8E6B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 712318A3DD7DAFC92A0DCC43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + 351BBA3A8C331C286EBC0355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + 2435EB7D347386D550659C78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + D05063FB5DD1CA53828969AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7EF119C6AC3D4E45F27FC514 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 3D0B4C3DC795650542CD3504 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + AF873D5814A1FA50EC93021E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + D4A4AB2A3F60563DEC7941B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 563AD20CBB3C6A83D1727F1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 008294F81F18B5248F7CCE54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 9CD50EAA76FEDBFFF2375CD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + 6CCD1FADA256307827394621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F979D97853C3A0AD27EB090 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 52588D13BDE8D9CC21CF8220 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + C93CF448310DD14A2B22D34B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 6C827895A84242F0A1CE0D18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 81EC2AC7F8CABE55DC2FF8AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + B7008955C8758E6857070D7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + E9355AFD088D78C6F2777239 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + E154BD37CEAF906C57F237EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 675CE87CDAF49436E626188C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 2C2A2CEA22BAF276F40F56ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 3CF69DA88D6EA546060B595E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03FF7AE88AE0C73311F714C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 84696D46439DDCDCB49B4350 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 588184748D4BE154FD5CBC65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 2194189195E4CC079D969BFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 5A389F8672EAD1EFE9A456E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02BC5E3792D9D824E13568A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 600A5C30DE0BFD7BD076BF7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 6BA82775D60D941BBEB366EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 41AC41EDE0A3358C5C4349B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 2E35B809981470A547C02E64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + FEDC82791673E4F245CF26F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 147458ADA264D55006A27E8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 980822A0F1F5E7EC8FC26D80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 50CF4B7F3410202B4C569285 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + CACDAFD08BDE8A84B0BE8EA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 31F730546E3B29BFE92A1D24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 562F94E00EE23C919232C7A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 6018E372E585BCAE4E0B2F7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + CB7126413109ED8F26B039D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + B27DEC31391E5B719E9D5CCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + E65A72904EF2E344367B4420 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 0F817CF0CB7CA84C761C9218 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + BDA884A96EF84807EC157250 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 2293CECE46EE94D13E0D83F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 7398FD6C7958A5CBAC60BB6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + D1CE275FC4266873EB598DBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58E047D7D5111E13E46E42C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 421807FD3ACD799FD567CD40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + C151D21C9B0CAD9F75EA4D45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 707561D7119BC3A1DA3B3468 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE94B432B3C746718D0C31F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + A12E919DB1210F76AE6A0E31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + C9A535E6CB35F830EB9D237E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26FE216325D5A9AF01481350 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + F6B1B0E09E43EA0631EF7606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9703F9629F59179C74C3048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + C26B82DC5CF294BC271013CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC578E99FA19130E95641D6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 9C67A8EA8FDEA0C82701FD1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7B3F0069280290486A6D9D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 79D623D8720122C155A2EB50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5DBABB33A712C4E5A94CB517 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + E3C87BF96C6D9D01A3D81FCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1EF8B8DE8B7F53E006D5D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + A91F9C5DE419991013E7C0F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + F92AA16870D863240379EB35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + A7F8E5B95FBB8D6AE30B187F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1BEB324693FDE2E34AE4B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + 4D62146674A1C5359CBB3D43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + FC987242A70ED75067FE18D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0DC7444C5738A7F8986BA32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 3DD300529F3A7E6CB4222EEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AFCC9CED2F158CA5530CDEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 1C17700C05D61AB7180B7B48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4DDAACDB9DB85BEE8E6F5E09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + 394E055BABC6011E508E0E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + 041D56E8CA4C914812DF01A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 9855BF167A8DFB148E38D9FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5F4549F02171551AA546C6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + C777D53AFFA5FE52CD55AD24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 666CDF4A92AE3864B8EDB533 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 3C282A0812E4882AD32ED8A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91ACB8A2D49CBF4C2EC63FA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + A5145C8116FAC385688A7AA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + ABF9C15FE51D4073E3D25B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 630394FE5104771F86C9380C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + CFC3B1DD41AAF04DA2370810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82C65D12CEBBCB34F414D7E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E955235786059FD5CF357570 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6DECB9EDA7852A9F15DD7C51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 0309CDD8778F178D42FD62CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC178C0AB6FAC9A4790D7E61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 92CBC00C8FC9B7492836FEAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3108DC3A632E9975D4BEA5B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 1208B46953A3BC9AD4B7D7BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6BEFD957A2AD4145FDE596AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + F223E9AE5147B51FB935F204 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53A49DCA988366E5B87FF6E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + A9229B48F7DA7A24D9B62966 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + CC7069271842C973DA165D85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + 0335CFDB03C86E27105B010F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 965CA1CB53311520756C0CDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 06CE3977D03B24A00E252DF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + 079797CB902D84B916B59027 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3FAB396BE4D0C393B223E2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + C21D55B64564A970D588CC35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2D5BBB5AFDCEDAE6A416D94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + 890799F45FCAD5E316D06C41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF8C3A4B228A30D46F3EF04D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 5DFC7492E7BB1B30384AC91C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BF06F5E160F06E7FAD8B5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E0955972B5FA0CC0ED5AE629 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 825BCAD4F61876D388BDAAD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 26E17474E5F0C0E8B5105D60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 00B3EB25323B87196914DE18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 580C2C23E477330A9643F50D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + E870E5CD43C394DF822EDE83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + 671C4199DBE1792E022431E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BBCC0624D9A3688B47BD8D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 8AB7098D46EBE80C37EBC7B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76459A61189B0AB0911B4183 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + B4872E7D5162A18A82C51B5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 858A04C4C8CBC88D4A2179EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F15E86098281C4A72FE7E1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 7EF0CC632F794A70799D1638 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C849742982323210E18BF08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + C7F0A8FDF735305EE131ACA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B82FF0B97DBD49B53B8E42E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10EA7568D49B9172CAD24BAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 7B2925D0DAFA0A1EE8F96FA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7667770667CA5B6680E291CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89111F42A304186F2B8F8669 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87F4E296E87D8DA5E892039D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D6B8568AFC101C531E8C3CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + 31E7FBDDD1DD1A20BCAA432E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 27BE346DB46F7D983ADACE2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + 8F96075E1E9CEB0D8A4C0F37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 0F944E25516957BC1062FF8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + DE05BA7F0D9AB722E0B3978C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 99972D87ADD1BA02C13D2DCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + A68A2FFAC0554963E5146334 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + BE641D06A96AB1619E2CF343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + B05B56D82B915CF19FA0235C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 6A9E7AC0D45D676219DDC7DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB411F3DDECC4C1FFE37F94D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A125A5C938D895E8F029FB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + DCE62DBFE9ACE26DB8D6BB7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + DDDE89CD5E8F8F5E56D76A0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E4BCF4872013883E6BC58DA = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4A014ACA046609DF770D6EBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 617B7CC21609927A1116167A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 199C0EB2D77EDF6B8C7D3671 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03FBAB3743D7CB07659E4753 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 95B3F3AE0F0E74EFEF453CB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A8284D8DFF35FFBA1FD800B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + B48AB5F597ED3425F3E8BA18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + 8CE01EF127F367DA465F4C50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4AF9296F0EC081B28C4C810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + 70BCB5CAAA737BA5D9AF31A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA1F7234162EF60CC8CA9988 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 02E64BAC03BBBE87F4D3F200 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F46DA2D846DC709FC444DD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + FC3D728ACF9297C377E5F84E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 30478AE9B1AB613EF67957AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + B5D3BB2FDB0DA95EA51C939E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + D766D4F894E4A7B0259EC54D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8187533D81FA5F1907253111 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 68E3640FEE810935B032CA4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 3E7E693F81D0870A67BE1EB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6C820EDC196A6439941A292 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + 448335247CAB88CFE1F56E76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + C69D945A52D6895B4A865F19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + 20B363303E41776759EB3902 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + A33528F02219E34E5FF85DA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 26E5392A22296EA13B471A2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + A2DA0B15E14ED7CA655AD841 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + D404EF4902D824EFDA4F94F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + A0C9FA9DDBFA83D677C14D7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + 7032D216A2E339B9A5C32237 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DED2ED05BA2DA3D95081470 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + 6BB8CAF65D8655EAB63AB654 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3835A9A6414CEE25ED6AB5E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 19E0896299B190E459757AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + EFD05000AF3C90F7F4C84A2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38FD5B7BAF0DBB13FD9D42A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + 9C51CCEC4A64439F1409854A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + AEC7FE0322458C9C2BAEEC77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 1EDEF371C7BB57BB5900C080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 01361E3F076536DF2DCA8BD8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 466522CD4C5F1335BE5E45C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8ED3771E0A50CD816D2A6FA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + D125AD2DBFEB171B7E5FAE5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 923587304E96F88E38F35F62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + AA8CE7F363D9F673FB4C540C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 476F154F268C1286FA447164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 15038E8308631BDB0AE9C47D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 391E372A26A5761D64487138 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 66F1583578E9B653234956D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 55A99D8C159067DAFC8BFE4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 3B01934E1717660BD624B847 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + BE0ED9F8F9E2E3B80F6A8B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0FB65267CB231D728374D9E5 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 311B276734E69145BD8ED899 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + 724DA317CDBC6C4FBA2A54D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + E78630EB80EAC0B8A58426F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4572B3F34F15046A3CAF7A35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + CBD02F4B4CBC2D6A2D469C40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9CCFF7BD07C36AC2ECF10942 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + 7B50C7176913E89123C8B52D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2FD49927B4D14C0ADDB1A6D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 1BCE61A5068CA13D8F47FF9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6318A83AE69CB10531D0E12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + F9DB3F1167D1AA90D1CD8AA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 285CE0550D814A792D793BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + E07243CF610E8FF712E368E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + FDD0DD9C51D920B7935516E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 0637806CC26B12477DD3EF0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + EDABDD936506B77F19D767B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 6A6F36F2D317CC9800269124 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E337FE289F6F167B3AD4605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + FDF2AC7D0C36ABADF47EF4DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB098985B00A713586C8964C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 5FBB12372B12A3D0A62EF58A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + DAA58C67379104E12EE38993 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + B11567D3979F2B664463A67E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 164761962F894D77EF247CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + 474CA212B1B8A981AC3A10AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CB9FEA63EC2AFAE31AA694B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 25B1F5FEB57DD20E48EA5201 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8DF540BC2CEB028F9E31EC6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B4C580DAD0E86277828FE4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + D036A7BB5337D270BC33E451 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BADC0CF1905D0CB829741A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 56ED8E3303A502BD3D911673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 1E86215EC6B571948B8036BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9421B71BFE264DA9729106F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 3F7BC98A8A3C4DE1A0D7677C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + 6E35CD50AA827127AEC63385 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F6253BE6DB6BEBE65B428A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + 82F87ADC7312F96920443B40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45B33570E62059C1525FD0F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + DC779E57F8CB98A35B168B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A30B247E081D099964DB201 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + 8BABAE34D97FB489D68C1343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + C5C5385C4575C9A0FAFEF513 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 990953166A7B50C7176913E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + B588504FE2FAA13CAF8253D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 34A0FC3D36D12F6B31FDFF1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + F640D7FB81C0CA166489B927 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + A9388C83D6FC7DD89E8269E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A37E4084E27CF3353F61E3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + 7CA77A4557C6898695EB11A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + D762E76352960A7F8F1E30E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + 181D04273DA500027DF3920A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7636D7B52DDD313FCC84B9C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 1C57A39FA2C6BCDF63A35A99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2075A13DDFAC11BBB92F4680 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + E8498381F40E886E4AC19D3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A20DF49E875B833369FE77C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + FE588BA4D4EB90CD564DD456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 952B7FEA693748270A467FB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + 936BBD5425D74172B20651CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 65B6E9A96454A73683C07E68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 133D9771D268413B1DB94C19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + D688D704CB9D3D799056426F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + D10902733297CEA2FA2F0099 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + CBEBD1A75B19D34CF3DF4C09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + AFC1106A08C72CF352BAD00C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + A95B260382FF6601B63F7203 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CCC4B3F299B3E55BE902D5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 85C2017AF261ADFCE8FCB194 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 555399EE46713DA61EDCC2F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 9AABF931E5C52CE62284D475 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 48F3A658B6E1A3D74B30C634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB9958110813A97F20C1DAAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 060C465DC252D61EE16F2B77 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4DBA2A5E5E10D3CDA6283EF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + 1AD9ED83015D842C42CC7A86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC3F7A1CA13E69956D86F28E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 262F0D7D8000F7F53925CFF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + 4CC6031DA4AB28D347459614 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + F084D6FF2EB330B9904D0AF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 5E8E8A4241239D0EE45895A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86FA52164BFCDF57A5AA752C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + 8FF0145FB4E6FDFA40090D7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE0E07250091FEC5157F9A64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + F8B0FCE01F72F295071064C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC29588CA9F0F0538B653D18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 01F8AE0DF40CB1128141400B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F68180144365769E1F73B8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 0D309C9C627A2C679B3FF56E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 0ECE17F4A4C6504709D70387 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 772172F45F2A2A15421A84B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E592CB0ABF21DB94E746FA03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F026D37C30D556B52D11724 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + B950202F4EB67ED6018E4EE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 882F76997B181590A694D130 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 384941BF1DECA37CD6C7F9F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + A16FB94B53D56F9CEA47281D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + FDB93E1CEDD3ECC8109D7B63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26D8D5EF294B2AF3DE83F6DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 42AA21CDC91EA122266EBD78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + 427BA649EFEE4020AC0D436B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + 40B5A2B8C8A3511FE91672FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 57628E11DF23738E4EFD2323 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 428689A9452C4FC0A1D73487 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + E78FE4B7B5973D5E4A640E6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + 1FC84A5FD219396C6F24387E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E4D9E60356F5D28A5834DAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + 7A36AC3848F3C0CB23AD4787 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 510C0E72D8329A64C007980C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + 54BE2FA1F57658061BB84862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0CAD114B234F37DB5DFBC54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + 9175EA44CDEF2E2C35BD8A4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + A088A88BCD9A7FFF9D6E6731 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + CE30C1EF785BDCE838824F9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 2FDD9BBDBE233301DD5BCBAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + D66332A1C9ACD98D73DED9F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + 8B884C43C8D053274571F9D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11C2F9B4B07C9D4C602881E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E128987F279F2AE579C10528 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC0386165FB0C17064476FE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 551AAECF9921F7B2D23551D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + C0DE973A3E2A4D89D9A869B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 8FA4AADAE4E48C91DF955DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 29131610EAB20D1B13B452DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + B9CCFD10A75B9FD49AA98F74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC0FB5730E4879CCFCD5A9A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + 9F706C588AC41F5FE5D5090A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B0EC1B1EC4B23C2784D6074B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ECB901FEFD2375C68BCFC2BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46E9FD790663A4CDDF864977 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + AE1DBB79887281F961BF847B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C77F929FF78E0621DDDAB9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 2668A6D79975F9051DB1CB5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 102BAE57AAA43A7685FCBD9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + B417B91A10C3513CE5603EAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44A17B11D96CDB313ED60D8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 13BADE6C36A6A7A25C3F4975 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + A52711DF48CAF646C3C4D149 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + A4C753F7E5793ACDC859AA1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + B5EF34B14DE4C3BDC02338D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + EA7DA96AF58D027A7A0BBD63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + BD14E40BF6944D8F2F5FBE91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47A04510427BA649EFEE4020 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 8D89DB4E908C3FF95BB36590 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + C41703B1FAA677883265748E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 010703CFE5A0C8447BD05168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 801680BE5BF1653DB6A0B11B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 1CFE031686F6CFE015A9DAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + FACAB46397FF6AD7EE935063 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + F06F736D770FCDAC86084A49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + A5A5A2ACF90D84E451D4D5AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 18C8D7316116B9DAFBC59C2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + E6AC13434B132162DF0859BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA44F72A4D61BCFE4EBD14D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + C6FB1321A49F448690525E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 923FA63584DA3DC9F454670B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 09B3B1955BACAF5E8D471184 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + DADE2F4F6CD00500D1EB7563 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + E4E8A1DCFBDEA05CF4490498 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + B21898E93551752542DD9D77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 77A3215BAB9CAEA2A4EA4EDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1341663271E429AC168A6E26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3A602155AE376914AB3D00A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B03DC8A825E0E4F46C6012A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + F8E51849B5980D23E62FF6BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + 77D6F061D40DA56AFA1721E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + 1240D7D11E530E72B4EB326B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8C9A53F6FAE609459564257 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 79796E142BF9D279F07F939D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 733E629386B1DC98717F1C20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + DC6793630C8F66B24B5AC5A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86B93D6EA85E0878C4DF8009 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + 9DF87A1EF439C00131C93290 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + A53F600989A4F02ED77E6448 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + B08C30CDF7A142B670C20FE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38E2E974C3CC4E489621B96D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 31035DE98E2FB726C645ED10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9292ECA434A41F19E037A24E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 8FFABBA161F1882484F858E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ADBDF87BD19F27AD373E3570 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 24438EE90BCB1769A5BDDB15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 076516FAECF8D5361E597AD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B5E74F550160AE16974DF1CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CC215FFD41AD2EF191BBF6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CBAE370724A30DC42EA602EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2DBFF1C9AC88CC2791F91388 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + FB01F82BCC82F92921F90748 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87FD3EF030E4ACE337C6204B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 79596AC1B35E783024040C61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4F6397A2B69066806F506B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + EE8A8AE67191BF286978FED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1E60C5F02FAA094125F9922E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + 6545813E67C2C2981568979D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22D6ACB55941087E130401C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + C3E811FA68100FBE3CF672D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E7DDA2B3151609C28F1FDC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4D159AAB26ABC80936247885 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3C55224531530D36606E7D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + 289392DCB01150EAE784EB75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + DE595B010DDA41DC30F8F034 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 9739BAE482C8FDC26CA0A158 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA6D54A86974C177D8C819C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 0D7E160135ABF94CB36AF921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D907A470244BD49A696A763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + 1C26A34ED09398E87D842D15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75A51AD8107AF8967F00E622 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + 72C8A73787715A1BDB64C7B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + F31FD81E508069924CFBB2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + BE263FE98CE77A5427BC3213 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 704165AD9FDBF1F17A79FB88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + F23700EC9B3625585A97F3D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + D7BE84D46270BBB219BED044 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + 817652EC173A08676F6E592A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF7E735B8F18A6A56A1E6E99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + DCBC8F3473E5CF5A8F4FB772 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8503C9A3B406687383E7B174 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + 6FAEB244A5931337D65B598E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2AC8FE42EC2A31068D09A6B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + D9F58B09F67E00AF09B4A71D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8052FA33C4800A40DABB1B08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 483A6673516013606125D4A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + BCEC73FFCCBF87AEB18FAE8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + 5FE7484485B599B65B575077 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + EE9E5EC214D155A9628D5B7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + 4CECFF3C8E0A5E781BDDAC04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2B82CC21E4D999B4AA51FFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + C3CE7E78BDB63ED7C5594614 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 109A47386FB02F6A6E521132 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + FB96D2AC82EB2CD73D58C3E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF89EBAC8A864AAC9A9E6C27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 4519E9C892334AEDC1D1E5C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C04FB0903CE700EE4810812 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + CAF81A6FB2BE6EBED029A0E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31C4644534EFBB2EEF0E5EC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + 02E53134D5DDEA9C842E33E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED1B2AFE610AF9E4ADCB191C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 5F3CBD7273E1585E18CA841A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9284D221BA17C7E5DA682A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + 22BB598301E250735947DAD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7AF029702B3954F6968AE804 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + D96D466A5F6DD5211495B984 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + 267AFE448F8ACAAE9A5354E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + A30DAFD73D09090C0AA9AA58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F326A56EFFBA2D6CE7AA12A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + BC8987536AFBDD9313457B32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A8ADE53E7952417927E323B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA271DB22A58D8F8AC933714 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DA00D76D8724137CF1AB4144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7EF589314F8C7FBBFD5835F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EB3D11D0E9D5BD4D41C0B880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76A97601D2FD08C0932B30EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 823FA000B2C62F9307B17346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31C617A6BD78C8899E3EF358 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9E09EF0CEA1E377BE6E0B2FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 33AF1ED3B236DED58212C797 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 960B68DD9D277C1BB9429AED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CA6015153DC88D575B27C9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 029098BF8FB854332A788E51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D2C47DF6190643015D581D88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CC4F4DB2266D3BAD65ED1168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + B693FB9E8CBA57496271737F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 8DABBC640E7A4B4E84D45CCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2220A5B902E6DF794AC23AE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6D782142837DD19790900838 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + F91B17758DBB6DBA39C6D1EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + B334BBEF296B148D5E8B8D0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8993CEA9FF769BFB8D5F4084 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B0FD3887A8F63665DAD73E0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + AC2B9275540C5CC70CF34252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4FE2203D5739F86359B244B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + 6B8C1F3D77BF303BE4A1C3F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + D09A1421469CC1A9B2675AE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + 24F52042CD67851BCF3F24E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED359C0FF49D12BA9F60F640 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 75EF08B8A96C65C118C400AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1D3AD092FD44E44214F0048 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4F74B928AD873ECDB685CDC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42E209D1A7282D9355B4F623 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 29BA64947611D66FA7699180 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 606EA04364C448E428335991 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 976CB35D28D5A83B6F5441ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9AAC2AB7CCCCF43268C936C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 87C5D5BB9DA78842A182380C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 94C6758E72DFE938197E8293 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 38AF5FE5BF4679D9201C5AAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FFC7E0131147BBE8A74583CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42C7C43436C7EEC006E04E14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 60F477C385B734405E47BC92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + 460B6001A348A4ABC2C63A61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + 10E919D49BE322050F2B8946 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 512F7515354D54B4C097B16C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + CFBDB0925388FC99EE6BB8A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + 96A1FB30A13FCD06846509A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F407D523CB494344FFF5DB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 5DF44E20AD72E55F2F83B495 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF35F5314CAC65923ED405C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 3D8ACAF9D371CC6FF992D1B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E89D3D502DEA86CB3023441 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 02BCB0289AF914BB165E14C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + A72735B11FDF0A75C3752BD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + B14C1027DFE30E3B66B0A01C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7EFB40D99C9C96C1946F71E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + EF34A41325E5EB605C75F440 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + A6A5D58849F5C4CD7901C66F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E2A5E87734F794AD8EC795C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB3CAA98DF478054A5B1F833 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 4D9A9572AE868B160A8A5D67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + D022D69F8BAA63361E4C4123 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + BEE2BB0D198B116EF2F0D657 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE2ADA5DC3CD09C6CAE4CB19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F361FA4B9580942DB5BB12D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + C3106A0E4E59C8B6916567B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + C6846B813744A54BE09FF646 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + DE4337EBDFC00F4053F0CF08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 6E11C12629C29F774EF4FAA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 2B5C71C695A0692F630B7BB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7D2F85FCD2D1A81010E93AA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + A1836510B169F825DAEB5A69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7BD7C5E9B0356421136FC176 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 99D90DF3A6A405AD47BAD5F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 32398E867D19B0BFAEE218D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BDBFF82A17CB1891AD01762 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C40992C55B348EF67123956 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 4EB82AA5AF01B73D17DA570C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B82243C4E4390DF87B90DFDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8BF06F0C56C3CA061BC57220 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 2C4BC31C95D6EA8C67B450A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2BEC9A164BBED99E6DADD70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + B09417846B35FE353DCFD810 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + ABEDE52541F35F08DAAB5EDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 81D58EE87F67A29DC586F785 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 46DE95EBFD5DD32CF3C0E496 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E1366DC19FA3A3D19F7C6471 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7EEC4E73CC2943FE741FACD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2D1BA5F10EAC1A1F3031D8A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + D2A264521FA49FE59C9637AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + 0CFD9DA207467F0D87F7474D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34B4DBFDD45CF7DC3ABE112C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 53CC1C46A4B860260CF66012 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1600235636BB13FC2229918D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + CF05AC27D04B76605A510DD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C5C06A01666B3511117DB717 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9DD20176AF51856EF56EBF53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F39B965AE2462169693C84A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + E12BE0EC1DA4FB8EF6728EBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35E88BCF20A6CB57A96119B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + 3852D921D7C8D22A730FF046 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71673B106F6D7E71D33D4831 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + EA1AF200A6422797CDE59403 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C6B318D6930A05FF86AD97D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 14BF0FC7527C8C444DBD45B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7083827845431F26B7995FDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F0522F4C2C81C92515A3DF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + C9B058E8FE2E685D261DF159 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + DD235D415EC7781D7268A634 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E482CC19C62F7EB0587B605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68630A2F219CF0B422990F5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + FC1C12941D40CE2CF0C3A0BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2F7A7D923698D1E5BB1B39B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 87DBDF7F4E04271FD004BDDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + BFABC09D9267DC5E2B3CB6E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C03857EC18D17BDDC9D0CAE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + C31446ACA9A16ECC4D084BA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF6013FBC59AB0836FB70315 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + DB0DF608454309742580E256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + F79AC6171CC52BFE4F3EFF7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; 8B21C8D0F53D4B6647916A6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + 49F82562788D22155BA6027F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 42C3D1882155445973CDC6FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + EAEC535F117A301B82A1535E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + A360104FE6E53E87F6286880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 85EB813A1B337F2133DBA6D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B952B50156EE2A711202FC7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; 43AD9F8DF7F760C6BBADDECC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 57FFE120531343D50B7D2D28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode1.mm; path = ../../JuceLibraryCode/JuceLibraryCode1.mm; sourceTree = "SOURCE_ROOT"; }; - 9025A92B6F0FB6F8EF51A168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = "SOURCE_ROOT"; }; - EA4C72277CEA392BC33435A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = "SOURCE_ROOT"; }; - 23634B2289D5AC4EA728B8F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = "SOURCE_ROOT"; }; A0C5DD7F69DC35BF462718E4 = { isa = PBXGroup; children = ( E7507E799D8BDA92BDB78915, 0DB195C2B3538434D7D20B51, A1E4765345FA980DAFA5BDE3 ); name = Source; sourceTree = ""; }; 4297D3C9A6348BA224516847 = { isa = PBXGroup; children = ( A0C5DD7F69DC35BF462718E4 ); name = HelloWorld; sourceTree = ""; }; + 43E552497D1816862DB19695 = { isa = PBXGroup; children = ( + A32A4F9CCF1120737F0E829A, + 75CFB4E1F7A81E546B06FD83, + 2E0B7EFF592C64B76E8A7C8C, + 1B48B383C52AF101BFF088E7, + CB7FD4A1F3AEA0147AD43C06, + 84D684FBFB5835F09C4F9CDC, + 65C2291AC33F649689083F26, + 5CA34A7C52A4672E6DF9F0D4, + 9D81929523C747F368AEE13C, + 46718D0C31F71B0DF633530E, + BB608C6FE34BCE4356FC85B5, + C627F262BF41AB8E41F3C610, + DD544BE1455875DD0C793A6D, + 865E71D269BD532E5024AE5D, + EA846A3A5B04B59CF29B7E53, + 1F73888755C513EE2AFBDA91, + 4F29F5B6B0204517F9195CF7, + CCCC46F3B4F616B348AAD085, + 535AA91D48E6658C3EF54FBF ); name = text; sourceTree = ""; }; + 0E5F86319AD56FA407F14211 = { isa = PBXGroup; children = ( + 65923C79ECAF77D60FF6BBFC, + 11CAF73EB61AB6446F8E6B22, + 712318A3DD7DAFC92A0DCC43, + 351BBA3A8C331C286EBC0355, + 2435EB7D347386D550659C78, + D05063FB5DD1CA53828969AF, + 7EF119C6AC3D4E45F27FC514, + 3D0B4C3DC795650542CD3504 ); name = maths; sourceTree = ""; }; + DE7D8C82F792FA2D4DFDBB06 = { isa = PBXGroup; children = ( + AF873D5814A1FA50EC93021E, + D4A4AB2A3F60563DEC7941B8, + 563AD20CBB3C6A83D1727F1A, + 008294F81F18B5248F7CCE54, + 9CD50EAA76FEDBFFF2375CD0, + 6CCD1FADA256307827394621, + 3F979D97853C3A0AD27EB090, + 52588D13BDE8D9CC21CF8220, + C93CF448310DD14A2B22D34B, + 6C827895A84242F0A1CE0D18, + 81EC2AC7F8CABE55DC2FF8AE, + B7008955C8758E6857070D7E ); name = memory; sourceTree = ""; }; + C0DE8A017F4C7A2902E49B02 = { isa = PBXGroup; children = ( + E9355AFD088D78C6F2777239, + E154BD37CEAF906C57F237EC, + 675CE87CDAF49436E626188C, + 2C2A2CEA22BAF276F40F56ED, + 3CF69DA88D6EA546060B595E, + 03FF7AE88AE0C73311F714C3, + 84696D46439DDCDCB49B4350, + 588184748D4BE154FD5CBC65, + 2194189195E4CC079D969BFE, + 5A389F8672EAD1EFE9A456E4, + 02BC5E3792D9D824E13568A5, + 600A5C30DE0BFD7BD076BF7F, + 6BA82775D60D941BBEB366EA, + 41AC41EDE0A3358C5C4349B6, + 2E35B809981470A547C02E64, + FEDC82791673E4F245CF26F7, + 147458ADA264D55006A27E8D, + 980822A0F1F5E7EC8FC26D80, + 50CF4B7F3410202B4C569285, + CACDAFD08BDE8A84B0BE8EA2 ); name = containers; sourceTree = ""; }; + EFF4A6D8F1ED2FF9BE1F86D1 = { isa = PBXGroup; children = ( + 31F730546E3B29BFE92A1D24, + 562F94E00EE23C919232C7A6, + 6018E372E585BCAE4E0B2F7D, + CB7126413109ED8F26B039D4, + B27DEC31391E5B719E9D5CCE, + E65A72904EF2E344367B4420, + 0F817CF0CB7CA84C761C9218, + BDA884A96EF84807EC157250, + 2293CECE46EE94D13E0D83F5, + 7398FD6C7958A5CBAC60BB6A, + D1CE275FC4266873EB598DBA, + 58E047D7D5111E13E46E42C5, + 421807FD3ACD799FD567CD40, + C151D21C9B0CAD9F75EA4D45, + 707561D7119BC3A1DA3B3468, + CE94B432B3C746718D0C31F7, + A12E919DB1210F76AE6A0E31 ); name = threads; sourceTree = ""; }; + 9A216999518262B196120EDF = { isa = PBXGroup; children = ( + C9A535E6CB35F830EB9D237E, + 26FE216325D5A9AF01481350, + F6B1B0E09E43EA0631EF7606, + E9703F9629F59179C74C3048, + C26B82DC5CF294BC271013CA, + CC578E99FA19130E95641D6F ); name = time; sourceTree = ""; }; + 3674BC58CDAFB35120BCB260 = { isa = PBXGroup; children = ( + 9C67A8EA8FDEA0C82701FD1D, + B7B3F0069280290486A6D9D1, + 79D623D8720122C155A2EB50, + 5DBABB33A712C4E5A94CB517, + E3C87BF96C6D9D01A3D81FCB, + F1EF8B8DE8B7F53E006D5D8F, + A91F9C5DE419991013E7C0F2, + F92AA16870D863240379EB35, + A7F8E5B95FBB8D6AE30B187F, + F1BEB324693FDE2E34AE4B48, + 4D62146674A1C5359CBB3D43, + FC987242A70ED75067FE18D6, + C0DC7444C5738A7F8986BA32 ); name = files; sourceTree = ""; }; + CDE38D478CA8E0BAD676D96A = { isa = PBXGroup; children = ( + 3DD300529F3A7E6CB4222EEB, + 4AFCC9CED2F158CA5530CDEF, + 1C17700C05D61AB7180B7B48, + 4DDAACDB9DB85BEE8E6F5E09, + 394E055BABC6011E508E0E7A, + 041D56E8CA4C914812DF01A7, + 9855BF167A8DFB148E38D9FC, + D5F4549F02171551AA546C6E ); name = network; sourceTree = ""; }; + C3FC47C7137FE1B66B138A9E = { isa = PBXGroup; children = ( + C777D53AFFA5FE52CD55AD24, + 666CDF4A92AE3864B8EDB533, + 3C282A0812E4882AD32ED8A1, + 91ACB8A2D49CBF4C2EC63FA5, + A5145C8116FAC385688A7AA9, + ABF9C15FE51D4073E3D25B25, + 630394FE5104771F86C9380C, + CFC3B1DD41AAF04DA2370810, + 82C65D12CEBBCB34F414D7E9, + E955235786059FD5CF357570, + 6DECB9EDA7852A9F15DD7C51, + 0309CDD8778F178D42FD62CA, + DC178C0AB6FAC9A4790D7E61, + 92CBC00C8FC9B7492836FEAF, + 3108DC3A632E9975D4BEA5B9 ); name = streams; sourceTree = ""; }; + EF113D70C9CA31105CF5CBEF = { isa = PBXGroup; children = ( + 1208B46953A3BC9AD4B7D7BF, + 6BEFD957A2AD4145FDE596AA, + F223E9AE5147B51FB935F204, + 53A49DCA988366E5B87FF6E1 ); name = logging; sourceTree = ""; }; + 1D00D7F4CF943C9F2A9E9D71 = { isa = PBXGroup; children = ( + A9229B48F7DA7A24D9B62966, + CC7069271842C973DA165D85, + 0335CFDB03C86E27105B010F, + 965CA1CB53311520756C0CDD, + 06CE3977D03B24A00E252DF7 ); name = system; sourceTree = ""; }; + 4998C7C2B9E74042F0BA47DF = { isa = PBXGroup; children = ( + 079797CB902D84B916B59027, + B3FAB396BE4D0C393B223E2E, + C21D55B64564A970D588CC35, + E2D5BBB5AFDCEDAE6A416D94 ); name = xml; sourceTree = ""; }; + 4B3E5C877D3DFD694678A293 = { isa = PBXGroup; children = ( + 890799F45FCAD5E316D06C41, + BF8C3A4B228A30D46F3EF04D ); name = json; sourceTree = ""; }; + 7C6C82AB80E82A81DACAEBED = { isa = PBXGroup; children = ( + 5DFC7492E7BB1B30384AC91C, + 3BF06F5E160F06E7FAD8B5C9, + E0955972B5FA0CC0ED5AE629, + 825BCAD4F61876D388BDAAD7, + 26E17474E5F0C0E8B5105D60, + 00B3EB25323B87196914DE18 ); name = zip; sourceTree = ""; }; + F9A1C9AE45A58365A197B2FA = { isa = PBXGroup; children = ( + 580C2C23E477330A9643F50D, + E870E5CD43C394DF822EDE83 ); name = "unit_tests"; sourceTree = ""; }; + 8A57CA1CBCBB3E176C2D4527 = { isa = PBXGroup; children = ( + 671C4199DBE1792E022431E6, + 7BBCC0624D9A3688B47BD8D7, + 8AB7098D46EBE80C37EBC7B3, + 76459A61189B0AB0911B4183, + B4872E7D5162A18A82C51B5C ); name = misc; sourceTree = ""; }; + 886F2C01510BAAD0F56027A6 = { isa = PBXGroup; children = ( + 858A04C4C8CBC88D4A2179EB, + 0F15E86098281C4A72FE7E1F, + 7EF0CC632F794A70799D1638, + 8C849742982323210E18BF08, + C7F0A8FDF735305EE131ACA0, + 7B82FF0B97DBD49B53B8E42E, + 10EA7568D49B9172CAD24BAA, + 7B2925D0DAFA0A1EE8F96FA2, + 7667770667CA5B6680E291CD, + 89111F42A304186F2B8F8669, + 87F4E296E87D8DA5E892039D, + 3D6B8568AFC101C531E8C3CB, + 31E7FBDDD1DD1A20BCAA432E, + 27BE346DB46F7D983ADACE2C, + 8F96075E1E9CEB0D8A4C0F37, + 0F944E25516957BC1062FF8F, + DE05BA7F0D9AB722E0B3978C, + 99972D87ADD1BA02C13D2DCE, + A68A2FFAC0554963E5146334, + BE641D06A96AB1619E2CF343, + B05B56D82B915CF19FA0235C, + 6A9E7AC0D45D676219DDC7DB, + CB411F3DDECC4C1FFE37F94D, + 3A125A5C938D895E8F029FB8, + DCE62DBFE9ACE26DB8D6BB7A, + DDDE89CD5E8F8F5E56D76A0D ); name = native; sourceTree = ""; }; + F69AB9EE6EF759AE687B11CB = { isa = PBXGroup; children = ( + 43E552497D1816862DB19695, + 0E5F86319AD56FA407F14211, + DE7D8C82F792FA2D4DFDBB06, + C0DE8A017F4C7A2902E49B02, + EFF4A6D8F1ED2FF9BE1F86D1, + 9A216999518262B196120EDF, + 3674BC58CDAFB35120BCB260, + CDE38D478CA8E0BAD676D96A, + C3FC47C7137FE1B66B138A9E, + EF113D70C9CA31105CF5CBEF, + 1D00D7F4CF943C9F2A9E9D71, + 4998C7C2B9E74042F0BA47DF, + 4B3E5C877D3DFD694678A293, + 7C6C82AB80E82A81DACAEBED, + F9A1C9AE45A58365A197B2FA, + 8A57CA1CBCBB3E176C2D4527, + 886F2C01510BAAD0F56027A6, + 1E4BCF4872013883E6BC58DA, + 4A014ACA046609DF770D6EBD, + 617B7CC21609927A1116167A ); name = "juce_core"; sourceTree = ""; }; + 385E0FD93F12DC738E63448B = { isa = PBXGroup; children = ( + 199C0EB2D77EDF6B8C7D3671, + 03FBAB3743D7CB07659E4753, + 95B3F3AE0F0E74EFEF453CB0, + 6A8284D8DFF35FFBA1FD800B ); name = values; sourceTree = ""; }; + B19E41F8FBD292FE4A6B7FD9 = { isa = PBXGroup; children = ( + B48AB5F597ED3425F3E8BA18, + 8CE01EF127F367DA465F4C50, + A4AF9296F0EC081B28C4C810 ); name = undomanager; sourceTree = ""; }; + 9F5ADB928AC1C05BC1FBD38A = { isa = PBXGroup; children = ( + 70BCB5CAAA737BA5D9AF31A4, + FA1F7234162EF60CC8CA9988, + 02E64BAC03BBBE87F4D3F200, + 0F46DA2D846DC709FC444DD3 ); name = "app_properties"; sourceTree = ""; }; + DC40104D134A51AAD12BFC52 = { isa = PBXGroup; children = ( + 385E0FD93F12DC738E63448B, + B19E41F8FBD292FE4A6B7FD9, + 9F5ADB928AC1C05BC1FBD38A, + FC3D728ACF9297C377E5F84E, + 30478AE9B1AB613EF67957AB, + B5D3BB2FDB0DA95EA51C939E ); name = "juce_data_structures"; sourceTree = ""; }; + A21D09A43360FD4CE56CE531 = { isa = PBXGroup; children = ( + D766D4F894E4A7B0259EC54D, + 8187533D81FA5F1907253111, + 68E3640FEE810935B032CA4A, + 3E7E693F81D0870A67BE1EB6, + D6C820EDC196A6439941A292, + 448335247CAB88CFE1F56E76, + C69D945A52D6895B4A865F19, + 20B363303E41776759EB3902, + A33528F02219E34E5FF85DA0, + 26E5392A22296EA13B471A2D, + A2DA0B15E14ED7CA655AD841 ); name = messages; sourceTree = ""; }; + 2485E03A3D91542D0E6E0972 = { isa = PBXGroup; children = ( + D404EF4902D824EFDA4F94F3, + A0C9FA9DDBFA83D677C14D7A, + 7032D216A2E339B9A5C32237, + 1DED2ED05BA2DA3D95081470 ); name = timers; sourceTree = ""; }; + 0FF6C7BAA4509089D26051FA = { isa = PBXGroup; children = ( + 6BB8CAF65D8655EAB63AB654, + 3835A9A6414CEE25ED6AB5E4, + 19E0896299B190E459757AA0, + EFD05000AF3C90F7F4C84A2D, + 38FD5B7BAF0DBB13FD9D42A2, + 9C51CCEC4A64439F1409854A, + AEC7FE0322458C9C2BAEEC77, + 1EDEF371C7BB57BB5900C080, + 01361E3F076536DF2DCA8BD8 ); name = broadcasters; sourceTree = ""; }; + A95E9D0FE974A969D19CF271 = { isa = PBXGroup; children = ( + 466522CD4C5F1335BE5E45C2, + 8ED3771E0A50CD816D2A6FA6, + D125AD2DBFEB171B7E5FAE5F, + 923587304E96F88E38F35F62 ); name = interprocess; sourceTree = ""; }; + AF12330C1C3A9B61EBDB050A = { isa = PBXGroup; children = ( + AA8CE7F363D9F673FB4C540C, + 476F154F268C1286FA447164, + 15038E8308631BDB0AE9C47D, + 391E372A26A5761D64487138, + 66F1583578E9B653234956D0, + 55A99D8C159067DAFC8BFE4A, + 3B01934E1717660BD624B847, + BE0ED9F8F9E2E3B80F6A8B63 ); name = native; sourceTree = ""; }; + 5A5BE031C0D792E2A3B8581D = { isa = PBXGroup; children = ( + A21D09A43360FD4CE56CE531, + 2485E03A3D91542D0E6E0972, + 0FF6C7BAA4509089D26051FA, + A95E9D0FE974A969D19CF271, + AF12330C1C3A9B61EBDB050A, + 0FB65267CB231D728374D9E5, + 311B276734E69145BD8ED899, + 724DA317CDBC6C4FBA2A54D5 ); name = "juce_events"; sourceTree = ""; }; + 23CE65A8C18113D8E6EA1107 = { isa = PBXGroup; children = ( + E78630EB80EAC0B8A58426F7, + 4572B3F34F15046A3CAF7A35, + CBD02F4B4CBC2D6A2D469C40, + 9CCFF7BD07C36AC2ECF10942, + 7B50C7176913E89123C8B52D, + 2FD49927B4D14C0ADDB1A6D6, + 1BCE61A5068CA13D8F47FF9F, + D6318A83AE69CB10531D0E12, + F9DB3F1167D1AA90D1CD8AA5 ); name = colour; sourceTree = ""; }; + 7487A36AACD2FD239E39F87B = { isa = PBXGroup; children = ( + 285CE0550D814A792D793BE5, + E07243CF610E8FF712E368E5, + FDD0DD9C51D920B7935516E7, + 0637806CC26B12477DD3EF0D, + EDABDD936506B77F19D767B6, + 6A6F36F2D317CC9800269124, + 9E337FE289F6F167B3AD4605 ); name = contexts; sourceTree = ""; }; + E50E2DC760EE78E3CFA6D774 = { isa = PBXGroup; children = ( + FDF2AC7D0C36ABADF47EF4DA, + CB098985B00A713586C8964C, + 5FBB12372B12A3D0A62EF58A, + DAA58C67379104E12EE38993, + B11567D3979F2B664463A67E, + 164761962F894D77EF247CC6, + 474CA212B1B8A981AC3A10AA, + 4CB9FEA63EC2AFAE31AA694B ); name = images; sourceTree = ""; }; + 3F8B2268809332228A9AA255 = { isa = PBXGroup; children = ( + 25B1F5FEB57DD20E48EA5201, + 8DF540BC2CEB028F9E31EC6C, + 2B4C580DAD0E86277828FE4D ); name = "image_formats"; sourceTree = ""; }; + BE763F9B81528AAED5616591 = { isa = PBXGroup; children = ( + D036A7BB5337D270BC33E451, + 9BADC0CF1905D0CB829741A2, + 56ED8E3303A502BD3D911673, + 1E86215EC6B571948B8036BB, + 9421B71BFE264DA9729106F0, + 3F7BC98A8A3C4DE1A0D7677C, + 6E35CD50AA827127AEC63385, + 2F6253BE6DB6BEBE65B428A4, + 82F87ADC7312F96920443B40, + 45B33570E62059C1525FD0F9, + DC779E57F8CB98A35B168B25, + 5A30B247E081D099964DB201, + 8BABAE34D97FB489D68C1343, + C5C5385C4575C9A0FAFEF513, + 990953166A7B50C7176913E8, + B588504FE2FAA13CAF8253D4 ); name = geometry; sourceTree = ""; }; + 5FCBEC54ED16CABF32F0E010 = { isa = PBXGroup; children = ( + 34A0FC3D36D12F6B31FDFF1F, + F640D7FB81C0CA166489B927, + A9388C83D6FC7DD89E8269E1, + 5A37E4084E27CF3353F61E3D ); name = placement; sourceTree = ""; }; + AD425137A3747CCE235E8D08 = { isa = PBXGroup; children = ( + 7CA77A4557C6898695EB11A4, + D762E76352960A7F8F1E30E9, + 181D04273DA500027DF3920A, + 7636D7B52DDD313FCC84B9C3, + 1C57A39FA2C6BCDF63A35A99, + 2075A13DDFAC11BBB92F4680, + E8498381F40E886E4AC19D3F, + 3A20DF49E875B833369FE77C, + FE588BA4D4EB90CD564DD456, + 952B7FEA693748270A467FB8 ); name = fonts; sourceTree = ""; }; + DD16CF11591610205F38A68A = { isa = PBXGroup; children = ( + 936BBD5425D74172B20651CB, + 65B6E9A96454A73683C07E68, + 133D9771D268413B1DB94C19, + D688D704CB9D3D799056426F, + D10902733297CEA2FA2F0099 ); name = effects; sourceTree = ""; }; + EB88019D2AFF41DF959F9428 = { isa = PBXGroup; children = ( + CBEBD1A75B19D34CF3DF4C09, + AFC1106A08C72CF352BAD00C, + A95B260382FF6601B63F7203, + 4CCC4B3F299B3E55BE902D5C, + 85C2017AF261ADFCE8FCB194, + 555399EE46713DA61EDCC2F6, + 9AABF931E5C52CE62284D475, + 48F3A658B6E1A3D74B30C634, + CB9958110813A97F20C1DAAD ); name = native; sourceTree = ""; }; + C2BADF2298D5B6F6F9D5B382 = { isa = PBXGroup; children = ( + 23CE65A8C18113D8E6EA1107, + 7487A36AACD2FD239E39F87B, + E50E2DC760EE78E3CFA6D774, + 3F8B2268809332228A9AA255, + BE763F9B81528AAED5616591, + 5FCBEC54ED16CABF32F0E010, + AD425137A3747CCE235E8D08, + DD16CF11591610205F38A68A, + EB88019D2AFF41DF959F9428, + 060C465DC252D61EE16F2B77, + 4DBA2A5E5E10D3CDA6283EF2, + 1AD9ED83015D842C42CC7A86 ); name = "juce_graphics"; sourceTree = ""; }; + 62B65C4F32CDEE1EF6A8A90E = { isa = PBXGroup; children = ( + CC3F7A1CA13E69956D86F28E, + 262F0D7D8000F7F53925CFF2, + 4CC6031DA4AB28D347459614, + F084D6FF2EB330B9904D0AF1, + 5E8E8A4241239D0EE45895A5, + 86FA52164BFCDF57A5AA752C, + 8FF0145FB4E6FDFA40090D7D, + CE0E07250091FEC5157F9A64 ); name = components; sourceTree = ""; }; + 57D5FA72346C0A36FC77B88D = { isa = PBXGroup; children = ( + F8B0FCE01F72F295071064C7, + FC29588CA9F0F0538B653D18, + 01F8AE0DF40CB1128141400B, + 9F68180144365769E1F73B8F, + 0D309C9C627A2C679B3FF56E, + 0ECE17F4A4C6504709D70387, + 772172F45F2A2A15421A84B1, + E592CB0ABF21DB94E746FA03, + 8F026D37C30D556B52D11724, + B950202F4EB67ED6018E4EE0, + 882F76997B181590A694D130, + 384941BF1DECA37CD6C7F9F6, + A16FB94B53D56F9CEA47281D, + FDB93E1CEDD3ECC8109D7B63, + 26D8D5EF294B2AF3DE83F6DC, + 42AA21CDC91EA122266EBD78, + 427BA649EFEE4020AC0D436B ); name = mouse; sourceTree = ""; }; + FC026C570E719A73049E256A = { isa = PBXGroup; children = ( + 40B5A2B8C8A3511FE91672FB, + 57628E11DF23738E4EFD2323, + 428689A9452C4FC0A1D73487, + E78FE4B7B5973D5E4A640E6E, + 1FC84A5FD219396C6F24387E, + 7E4D9E60356F5D28A5834DAA, + 7A36AC3848F3C0CB23AD4787, + 510C0E72D8329A64C007980C, + 54BE2FA1F57658061BB84862, + F0CAD114B234F37DB5DFBC54, + 9175EA44CDEF2E2C35BD8A4E, + A088A88BCD9A7FFF9D6E6731, + CE30C1EF785BDCE838824F9A ); name = keyboard; sourceTree = ""; }; + 981B49935761D5E86EF2F141 = { isa = PBXGroup; children = ( + 2FDD9BBDBE233301DD5BCBAC, + D66332A1C9ACD98D73DED9F3, + 8B884C43C8D053274571F9D1, + 11C2F9B4B07C9D4C602881E7, + E128987F279F2AE579C10528, + FC0386165FB0C17064476FE3, + 551AAECF9921F7B2D23551D5, + C0DE973A3E2A4D89D9A869B1, + 8FA4AADAE4E48C91DF955DD4, + 29131610EAB20D1B13B452DD, + B9CCFD10A75B9FD49AA98F74, + CC0FB5730E4879CCFCD5A9A1, + 9F706C588AC41F5FE5D5090A, + B0EC1B1EC4B23C2784D6074B, + ECB901FEFD2375C68BCFC2BC, + 46E9FD790663A4CDDF864977, + AE1DBB79887281F961BF847B, + 3C77F929FF78E0621DDDAB9F, + 2668A6D79975F9051DB1CB5E, + 102BAE57AAA43A7685FCBD9A, + B417B91A10C3513CE5603EAA, + 44A17B11D96CDB313ED60D8C, + 13BADE6C36A6A7A25C3F4975, + A52711DF48CAF646C3C4D149, + A4C753F7E5793ACDC859AA1B, + B5EF34B14DE4C3BDC02338D2, + EA7DA96AF58D027A7A0BBD63 ); name = widgets; sourceTree = ""; }; + BB45CEB3B0913F98FC817F56 = { isa = PBXGroup; children = ( + BD14E40BF6944D8F2F5FBE91, + 47A04510427BA649EFEE4020, + 8D89DB4E908C3FF95BB36590, + C41703B1FAA677883265748E, + 010703CFE5A0C8447BD05168, + 801680BE5BF1653DB6A0B11B, + 1CFE031686F6CFE015A9DAAF, + FACAB46397FF6AD7EE935063, + F06F736D770FCDAC86084A49, + A5A5A2ACF90D84E451D4D5AD, + 18C8D7316116B9DAFBC59C2B, + E6AC13434B132162DF0859BF, + CA44F72A4D61BCFE4EBD14D7, + C6FB1321A49F448690525E53, + 923FA63584DA3DC9F454670B, + 09B3B1955BACAF5E8D471184, + DADE2F4F6CD00500D1EB7563, + E4E8A1DCFBDEA05CF4490498, + B21898E93551752542DD9D77 ); name = windows; sourceTree = ""; }; + DCD943563E05DCBE64252353 = { isa = PBXGroup; children = ( + 77A3215BAB9CAEA2A4EA4EDC, + 1341663271E429AC168A6E26, + 3A602155AE376914AB3D00A5, + 9B03DC8A825E0E4F46C6012A, + F8E51849B5980D23E62FF6BB, + 77D6F061D40DA56AFA1721E4 ); name = menus; sourceTree = ""; }; + 664AABD7F28F3AB0C58D82B9 = { isa = PBXGroup; children = ( + 1240D7D11E530E72B4EB326B, + A8C9A53F6FAE609459564257, + 79796E142BF9D279F07F939D, + 733E629386B1DC98717F1C20, + DC6793630C8F66B24B5AC5A0, + 86B93D6EA85E0878C4DF8009, + 9DF87A1EF439C00131C93290, + A53F600989A4F02ED77E6448, + B08C30CDF7A142B670C20FE8, + 38E2E974C3CC4E489621B96D, + 31035DE98E2FB726C645ED10, + 9292ECA434A41F19E037A24E, + 8FFABBA161F1882484F858E7, + ADBDF87BD19F27AD373E3570, + 24438EE90BCB1769A5BDDB15, + 076516FAECF8D5361E597AD1, + B5E74F550160AE16974DF1CB, + 6CC215FFD41AD2EF191BBF6B, + CBAE370724A30DC42EA602EF, + 2DBFF1C9AC88CC2791F91388, + FB01F82BCC82F92921F90748, + 87FD3EF030E4ACE337C6204B, + 79596AC1B35E783024040C61, + E4F6397A2B69066806F506B7, + EE8A8AE67191BF286978FED5, + 1E60C5F02FAA094125F9922E, + 6545813E67C2C2981568979D, + 22D6ACB55941087E130401C3, + C3E811FA68100FBE3CF672D9, + 3E7DDA2B3151609C28F1FDC2, + 4D159AAB26ABC80936247885, + C3C55224531530D36606E7D6 ); name = layout; sourceTree = ""; }; + 5D5B114D45CA7771792D8159 = { isa = PBXGroup; children = ( + 289392DCB01150EAE784EB75, + DE595B010DDA41DC30F8F034, + 9739BAE482C8FDC26CA0A158, + AA6D54A86974C177D8C819C6, + 0D7E160135ABF94CB36AF921, + 5D907A470244BD49A696A763, + 1C26A34ED09398E87D842D15, + 75A51AD8107AF8967F00E622, + 72C8A73787715A1BDB64C7B9, + F31FD81E508069924CFBB2F8, + BE263FE98CE77A5427BC3213, + 704165AD9FDBF1F17A79FB88, + F23700EC9B3625585A97F3D0, + D7BE84D46270BBB219BED044, + 817652EC173A08676F6E592A, + DF7E735B8F18A6A56A1E6E99, + DCBC8F3473E5CF5A8F4FB772, + 8503C9A3B406687383E7B174 ); name = buttons; sourceTree = ""; }; + 657E2A9DC9D527AD6ECB500A = { isa = PBXGroup; children = ( + 6FAEB244A5931337D65B598E, + 2AC8FE42EC2A31068D09A6B4, + D9F58B09F67E00AF09B4A71D, + 8052FA33C4800A40DABB1B08, + 483A6673516013606125D4A3, + BCEC73FFCCBF87AEB18FAE8C, + 5FE7484485B599B65B575077, + EE9E5EC214D155A9628D5B7D, + 4CECFF3C8E0A5E781BDDAC04, + B2B82CC21E4D999B4AA51FFF, + C3CE7E78BDB63ED7C5594614, + 109A47386FB02F6A6E521132, + FB96D2AC82EB2CD73D58C3E1, + AF89EBAC8A864AAC9A9E6C27 ); name = positioning; sourceTree = ""; }; + DFDEFB59FA490DFEA052E3E9 = { isa = PBXGroup; children = ( + 4519E9C892334AEDC1D1E5C9, + 9C04FB0903CE700EE4810812, + CAF81A6FB2BE6EBED029A0E8, + 31C4644534EFBB2EEF0E5EC5, + 02E53134D5DDEA9C842E33E6, + ED1B2AFE610AF9E4ADCB191C, + 5F3CBD7273E1585E18CA841A, + B9284D221BA17C7E5DA682A0, + 22BB598301E250735947DAD5, + 7AF029702B3954F6968AE804, + D96D466A5F6DD5211495B984, + 267AFE448F8ACAAE9A5354E4, + A30DAFD73D09090C0AA9AA58, + 1F326A56EFFBA2D6CE7AA12A, + BC8987536AFBDD9313457B32 ); name = drawables; sourceTree = ""; }; + 3496689C6578CB68592B5EF0 = { isa = PBXGroup; children = ( + 8A8ADE53E7952417927E323B, + CA271DB22A58D8F8AC933714, + DA00D76D8724137CF1AB4144, + B7EF589314F8C7FBBFD5835F, + EB3D11D0E9D5BD4D41C0B880, + 76A97601D2FD08C0932B30EE, + 823FA000B2C62F9307B17346, + 31C617A6BD78C8899E3EF358, + 9E09EF0CEA1E377BE6E0B2FD, + 33AF1ED3B236DED58212C797, + 960B68DD9D277C1BB9429AED, + 8CA6015153DC88D575B27C9E, + 029098BF8FB854332A788E51, + D2C47DF6190643015D581D88 ); name = properties; sourceTree = ""; }; + 8FA7B5A393713A5948376930 = { isa = PBXGroup; children = ( + CC4F4DB2266D3BAD65ED1168, + B693FB9E8CBA57496271737F ); name = lookandfeel; sourceTree = ""; }; + 781B2E6C4FC75403B30F07F8 = { isa = PBXGroup; children = ( + 8DABBC640E7A4B4E84D45CCD, + 2220A5B902E6DF794AC23AE8, + 6D782142837DD19790900838, + F91B17758DBB6DBA39C6D1EC, + B334BBEF296B148D5E8B8D0E, + 8993CEA9FF769BFB8D5F4084, + B0FD3887A8F63665DAD73E0E, + AC2B9275540C5CC70CF34252, + 4FE2203D5739F86359B244B0, + 6B8C1F3D77BF303BE4A1C3F0, + D09A1421469CC1A9B2675AE0, + 24F52042CD67851BCF3F24E0, + ED359C0FF49D12BA9F60F640, + 75EF08B8A96C65C118C400AE, + B1D3AD092FD44E44214F0048, + 4F74B928AD873ECDB685CDC3, + 42E209D1A7282D9355B4F623, + 29BA64947611D66FA7699180, + 606EA04364C448E428335991, + 976CB35D28D5A83B6F5441ED, + 9AAC2AB7CCCCF43268C936C4, + 87C5D5BB9DA78842A182380C, + 94C6758E72DFE938197E8293, + 38AF5FE5BF4679D9201C5AAE, + FFC7E0131147BBE8A74583CB, + 42C7C43436C7EEC006E04E14 ); name = filebrowser; sourceTree = ""; }; + 8FABE1E2BA8351FC4A712BE3 = { isa = PBXGroup; children = ( + 60F477C385B734405E47BC92, + 460B6001A348A4ABC2C63A61, + 10E919D49BE322050F2B8946, + 512F7515354D54B4C097B16C, + CFBDB0925388FC99EE6BB8A5, + 96A1FB30A13FCD06846509A4, + 1F407D523CB494344FFF5DB2, + 5DF44E20AD72E55F2F83B495, + FF35F5314CAC65923ED405C0 ); name = commands; sourceTree = ""; }; + 3ABE3B9F75DD1497E4887788 = { isa = PBXGroup; children = ( + 3D8ACAF9D371CC6FF992D1B1, + 9E89D3D502DEA86CB3023441, + 02BCB0289AF914BB165E14C2, + A72735B11FDF0A75C3752BD6 ); name = misc; sourceTree = ""; }; + B40D92429BA8B46F72B44E8E = { isa = PBXGroup; children = ( + B14C1027DFE30E3B66B0A01C, + 7EFB40D99C9C96C1946F71E0, + EF34A41325E5EB605C75F440 ); name = application; sourceTree = ""; }; + 5F80A7A80433BF9686B4E254 = { isa = PBXGroup; children = ( + A6A5D58849F5C4CD7901C66F, + 9E2A5E87734F794AD8EC795C, + BB3CAA98DF478054A5B1F833, + 4D9A9572AE868B160A8A5D67, + D022D69F8BAA63361E4C4123, + BEE2BB0D198B116EF2F0D657, + FE2ADA5DC3CD09C6CAE4CB19, + 0F361FA4B9580942DB5BB12D, + C3106A0E4E59C8B6916567B1, + C6846B813744A54BE09FF646, + DE4337EBDFC00F4053F0CF08, + 6E11C12629C29F774EF4FAA6, + 2B5C71C695A0692F630B7BB5, + 7D2F85FCD2D1A81010E93AA0, + A1836510B169F825DAEB5A69 ); name = native; sourceTree = ""; }; + 2E9CA4DA17EAFE38D7A78E7D = { isa = PBXGroup; children = ( + 62B65C4F32CDEE1EF6A8A90E, + 57D5FA72346C0A36FC77B88D, + FC026C570E719A73049E256A, + 981B49935761D5E86EF2F141, + BB45CEB3B0913F98FC817F56, + DCD943563E05DCBE64252353, + 664AABD7F28F3AB0C58D82B9, + 5D5B114D45CA7771792D8159, + 657E2A9DC9D527AD6ECB500A, + DFDEFB59FA490DFEA052E3E9, + 3496689C6578CB68592B5EF0, + 8FA7B5A393713A5948376930, + 781B2E6C4FC75403B30F07F8, + 8FABE1E2BA8351FC4A712BE3, + 3ABE3B9F75DD1497E4887788, + B40D92429BA8B46F72B44E8E, + 5F80A7A80433BF9686B4E254, + 7BD7C5E9B0356421136FC176, + 99D90DF3A6A405AD47BAD5F6, + 32398E867D19B0BFAEE218D2 ); name = "juce_gui_basics"; sourceTree = ""; }; + 5A383C70731C60911E6985F5 = { isa = PBXGroup; children = ( + 2BDBFF82A17CB1891AD01762, + 4C40992C55B348EF67123956, + 4EB82AA5AF01B73D17DA570C, + B82243C4E4390DF87B90DFDB, + 8BF06F0C56C3CA061BC57220, + 2C4BC31C95D6EA8C67B450A2, + B2BEC9A164BBED99E6DADD70 ); name = "code_editor"; sourceTree = ""; }; + DD89F0434849D9CA29F2A2DA = { isa = PBXGroup; children = ( + B09417846B35FE353DCFD810, + ABEDE52541F35F08DAAB5EDD ); name = documents; sourceTree = ""; }; + F1A287F1B4FCA759EF3A5233 = { isa = PBXGroup; children = ( + 81D58EE87F67A29DC586F785, + 46DE95EBFD5DD32CF3C0E496, + E1366DC19FA3A3D19F7C6471 ); name = embedding; sourceTree = ""; }; + 5B19D4A71CE0E3D17B500A33 = { isa = PBXGroup; children = ( + 7EEC4E73CC2943FE741FACD0, + 2D1BA5F10EAC1A1F3031D8A3 ); name = lookandfeel; sourceTree = ""; }; + 6BF5E15522D8A272032AE928 = { isa = PBXGroup; children = ( + D2A264521FA49FE59C9637AB, + 0CFD9DA207467F0D87F7474D, + 34B4DBFDD45CF7DC3ABE112C, + 53CC1C46A4B860260CF66012, + 1600235636BB13FC2229918D, + CF05AC27D04B76605A510DD7, + C5C06A01666B3511117DB717, + 9DD20176AF51856EF56EBF53, + 9F39B965AE2462169693C84A, + E12BE0EC1DA4FB8EF6728EBE, + 35E88BCF20A6CB57A96119B9, + 3852D921D7C8D22A730FF046, + 71673B106F6D7E71D33D4831, + EA1AF200A6422797CDE59403, + 6C6B318D6930A05FF86AD97D, + 14BF0FC7527C8C444DBD45B3 ); name = misc; sourceTree = ""; }; + B7B3A5120FFDDC425428BDD3 = { isa = PBXGroup; children = ( + 7083827845431F26B7995FDF, + 0F0522F4C2C81C92515A3DF3, + C9B058E8FE2E685D261DF159, + DD235D415EC7781D7268A634, + 5E482CC19C62F7EB0587B605, + 68630A2F219CF0B422990F5F, + FC1C12941D40CE2CF0C3A0BE, + 2F7A7D923698D1E5BB1B39B1, + 87DBDF7F4E04271FD004BDDC, + BFABC09D9267DC5E2B3CB6E8, + C03857EC18D17BDDC9D0CAE8, + C31446ACA9A16ECC4D084BA6 ); name = native; sourceTree = ""; }; + 8964A494E6D2B4387F8CA835 = { isa = PBXGroup; children = ( + 5A383C70731C60911E6985F5, + DD89F0434849D9CA29F2A2DA, + F1A287F1B4FCA759EF3A5233, + 5B19D4A71CE0E3D17B500A33, + 6BF5E15522D8A272032AE928, + B7B3A5120FFDDC425428BDD3, + CF6013FBC59AB0836FB70315, + DB0DF608454309742580E256, + F79AC6171CC52BFE4F3EFF7A ); name = "juce_gui_extra"; sourceTree = ""; }; + 82A850C8020C4560C4084D54 = { isa = PBXGroup; children = ( + F69AB9EE6EF759AE687B11CB, + DC40104D134A51AAD12BFC52, + 5A5BE031C0D792E2A3B8581D, + C2BADF2298D5B6F6F9D5B382, + 2E9CA4DA17EAFE38D7A78E7D, + 8964A494E6D2B4387F8CA835 ); name = "Juce Modules"; sourceTree = ""; }; E9187C22BD3E64A16116DF8C = { isa = PBXGroup; children = ( 8B21C8D0F53D4B6647916A6C, - 43AD9F8DF7F760C6BBADDECC, - 57FFE120531343D50B7D2D28, - 9025A92B6F0FB6F8EF51A168, - EA4C72277CEA392BC33435A7, - 23634B2289D5AC4EA728B8F7 ); name = "Juce Library Code"; sourceTree = ""; }; + 49F82562788D22155BA6027F, + 42C3D1882155445973CDC6FC, + EAEC535F117A301B82A1535E, + A360104FE6E53E87F6286880, + 85EB813A1B337F2133DBA6D1, + B952B50156EE2A711202FC7B, + 43AD9F8DF7F760C6BBADDECC ); name = "Juce Library Code"; sourceTree = ""; }; AE86EC0712AA99EF212AD4AE = { isa = PBXGroup; children = ( B786F246076E6F5D363A6A2C ); name = Resources; sourceTree = ""; }; C134A2DBF8134BD791778F0F = { isa = PBXGroup; children = ( @@ -64,6 +1381,7 @@ D5A29444C637255D66ACB7AE ); name = Products; sourceTree = ""; }; B3F3C4C19F8E5C6897A5B3C3 = { isa = PBXGroup; children = ( 4297D3C9A6348BA224516847, + 82A850C8020C4560C4084D54, E9187C22BD3E64A16116DF8C, AE86EC0712AA99EF212AD4AE, C134A2DBF8134BD791778F0F, @@ -142,10 +1460,12 @@ 172414663F1A38D78D2B00C3 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( C67B5243DBC7218FEC5DBCC0, 9B11A7532637EC12F1DC4B2E, - CFFBB821ECB7D85603624533, - CB81C9C2C8729E6E3D47894E, - D718D953943D6576572CCD49, - D3AEE9F470093C7E82F10144 ); runOnlyForDeploymentPostprocessing = 0; }; + C2F06AB24C47C40A7D744BDA, + 834983ACC3944599D2033A8C, + 5C4B4C4C978A1E91EDAFD15E, + 3E2412ABC1E675C5D196518B, + 1FA264E289C57040EDF54581, + 176036A9FFC9B760DBC7081C ); runOnlyForDeploymentPostprocessing = 0; }; CB4944AF280662FF07FEFEC4 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( D397D8CEF8663F449B4439C0, 1622BC343C98F98AC2AC0459, diff --git a/extras/example projects/HelloWorld.jucer b/extras/example projects/HelloWorld.jucer index ab81767438..a830c69203 100644 --- a/extras/example projects/HelloWorld.jucer +++ b/extras/example projects/HelloWorld.jucer @@ -36,15 +36,13 @@ file="Source/MainComponent.h"/> - + + + + + + + + + diff --git a/extras/example projects/JuceLibraryCode/AppConfig.h b/extras/example projects/JuceLibraryCode/AppConfig.h index c5dc34d8cf..34ff64ba5a 100644 --- a/extras/example projects/JuceLibraryCode/AppConfig.h +++ b/extras/example projects/JuceLibraryCode/AppConfig.h @@ -3,39 +3,35 @@ IMPORTANT! This file is auto-generated each time you save your project - if you alter its contents, your changes may be overwritten! - If you want to change any of these values, use the Introjucer to do so, rather than - editing this file directly! + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! - Any commented-out settings will fall back to using the default values that - they are given in juce_Config.h + Any commented-out settings will assume their default values. */ +//============================================================================== +// juce_core flags: + //#define JUCE_FORCE_DEBUG //#define JUCE_LOG_ASSERTIONS -//#define JUCE_ASIO -//#define JUCE_WASAPI -//#define JUCE_DIRECTSOUND -//#define JUCE_DIRECTSHOW -//#define JUCE_MEDIAFOUNDATION -//#define JUCE_ALSA -//#define JUCE_QUICKTIME -//#define JUCE_OPENGL -//#define JUCE_DIRECT2D -//#define JUCE_USE_FLAC -//#define JUCE_USE_OGGVORBIS -//#define JUCE_USE_CDBURNER -//#define JUCE_USE_CDREADER -//#define JUCE_USE_CAMERA +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +//#define JUCE_USE_COREIMAGE_LOADER + +//============================================================================== +// juce_gui_basics flags: + //#define JUCE_ENABLE_REPAINT_DEBUGGING -//#define JUCE_USE_XINERAMA //#define JUCE_USE_XSHM //#define JUCE_USE_XRENDER //#define JUCE_USE_XCURSOR -//#define JUCE_PLUGINHOST_VST -//#define JUCE_PLUGINHOST_AU -//#define JUCE_ONLY_BUILD_CORE_LIBRARY + +//============================================================================== +// juce_gui_extra flags: + //#define JUCE_WEB_BROWSER -//#define JUCE_SUPPORT_CARBON -//#define JUCE_CHECK_MEMORY_LEAKS -//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS diff --git a/extras/example projects/JuceLibraryCode/JuceHeader.h b/extras/example projects/JuceLibraryCode/JuceHeader.h index 3e9ebe10c1..ce56372e44 100644 --- a/extras/example projects/JuceLibraryCode/JuceHeader.h +++ b/extras/example projects/JuceLibraryCode/JuceHeader.h @@ -4,8 +4,8 @@ project - if you alter its contents, your changes may be overwritten! This is the header file that your files should include in order to get all the - Juce library headers. You should NOT include juce.h or juce_amalgamated.h directly in - your own source files, because that wouldn't pick up the correct Juce configuration + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration options for your app. */ @@ -14,7 +14,18 @@ #define __APPHEADERFILE_TTAKTK1S__ #include "AppConfig.h" -#include "../../../juce_amalgamated.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif namespace ProjectInfo { diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode1.cpp b/extras/example projects/JuceLibraryCode/JuceLibraryCode1.cpp deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode1.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode1.mm b/extras/example projects/JuceLibraryCode/JuceLibraryCode1.mm deleted file mode 100644 index 2d6380298b..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode1.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated1.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode2.cpp b/extras/example projects/JuceLibraryCode/JuceLibraryCode2.cpp deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode2.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode2.mm b/extras/example projects/JuceLibraryCode/JuceLibraryCode2.mm deleted file mode 100644 index 655d816baf..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode2.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated2.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode3.cpp b/extras/example projects/JuceLibraryCode/JuceLibraryCode3.cpp deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode3.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode3.mm b/extras/example projects/JuceLibraryCode/JuceLibraryCode3.mm deleted file mode 100644 index 5d7de97f50..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode3.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated3.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode4.cpp b/extras/example projects/JuceLibraryCode/JuceLibraryCode4.cpp deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode4.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/example projects/JuceLibraryCode/JuceLibraryCode4.mm b/extras/example projects/JuceLibraryCode/JuceLibraryCode4.mm deleted file mode 100644 index 1ece5dc3d2..0000000000 --- a/extras/example projects/JuceLibraryCode/JuceLibraryCode4.mm +++ /dev/null @@ -1,15 +0,0 @@ -/* - - IMPORTANT! This file is auto-generated each time you save your - project - if you alter its contents, your changes may be overwritten! - - This file pulls in all the Juce source code, and builds it using the settings - defined in AppConfig.h. - - If you want to change the method by which Juce is linked into your app, use the - Jucer to change it, rather than trying to edit this file directly. - -*/ - -#include "AppConfig.h" -#include "../../../amalgamation/juce_amalgamated4.cpp" diff --git a/extras/example projects/JuceLibraryCode/ReadMe.txt b/extras/example projects/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/example projects/JuceLibraryCode/juce_core_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_core_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_events_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_events_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/example projects/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj b/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..e93f9ba2b8 --- /dev/null +++ b/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj @@ -0,0 +1,1884 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + + 06CA5B0334C150EA394526A1 = { isa = PBXBuildFile; fileRef = BEF4293C91AA5081C10A71EF; }; + BF624C8AF10AA0EF05E22B6E = { isa = PBXBuildFile; fileRef = F3D89FE403C7A9311A6D552A; }; + C05ED5E13C3193AA809C46FD = { isa = PBXBuildFile; fileRef = 0C28E3EAC62D8D95F93EE891; }; + E659ADBF9D832ED8F245400C = { isa = PBXBuildFile; fileRef = AE54E09CC626A723482BCC70; }; + 8799338A7A2C0DCD4A9F79FD = { isa = PBXBuildFile; fileRef = 0E81FF3AB6526CD727D14092; }; + EE47290AFE3EB6472027A398 = { isa = PBXBuildFile; fileRef = B7EE10A226DDC18C7492D009; }; + 38D25D7500799F5BAF3E68AE = { isa = PBXBuildFile; fileRef = 075CAA516F2B8E1B40E8F40F; }; + 01D42514D5505853BAC90F61 = { isa = PBXBuildFile; fileRef = AF743C274F4F8AED5FDB8161; }; + F3BCEC73FFCCBF87AEB18FAE = { isa = PBXBuildFile; fileRef = 58F9FA1714BA8849C34396A3; }; + C43A3DBAB79ACA02B91073A4 = { isa = PBXBuildFile; fileRef = 49735B025818B8E30FF6D4F4; }; + CCF81F713D9E0122A7E2363F = { isa = PBXBuildFile; fileRef = 6DEA8ED994B36333EE2D299E; }; + B0CBB760D14E35E1D477AD6A = { isa = PBXBuildFile; fileRef = 5BBB67267DB8B804ED9C2323; }; + 129733E61276EA045C0ED598 = { isa = PBXBuildFile; fileRef = FE049851997F253302C4D2F9; }; + 8A3B6D1C041C6F1F33C6E5B0 = { isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 64A2C5B7B35FF08C9ADB5360 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6E040E7FFF35F5314CAC6592 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 8A0A13ED4C8167E772D46C44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8D79580D3D79A609C3795D4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 16CB3CF18EDD877E78A59984 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9292E79820E0510BE0F367C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 5361F33C840E9065426A9723 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A5E88AE5E337D4C522B372C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + C62D367387CBD79251DD7E65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + F2F086020331850714C6EE6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + 1A5A2739690D84FA1365EF1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C7113CB0E96F48CE9170E5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 3E7640F7F675237A25BBE6ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 720450854326D9E218D729FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 90BE6110C2C1BD6CD1906456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + BD8C89AACE79B587F8D7BD05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7838B60527A4662951F44C07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 80D4DE119D519C7C690BAF19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + 383B08CBB206C7D22FD53626 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + B5323A063EC774990BE792E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0991DD68EEA8FAC20A14059E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + B7AF66DC71626F21BA5581BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + CCC5A0E1E34CAE18F2B77C12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + E621B13988438157D4B75177 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9DB653B6BB75D678C7C4A737 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + EF279E41970ADA72A2C32556 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + E933FE79CED5095A37BFB1E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + FD2CCFC4BA155A118B5A83B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + B50C8EA0401C5B72034F3090 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 020C07A6EF53C3F3D88B3981 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 884873F92BD9CBB807F359DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E636D2BFDBAA8DAD5592D84 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + B3404B75870CE31744A31C2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9429B485F4D467A271F6E03A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + E82E9B99CA175C7B0F0D4359 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E66053F18393DE51B7750D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + AD6B76E97A64B20A4E40BD0E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 261DF3B4F882DC5931A819F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 3F663E5CB8FE54C411570DA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + B61C116D702533B6E04F6624 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6456ED182C5F605C1D8B1AEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + 0128567CD914DF9A2B3ECB39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA03A03F2D9C7473BF63955E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + 5496FE4C587D33EEA5CD27C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + F488DBA7217074EAE07A37C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + 8F66A3A673D647BC4FB45167 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 7A2CE45ADDE2D54D9AF8DEDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6E7089A01DAE3641C1740E70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + E7570731AF5780DD2BD61FD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + A039ADE6DCE33DB5C0EC7F3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + 12596D3A1AEE0E0A54C48072 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + C1E452DF78EF9F71FFCE79EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + D7D019470ACFF6DD3227BFDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E4ECCE4CD7BC4515DCAA101 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + 19B919AC116E6A72B2AD73C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + 1F2CAEA28E38CCC2472E3BA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE7E2903D1896C54FE8CE723 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + 0FFDF98C12F68F239009BD17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F43819AF02BAEEF28D8E428 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 707B19DA97BC828E05790082 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E2433B0692191CF7A29C43A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C96DCCA2C095F759F7F0E58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + F66C72A50F13038FF8B957EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0BB8C52172BC17B129D07C81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + E500FA8B573229FE1B5C3865 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + 372961AE7F2FB77370E41586 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 92194FE3E28382847E01FDF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8A41EB17802AEAD26F592EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9036BC32D6862C8698DB1CCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + 49D9B20C4878C675B7D54C96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8FBFAB4BE11743BC950FCC1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 33C4DE044AE46D5AE2388C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + AA0CBBE7A2398F0748BB6004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94B043C26CD74E83C1ABE287 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 83A86F0106572B4C6EB03F18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + 012FAFCA624535545D12B172 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 5981FC91DFAB0065F69DB621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + 92B7586395729678D1FB0529 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0E5407E73165E153DD6222E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B93D2E835042679AEF904B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + F64488D624F6F17282331340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54F9B1743C86394995809EA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + E1EAC537056825D9010CFA7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + C92198F08E04993BE6EE1CC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 95C699CB1C7870B3CB514A4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2A9682DD510E987FF51E040E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + 98FD7847EE62F634A358A7B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07B4A716014330D03B1C9254 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + 937372961AE7F2FB77370E41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9DA0152C10C00F4B3D44BA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + 474CF4D3FDE58970BF7EC85F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 142D7FC9105482BFF6CAD3B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 9B4EEA9A4FB7A4587EC874CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72643EDD97C029E1D564ACB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 9BBCC125D97813AEB2E716B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 90BC01DCBC7727C9CACB08A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 5D16C05C11465E547DAD245E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2389B009F31BCFBB886591D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + DF89FFDFA65506576B616C75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB3B57CDDF333379403811EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + CB0692036976992ECA69FCC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + E39C2A1D6CFD5D93BB127740 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 97D6E5FBB11DC02020C08110 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E8C44343473783079862340 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + 816E4532FC35A681E0CA26DC = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 3063DECCB01F3BE4495014DF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + F921B85B59A227468E75FAD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_formats.cpp"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B083261472033722D66A343 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + 570DE12AFA65E0EF97A76118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; + 869DC33441E16711C4B532E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 932A49670D0D124E826A9ED5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + 141780297FA95EB256517C7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 39CF0D15C48ED213080B824C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + B6306AE6BE88F9FF06B45C33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + BE4173860D57B9377580EA22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + 878D1F28D564B4D2F6325EE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; + 6EAFDAA7DCC2B36BA1EE02D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + D896AA464446044CD41C901E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; + 0878C27458F8EB824DCB1F11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; + 852F32CC1A8309CB8301FF9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; + 6A41D793199AC67506CF46A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 815AAF2F2EAB8B72428F0683 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + A8422E1461D7CD4FA260F6EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormatManager.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD1ED7D8B455DF2C3C76775E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 333C63B88849CDCC79DEF3EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + CBA63471294126CD2D0BED29 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; + 3F6FC668D8F4632A613342EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectXPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_DirectXPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + BAEB573AAFC588C1985DF623 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 2BC3C8761ACCCBE3EDB638A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; + E7745FC4897E81B9CADB8567 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VSTPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 515196A62CD7B09925F43814 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + F0D4DCCD27D10E015E37870B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D4857257908DD62B665C705 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + 896F8EE8D168AABC010D3D9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80FD318E49F54C1AE0C71C6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; + 510DD21DC61FB0613C4574F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7818C33F7E1F5C33DB4FD418 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + CB380B0C86F49661E939FA43 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 8DADF246B7194D31ED22FB0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; + 13BE00D110CCCC6B3A1CFEFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68B218650DE669355B29B0BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A578DB9357D681638212BA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + E3A448D79602BE793BB5AAAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + D0D08C5BF3FF3AC38C2BB5F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 7007AD793173FAD647FF7A18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 386F6DC3392D8EB2686ACAFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 1A5B03E20105BE5955226D39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 113C13459089A1E03A142EE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + 42196C6E61AD81B534C91F5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0B0A66D47FDC55CFC35E8110 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 60F85537112008053327B3D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 7ABFCC3AFC27E5402E1DF422 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 82EC14BA832DBF90D8946880 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 4BE74BAA97829DE02C4FDB7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F1C330398D9FF5FCFB5AC75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + D40B525F93AB6DA1F71608A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4B1CE8EFE058FD9C6348A1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 81651FCBF2DB607514C50E97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../../modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18E372E585BCAE4E0B2F7DC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + 2A2A15421A84B198DB11E90F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../../modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + C652C007E4FFF0063CB89934 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 36BBE27B0B52E98BF728FA66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../../modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + FAB48302BA0855EA3AE64178 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + D9CDB4457248C0972C9FCA8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 85E93DC39BB614155EA397B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + 339AE29FEA039707CF9AF337 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + F2931505057ABEC71EF86327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 5410062042764412B8CE3031 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 993C75F27C459FF0B8947FDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 0BC3ABD4E911A345ADACAD3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + B51A7EC05DEDFFF65B97FC67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 416DD782B4D314B1CF519AE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + 2156E976E03B8A3BF4547434 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + E420676FB21174CCAE99FEB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 17E157EBFBBD238EFEEAB043 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 8EC5CD107FD22A0CF75C115E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 211A516DD6179BB28DE93A3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 3675F49035A0F817B85A26B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + 6C99522DF55AD82A23313A81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 9DCD24C63652C188CF91A04C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6EC860FFC84DA2E241C75FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 2BE5B24518D9EEF8B241569F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + D1B2F6B360903C38C13984F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + E18E6670CA33FF08D2268761 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + B88744B1C8B510F5FD1142D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 39F2371F8172259E80B67162 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 0D296D4CCA103B16CA77FA87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + E62DE16AC2C916C96AB1C901 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 1FC1795EBFBF2AA1B5CF8407 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + C7452800D0AE22E6BD60A6B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 159226081BE1363DAC91ED92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 1030F04E04E2EEDE8BDD940D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 06352BB51E787F4E296E87D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + D2CD81D1D6FACA7714EA5B87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + B2645B4154582EB412EA5409 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + D90C2276E0491F12E3CDACAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 5C90FB783FDA31AE5CECABA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + 0557144872E56AED1981C097 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F5578A8C9B3D4468DD9BCC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + F68F092DAC017371B6454B47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + 1BB76DB94CC776536F5D05B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 15A1CC4B235B05701A265D80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + 700A0F197FDE2741F2EA67F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 6706C60A77E395336BC88AD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + ABE35C687CD72D0602A57233 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + B41A45C80942F20E4236C02A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 72415E71ABCD81C9B840AF63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + E72C979674B4DD940B28C118 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 3820C635B72EEF8D798BE97D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 8657F12701FBB235C874CBDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D7810AF12E758D5B18980D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + F7A1E0C577A3C351A182FB52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86E9ACE4D9E1E75242047B68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 350E3AAF5E701D63A666727A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 732C9D0AF1AD903369267F1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 66C76A65EFF649387B853C54 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + 8E3E0FBE090A32F2B8C85191 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB86FA3C63BAE361DE634163 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + BB4A9AB8DC1834C80E0AA319 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9E09096F56DAEB3B94677E5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../../modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 77F45BA59AC7DD8EF43A41EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71E0586238EE6CC0629F5B72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 50F072C3CDB3FA8AF42C2B30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C4BDADEC05562C652C007E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 2E6EFCA0B0D66C8321CD1963 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0242840CD5E71EA77677E32A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../../modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + A85145C19A32D7C370F34CDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6775556269C4FF0DD888BA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 6EA8662522EED3D2E001FE05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + BEB28A31BEADADE6D0941858 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 6C80BE829D90C72CB0265682 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + B6468CFCA70428E100C9795A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + F2FAED3EB1860FF768D67B66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + B1305C1BE5E31122331946F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75644D1C0249D43156A1E844 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + F26BE92ADD0FC82E814D5C0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F85939710C6929C215BFBF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + C1AF49D543AB6479E426A96B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + F26375A3DA8D95A05B8A8C1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + EED6DF24D99B5AD12DB93C9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9B630B00821EB0AFFF93FBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 5DED88EEA86235D65A53070E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A8C2E6840FC5E13867F9A71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + 7C00AE023D8A48249A7FDB46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2BF5B812C08372268407E346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E1B0F4D05FBAC2ECA04906C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5634817B0161F90EFBF06DB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../../modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 6AAC355A54DF0C4745A5A8BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 60919B2823E28A35B0FD8947 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 289B6EC69FE9C1D163E4661E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 745B8AB58F8F390F7F623633 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 375F26EA0C8014F6C03F05FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9EFEFC2FB4EBD8989B50A393 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 227483B5E56A7451F1F8BA63 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + C89196A1A554614F1F1890ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 91A055D3F3CF03665527AC74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 47539AD5CD9E010BF5612CC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E691A512A103E237A1D9D3CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + D7919E319088065CA0D215C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1078A320E0828B07DA0FC4BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + B7BCC3769F1CFED196602026 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 183D6793C658B0A7859A24F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 6EBA651135AFC3E6A6D15789 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 811832F056181336A6319BA8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + B8CDA8A4419DB8F9ED864F11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AE47A9491165EE241973AEF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + CB57024F0E007E62EB405B0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + CC306093DEF3CD7CF2D0CE3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 78939D6FFB1256FB084C6C41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 77A62E8F834AF332A2B3FA48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 976E858DECA13760377C9BA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + 4EAF62CC8DAF1FA5E3FBAA64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/json/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6415031350508A973C592E60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 12854D6A249055F20565F73F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E089392644E440A9D7F3F3EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 953E224AF3DF5682B975143B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 37E393AC34FDC09564E8D8FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + DA7A4E4C23D50AAA923B8B73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + C54CB4FE7F00C1DB353F0C3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + 0C95F50C215C7DDC637E231F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD08BF958198DE916E490C96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + 2BA51B7119C6B3E0DF5F6FF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + 20459A3A7B6F704A819606E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 4F40D25584C032CE140605C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BEE6439556054726E358EA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 7910F7459F48EB4C5FE0497F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 4A22DE9DF590115F174CA70E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4ADB239D6FD560C5E19BC31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 2388A53B6D4E843346C7445B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 301C611AD6F86DE3DA42ED1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C8971C6351A8A10CE5CDAB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 201BD8D3C5B11D5D2FD21230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5734F311260EB3496FD78BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 30B10FA808CF53D0B4149DC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2AFF41DF959F94285C1DCFD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3EBAF92AE1D96221F7AAB48B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C8DBB6F1552D768B4BD30AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2F45E30DD975B870D03F1EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + F67FC5A61FA264E289C57040 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../../modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + EC470D35E244B75A07F5FC3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ObjCSuffix.h"; path = "../../../../modules/juce_core/native/juce_mac_ObjCSuffix.h"; sourceTree = "SOURCE_ROOT"; }; + 342ED0275B7134CF56673D4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + C42C17FD8E3FA07EEC8D2DA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../../modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 939E84474B6FF1E4BCEED5AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 4E200650EBB604C49E585BD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 6B1208C30E3A9225B23F9146 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 63FDE7DEE73FFB236B572166 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 75E320A05877A5B36BCB517F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 1F2753991132B124E6F8F5FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 70D9E8061CA196D1CA522750 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFAB3424D162D2105B2DCDDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 817EF68827813C2F9501E88C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 926752969C54C8102202982F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3E49910B0D68245B2D786EC = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + FF9A1392424B439144289CDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 2604459A54EEDC3CEE31448D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8EB424E80EA1A9BF3996E2D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; + D982DB7C2DF80130B2D0D8DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 75877971E84DCE847271789B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; }; + 07DEC3BB2E1871CB718F1F27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Primes.h"; path = "../../../../modules/juce_cryptography/encryption/juce_Primes.h"; sourceTree = "SOURCE_ROOT"; }; + 645BC89CC946D74ADDB036A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; + 18B572494272CE300F994D00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + 12DB0EEC8F72186E4BBAEABE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; }; + DA1ACB637AB7B18748AAFAE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; + D56E61E634565695BD7C2BB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; + 412284310401A060B73B1D57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; + 9A1CCDCF9A40752332971063 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 63CBF9293F9DDE272E169B7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; }; + 0B76E61091F963ED4879557A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; + CD25D88B1553182D59A86484 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + C884750081BC05C932B98565 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../../modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 595BDD764DE3CEA1BB607AC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2F1A6DA01DC899BD7E18BE1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 69238ECEC4C28DE7CF12E82B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + 4178E7C965D8A09D227A7A62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68376B6E3DB141DDF5EFF632 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + 35448E92D858B467A6CA6FB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + BFA84B0C530330CE95E5C79A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + C78F14744080F849C1FE3013 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4DEA4F5C23211CBC96F7BE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + B1C64C530D67E08554002661 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + F5DF63B2FF70BBF0C39485BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 6A7C85F819E2F2107147C1B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8CFFAEC1C2C9F172F2C8F35F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + 36102C06CFD099DBD44F6F24 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 1D7B3DD82C6653F78D5DF85C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + E3073207CFB5C1CC34D94CC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8B50F9B60E6BF005666CD0B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + F91B0EFDBA70D291BE20AC98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Message.cpp"; path = "../../../../modules/juce_events/messages/juce_Message.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B366D238FBBC31D17A18D2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + D54B4C097B16C12926066715 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68CE02C950EE2C003B139BB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + EB7D03F26F0EB86308624830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5772D5ED2F13118C42750653 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../../modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 899CB91140BD7EA1A76AC216 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6551C46518DFCD9854EC7A8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + 35CBBBEFE0C8737B72EE504A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + D27508A8897823FF62234292 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + 204093CE9B5BAFAC9255E467 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + FDCD727E7F2138E7BA95E307 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + CE79523BC796DAB63590A8C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + 94692AD8DC01EAB9C1E27830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC862443EDD2F4D5CAB870C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + 41EA95B5883A8D51E033B35D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6350C8DC602AD65EF8C81A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + D367CD490580A17D262BFE92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + B6CEE808454A8091FAE5B8EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 0A0DFB957A245DF78B7973D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + 436B40E74725074339549CB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 85BD76F5FDB051DD5B7AEC62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 57CD50097C7B3250051E9D74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + 6F14B0CCA1AE4035C867821E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CF7FE1754615B48D66EBF77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + DAAC585C4648559DD713F28F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + FEA70002637ACFDF4163AE5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 2B89210EB6CEF025FF6484F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 1A4267544375B19CC9A62C6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + F09A6C1754ECBFCDA25FE65A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 63A6A2C037B73D7ADB95B976 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + B44E2B3009F86734509F0707 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + F5A4003072BBDA078AA916BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + 37D57DE00B92A601874582F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C1F09B4CECF0A7A71BE540A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A0B8CCC8DFA5E2C09CAA858 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + 8068F9138A81662CF961CA52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4157C08544A8B484C91C3764 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + 30E890EFA7F92153FFE3E330 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + E46D62F0E2A796CCBAECD4F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + D0573A7D4461EAF05C722CA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BCA535BEC3E15D230384B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../../modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + AE6418EA95A6E452AEF8B8C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + DDE4BA2E3B67843B0A9369F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 950A1D989FE3D8B9EF0EA6F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + B269B7648EBE79896F7F540A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + CAD0593400306C0949FE1C2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9233A76BA2DB0031F5F195C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 2FF800CB11ED065ADD41CF37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 43CB48BBB7DB4B2990C88428 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + B29A76453A0BF56FC1A922FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8092525DEEDFBBF852E3C45E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 0443EC0F69F8ED92725923AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F3E553F65665EA4FA1EB7B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 66AE31ABC4746528218DD480 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + CBEF3B6F6C6E9749BC4FAAD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + 0CD57CEBFF8DF24388554EBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + F142C87E6CA7E8600DC4976E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + DA4ADFC6F3422BC114059024 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 418E1A856AC14C426B5C1A8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + E0D521D6DBE4DFEA45433C50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 95CE7083810C2C32885E2273 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4036999747EA1A8D6EB27FB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 0B85580C417A5C7F09BC4396 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + D31FFA27048ACB5667BB64CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 59B990E43C0B976C4EBB3413 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + E404A252C81197A37CF2958F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + 23CE9628E867BBE97AE071A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + E4FA2D879B8B077031DF66C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../../modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + 478054A5B1F8332BFC6F6953 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A5B0E482405A3833F7A1E0C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 910F672035A0E2652741B938 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FC89B1F1E561A5B6378E023 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + 4033780D0644FE4BA3B74156 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 7A5D0124825A0372D7192236 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 4EA12CEF97519A89E38441FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A10291720DFEAFE7BAD80F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + F939D60573B6792D0D182D22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + ABD9A1C3BFA504D940A4E73A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 6EC0555C13C1B79A6AAD97F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FCFBDD08CFD09F520104C40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + 214F431E85ACD34962054FC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9CFBB03B806B54415C496EFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + CDB5DD0F7B8A49C44A1DC02D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3BCFA08D6AB28BF199BFE7D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + C1EF7D67E0AB069130DE88BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + E50E7A061D715B7D85498493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 9DD15C5A32E3C22027FCCB51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEB8B811264A01F503BA159F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + A3E0547D12C0E98F33680179 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AC448B2A71C82E9D761BDCA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + 48F4862D53AC9B348E218FDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2A4EB371A229E0F850EBAC8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + C7C5604A104D9BFDEAD48A2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9B10B1DC0962773B6D717072 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 9592DB4B706C1874C6594EAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 8073AA7F99EE2C0EC0FA7A2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 545AE93246AC76B52EE50E2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EE3F0DBB0D4B0C3835AA016 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01551407677077188ABA5B7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 3A5AEA422046F7BEB517EFB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 0AEC62B784468669FBF60F09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 4F33C20A13AA76A8FEAF0288 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 0D8B7F20F4C6ED99185BF457 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 802121EA35F8F3310DFC18B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB951025F03720D0BE8A598A = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 0243F3269CE52C8F82437C05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + CF62B65C4F32CDEE1EF6A8A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71C843E4EE03B2573AA020A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + DBB8D646CDE531B71640FD15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + F16FDCE5D2717295136FD426 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + A51CA0C86C888A7B6C684813 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0317531B8F09D6C0B182C3C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B822BEE79D2282971C5B33F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + 3488ED28F2CB47BC1D333B90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8396D0FD4D664788E199D887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + AD49C5B84D474C57E43A92DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + B1B22154E7D53915578F6B3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + C68077D622E2FBD45D6C7E1D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 44F0E2DA720B912BBD1269A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + C2C86565AF5F7529676A2370 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B356E0CDD2AB9A09D6F231A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 2CC95CCC9DFF74D71E35B2D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9A2AA5D2EDF62556B4603816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 439B370001E2AF2D2EFC5546 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + 6EE9F9F78C8BC898DDB97CF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4DB84061B9ED5F5282BE0F43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + EDD21B885BC1ED3EA3E12718 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66F8821490BAB95FB6615620 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + A24108E52AB8368AECB8A986 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB61AFB7662074B5AAAD24EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 0632FB95F7E3FAE40288EA9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + F70470121CC39AE37828718E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + 054E7B8005789BD1B541A01D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0CFA58E91D08BC401A185136 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 071F527283F198827EF2629A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C17CD80F37C7610168F3C70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + C450132710FE832E3B5F7681 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 23D567386334A6EA71BE7ABC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + 2FCF750086C8198D00C875AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1694E84A1607E4269C32C62E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + 1946F879334BA2C8E8D37685 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + A553ABEDE0194D3F8109EA77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + 460EB41C0AB478EE02D8C851 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 642071540A6FC9B26A88A543 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 83D89AB7A52025AA05BD7DAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + E4656586FC087DC3AA86F9BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BFC0B7A0782234F4FF80715 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + 4F20251B06B59DE9129B27F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C65BC39DEE41E70E3C52BFFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A6B16248557474A746EB334B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + A09C5FEE9C851A3230629D06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 0AA28797D6F64074AE508FE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 756660036BFF964BA6D2A7D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 343D73A212C9C553ACB08BF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + EEACEFE8279756DDE0DE80E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 7E55D6E8E530E99667C4BD86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + 81988E4C4B2DC28FC9FFD7B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + 54083520C7AA5911B1F0371D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6575E4E6028876F950F1455E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A141DBC73B08BE8858E900CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB82C6424438EE90BCB1769A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 63A58441B648CBBB4DDAC29D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + E000C2F12D4D2A24E908E9A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + EBF07FAFD74A43C7EADC0971 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5B4872FD88A73385217EBAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + 69AF82E34E989BFFB28B6CCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 093A44E9074124F31BF14BAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C843A835738BF164285A7798 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 5AC0EBA7869F300890FF0F6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 595F2DC0235F848F9474E83E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + 7A780E8A8BB90D8F9C4E66E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F15723232624C3C4725FB75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 72ACCED3247997410B7AECB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C391EF87050F00BBB197E33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 4211A516DD6179BB28DE93A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89A0DD89388BB04A0E90B290 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + C69FDC981385121647FB8F7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 45AF598689D6BF0F83CBEF2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + D186DCEFB4DC18A2F2C407B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF528D3BD5C4A499BBBE8E76 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + A5F74C36A5D4076E5223786C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A4E7B7537E2DEA62D0F03C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + CD51A1099EFC039CC8E0CA3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + 9B34ED1B89F86B25AC2387D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8FDDC0F38B4605B01BD752FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 7B84ECF9E2759E486C7D8C75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 57C78F0EB2BF768BC08F952D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + BE4C8A6E9971F9115A615F97 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F67F817AAB55ED2BE16B376 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + A9708AA439A3EA1FD07432BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 67A061B16326CEE71EF7DB9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 3C3BFB23E971E76471158CEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8D93F0ABEC9636EE3A49C49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + FFF80B2DDB0CB2D788583EC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 409BA652CF34580213E13F4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + BD8DE112F37D56E5B24A34DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C6ECA3A12D2FF2DC6326F06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + C7D8A0A95C3858358006608E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D517E07AD73BA562671706A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 3E1247ED69CE2B3CCC9AC0B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28D73C6BC496265A4E9A4A33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 91006C4C3A54A0741775F3C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3B410636D633523A90FABE2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + 528143E7321E19D40EE470B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5AC73AD1C77A3AE0A498915B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + 75240A9524768C784CED3DFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + FC7BC34CF1A1880A634CE780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F6AC26B2CC05F1E8A36F1B33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 572BB57C627968DBBD52D060 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 449394799FC6C2E65123860A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6156C1431F65616F04596382 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D9DC58B13890613B72E80937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBFDE0C31ACD2FF8EB74A8F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7A7F182D3F35F8D873672FDD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 215BEEC802FF1BA1E636ED8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 803600D061884786FAC030F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + D247CA92DA6D06F96E1441AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + BF99C2F3FA6743EBFE13355B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3C8607C87EB9F6A504E15E6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 3EE2339AE024B1F2F03F3A74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + A98E0242693E402AD31F33DA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + A21253BEAF77F9EA35933BF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + C3F89EC86D7F5303F114C031 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + 2ADD5A07A5A71C5AE293C5A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + D76F758D97264230E02F3FE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 7870EBC2A5F549700810B0FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E305A4F37E36BA5E052B3BD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 02AD6374637002CB034EA698 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 885D2CFC91EA7A95322115F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + DD2C7BA5FEE69AACB4AF1987 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 93E235DA4BAF8B9F0D132E57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 4CD284BCCF9D478448CBDF7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5FF63D7097491A39A4E346D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + C206EFDA7370330F80852733 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 12284310401A060B73B1D575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + C1BE7C161D78D2AA4AAE5B28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A3DE4B05E4F31594C2B2435 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + 2750700FC44694DDB78FF5DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + A8A7A1E79E55B3541815E00B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 73BF08B2CACCC317F3D76035 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35DA3E75DDB03BB35794289B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + A7CFDAB5D91C7E1A27C231F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9C465DACA0450474E6E90E57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + 451F2CB4541F413A4C89874D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 84174C24CDEDF07737399CAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + 8144680DB1BA191C5C6AE595 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4A9B927BF2DBB2355001EF87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + 23468B2CD2686DF9A3868791 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF50C71A19FF8AC85923D3C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + 8E8E54D124535961D5DFE52F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35EAC30CF2555303A6D6492A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 0DC33F4C9F356C323E4012C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 61744CC7F994C1608DAADC9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + 0470121CC39AE37828718E9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + A327279A52A69F6B3FA88980 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + F174D805BCEF983AE7F8DA16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7740F59A4C12E35D16C05C11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + 77574840FB8B879992747437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + C52310009C96792C3A7C4F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + BF2EBB74C0B176990A73F1F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5411B575C76B836E77B99A39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 0AA1B390C00884AF9E0C13DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 519CC4D131A3BAC0B1AC3635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 8F80E337EF93B870AD43DEFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + E65C3E1E71B5F5F0CB398CE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + B77D0A0D03B3345E614861F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + A1A3F4C6AFEF43A689F5573E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 04C4864AA1B69210E4E5B23D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7EB027FA4976B6302AC0B0B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + D744325C4EC7AA35267208F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F880248680EADB863A51517 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 8EF61F328D422FE3E1B0E797 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB02C72CCD6F0460678E82F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + 689679AF7BEF52CED7C4D87B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4CB332F1DD0FB99AA95EF3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + 6111502CA8C01755F060A955 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F13B72C256A6EDA6E996F5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7FB0E78A682D12BA79BE6537 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8F99A136C5096D3ECED67F67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7C77326C42DE10BD9CF0B171 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A0C5EAA827BA071F1DEBF693 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3B3240DA0FD2518270557EF1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 47D78AD8F0AB6955D3EBA159 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F65EE17EFB5D024B7A68216B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 4391B9D427F3803DB30BE000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + E837E7ACF00C18985F3D05BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 4B9332A5CBFCB6DE866DC8FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 413FDB2991A2C29742DDAAB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C7296187BD9DAE05F792BC74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 875C46DE46DB9DC329734BAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 81D7268A6342756F31185F8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B2BD466BA9FA01B3EABA192 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 4244853D4C40950050FF8AD0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E7B88E8140BB293B27ED67FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 22010A1BC1531A596CBB364B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + BEA3E14ECB80B77C06E10EFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 78CC84B857305E4F2BA6BB11 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3E2C98712D5BD5BD6A7A7E96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6585115FE5CC8027A7F26C21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + 61B36B4E92D1A689E91E7065 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 047B0A05950E322525ED72D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + 1014F815A59589FDC0CCF103 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9522EEF984711B6B8E8288F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + D98EF91A0B4CDEDD9B5A5202 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92CD65D832726C7C6C8B2453 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 3A78E280E732AE84E4EF4EB0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 666B77D16CBA8706FD6A3E6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 030D92F0DB5C788F82B0FBE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 077AD2A9E50D775531DF2446 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DE533E6CA3E710317384CF93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 15F67A1C929981A6F45D97A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4CF58C2565BAF2FD3C7F7FF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5F34F48F0A914EF445E474D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4C5EAE83CB8CD2047DAD661F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 595E4E56A0A423FAE699BFB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED3729BEFD2CB29B0C3788C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A450BAEC4F1CF5AA7470B1DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 075FAE0C649D3882D30B7C37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 158C509BB28C7E122A62FAA4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + FBA43AD9D12DEE6D9FE17874 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + D571E2ADD8B87CC7DB46B769 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 06B85FEE7323AE769CB2FF8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7445996A906D465BBA86F6B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + 5B3AC509EF1407C8618F37C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4D8462B6A99DEF61C1A8BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 028D17F9DB473F11FCAEE2A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + B4CECF0A7A71BE540AFF33D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + F212A3C211570621C5BD0FD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4311ADAE30B3E22E902C7264 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B74589F0D8DE6E7EE37941E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5CCF0E894CB444479FA059F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 66D4EAF01DB847FD32EBDE3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + 338319A1DA71D083608AAF03 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 94CD7EEC63CA3522299F2152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + 5A3DAE5177CA1D8F462BF482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 43B22850B025C20CA507A77F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 60C473600C1CDA1681DC2655 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 02236E4AEC6BD4D8E6A58B7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 95BBBF67C97FBDF8EB677F36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + 637B84D647516B20CF2A1479 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3B3A42500A34388A60E083C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + B4CEE87DE72E5314B876FF4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 78A834D78C3F01796D8F94C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + 8B1D44596529EF0DBDBA2458 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 83DC11B31DA65802201AFD1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 13A99AFF67A8D93A1B1E28C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + EFE44A9ED375A3E13F26B9C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22B75FC400B6E2D2EC0478C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 661C3EE8FF4E42E7A616888B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 20709EB2FE1AAEE4E089FF88 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 4D61D7CCD47A5F6014D51309 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + F7C1675EBBFE09817A0D55F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + E063C85BEF510B4BE6FB5575 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 01D963F4938891A1343C6779 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + F341037EEDD6F0F0E3F5852E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6DBA2C9C120E57BA47BB0DFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 308939D5849814C8E8EFA033 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + E1D39CF4D3AB244E34DF8EB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7746937AA181366BB3F50B93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 742CE15D990B37F70AEA0523 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6076BEFD8FC899CAA7D68CE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 366E68B1BD4CEC5F91A13598 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0B766EB33A321DEEC0EB12A9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 96CE469ADC88ED936C96A294 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2275184B0A0F9CB0413ADAE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + E2B37ECA4C7153E10C5C05C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + 973A3E2A4D89D9A869B175BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + B186677A351CB8CF53227550 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F94CA5C61232419F06E94F4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0755E51FD28EAAE8D9219D25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB99FD2E74906DCEFE44CFAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 849D76FF0E10BF22278C3BF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A5834DAA4317FD3EE98E539 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 427ADA4FEC26CF21C199ED66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 54C1833EEB09BBD862CEF66C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + A6B3CAB55B894540C29DBCC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA7154976E8B041A769C46CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + FCEAA20A05AD2CEC4F293E59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + 26F014E9AD32C833A0577654 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 9FA3CBD8D31771699900C226 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11F40A56A705F921C5950780 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C947E8909F41D6061AD873C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 351B5B40822869E883B48DF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B49EFBDC00AD56542E756B16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 8E4822B03C03A21FF2382F6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_ios_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 92BC27199CADC2DF5E93E456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13D0F5A9DA4740ADD1A2E417 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DFBE3F76F613A86FFB44D61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + B0A5EB6C5B2517EFCDEEDED1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E402576A746E2BA7883567D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 4C73A8578CD960D1AD2FEAEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 74339965D04C1610F857E40A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 75C121B556A6B5AFA5FBF8FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 88AD1F74D776B78E192379C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74F8ECC4F37F0A453CE24138 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 8096CFD082284336F2AB1078 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + AC239FEF5AAA75B01C592D9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; + 052E2160A5606FFF33B78D4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 52C1D563D8296E3B2493D566 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5ACCDAB2C25FC4413608B884 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; + 32F8FAB4137DDBF9B03B99E4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLPixelFormat.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h"; sourceTree = "SOURCE_ROOT"; }; + C251E1A072FB06B7D0C3BC25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 467BDFECC6239F21DAC14C68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 20F4EB34011021A504F57A62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CCD470D68DD83AE99E01E292 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + A5679ADD5B887049BCAF00FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CDFA365FC3E9CED3C4E3B832 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_opengl/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + E6E0DDCBE909FF6978FF4097 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../../modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; + F4B844AB8DDC51D24D1B2274 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B19DDAFCEFFF9868140E893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A45E6575CF9F9A9FAF48A3BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7EB04FF29D11C3184321EC0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; + 973248CEF1F5C4004FEA2EA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + B6872A57D4DCA8D069163BAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../../../modules/juce_video/native/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; + E330478AE9B1AB613EF67957 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_QuickTimeMovieComponent.mm"; path = "../../../../modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + D9387DDAA2D4FBA94639787F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBCF511286F5387CA040673F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8654B53954A9E2435FE2D101 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6C681528FCAE92522A029FD3 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_video/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + E6B77106272C003AB862A265 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_video.h"; path = "../../../../modules/juce_video/juce_video.h"; sourceTree = "SOURCE_ROOT"; }; + E870C076EBCABE3DD4EB5D91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_video.cpp"; path = "../../../../modules/juce_video/juce_video.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30B991A93312852813BC988F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + BEF4293C91AA5081C10A71EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + F3D89FE403C7A9311A6D552A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_devices_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0C28E3EAC62D8D95F93EE891 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_formats_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AE54E09CC626A723482BCC70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors_wrapper.mm"; path = "../../JuceLibraryCode/juce_audio_processors_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 0E81FF3AB6526CD727D14092 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core_wrapper.mm"; path = "../../JuceLibraryCode/juce_core_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + B7EE10A226DDC18C7492D009 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography_wrapper.mm"; path = "../../JuceLibraryCode/juce_cryptography_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 075CAA516F2B8E1B40E8F40F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures_wrapper.mm"; path = "../../JuceLibraryCode/juce_data_structures_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + AF743C274F4F8AED5FDB8161 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events_wrapper.mm"; path = "../../JuceLibraryCode/juce_events_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 58F9FA1714BA8849C34396A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics_wrapper.mm"; path = "../../JuceLibraryCode/juce_graphics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 49735B025818B8E30FF6D4F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_basics_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 6DEA8ED994B36333EE2D299E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra_wrapper.mm"; path = "../../JuceLibraryCode/juce_gui_extra_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + 5BBB67267DB8B804ED9C2323 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl_wrapper.mm"; path = "../../JuceLibraryCode/juce_opengl_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + FE049851997F253302C4D2F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video_wrapper.mm"; path = "../../JuceLibraryCode/juce_video_wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; + F835685535DCBA8888C80CDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; + 911A345ADACAD3DF2067B59F = { isa = PBXGroup; children = ( ); name = Source; sourceTree = ""; }; + 6B8898CEE9965A9A0FB86824 = { isa = PBXGroup; children = ( + 911A345ADACAD3DF2067B59F ); name = juce; sourceTree = ""; }; + A0EAC6A74525D11CB0AEF91C = { isa = PBXGroup; children = ( + 64A2C5B7B35FF08C9ADB5360, + 6E040E7FFF35F5314CAC6592, + 8A0A13ED4C8167E772D46C44, + 8D79580D3D79A609C3795D4B ); name = buffers; sourceTree = ""; }; + A19A0F8311BC7E255C7EB961 = { isa = PBXGroup; children = ( + 16CB3CF18EDD877E78A59984, + 9292E79820E0510BE0F367C3, + 5361F33C840E9065426A9723, + 6A5E88AE5E337D4C522B372C, + C62D367387CBD79251DD7E65, + F2F086020331850714C6EE6C, + 1A5A2739690D84FA1365EF1B, + 4C7113CB0E96F48CE9170E5E, + 3E7640F7F675237A25BBE6ED, + 720450854326D9E218D729FC ); name = midi; sourceTree = ""; }; + B721E1DD55EC0C1C6FE2C9E3 = { isa = PBXGroup; children = ( + 90BE6110C2C1BD6CD1906456, + BD8C89AACE79B587F8D7BD05, + 7838B60527A4662951F44C07, + 80D4DE119D519C7C690BAF19 ); name = effects; sourceTree = ""; }; + 74F311510C6D6CD24D4DA39A = { isa = PBXGroup; children = ( + 383B08CBB206C7D22FD53626, + B5323A063EC774990BE792E7, + 0991DD68EEA8FAC20A14059E, + B7AF66DC71626F21BA5581BA, + CCC5A0E1E34CAE18F2B77C12, + E621B13988438157D4B75177, + 9DB653B6BB75D678C7C4A737, + EF279E41970ADA72A2C32556, + E933FE79CED5095A37BFB1E6, + FD2CCFC4BA155A118B5A83B0, + B50C8EA0401C5B72034F3090, + 020C07A6EF53C3F3D88B3981, + 884873F92BD9CBB807F359DE, + 7E636D2BFDBAA8DAD5592D84, + B3404B75870CE31744A31C2C, + 9429B485F4D467A271F6E03A ); name = sources; sourceTree = ""; }; + 385217EBAC7D5C8BDEC83E95 = { isa = PBXGroup; children = ( + E82E9B99CA175C7B0F0D4359, + 5E66053F18393DE51B7750D8 ); name = synthesisers; sourceTree = ""; }; + 9A8FC9AB106A682C5F2F9BD1 = { isa = PBXGroup; children = ( + A0EAC6A74525D11CB0AEF91C, + A19A0F8311BC7E255C7EB961, + B721E1DD55EC0C1C6FE2C9E3, + 74F311510C6D6CD24D4DA39A, + 385217EBAC7D5C8BDEC83E95, + AD6B76E97A64B20A4E40BD0E, + 261DF3B4F882DC5931A819F0, + 3F663E5CB8FE54C411570DA9 ); name = "juce_audio_basics"; sourceTree = ""; }; + 965D99AEA91600DE9EEC69A9 = { isa = PBXGroup; children = ( + B61C116D702533B6E04F6624, + 6456ED182C5F605C1D8B1AEC, + 0128567CD914DF9A2B3ECB39, + AA03A03F2D9C7473BF63955E, + 5496FE4C587D33EEA5CD27C9, + F488DBA7217074EAE07A37C0 ); name = "audio_io"; sourceTree = ""; }; + B106F6D7E71D33D48310B752 = { isa = PBXGroup; children = ( + 8F66A3A673D647BC4FB45167, + 7A2CE45ADDE2D54D9AF8DEDF, + 6E7089A01DAE3641C1740E70, + E7570731AF5780DD2BD61FD9, + A039ADE6DCE33DB5C0EC7F3D ); name = "midi_io"; sourceTree = ""; }; + 6E1B9C6415C5698BAB0035D1 = { isa = PBXGroup; children = ( + 12596D3A1AEE0E0A54C48072, + C1E452DF78EF9F71FFCE79EC, + D7D019470ACFF6DD3227BFDA, + 3E4ECCE4CD7BC4515DCAA101 ); name = sources; sourceTree = ""; }; + 744B64F38603F03FEF90DE83 = { isa = PBXGroup; children = ( + 19B919AC116E6A72B2AD73C5, + 1F2CAEA28E38CCC2472E3BA5, + CE7E2903D1896C54FE8CE723 ); name = "audio_cd"; sourceTree = ""; }; + 7CD7931EB6DA39D4DD36E4C9 = { isa = PBXGroup; children = ( + 0FFDF98C12F68F239009BD17, + 0F43819AF02BAEEF28D8E428, + 707B19DA97BC828E05790082, + 7E2433B0692191CF7A29C43A, + 4C96DCCA2C095F759F7F0E58, + F66C72A50F13038FF8B957EE, + 0BB8C52172BC17B129D07C81, + E500FA8B573229FE1B5C3865, + 372961AE7F2FB77370E41586, + 92194FE3E28382847E01FDF8, + A8A41EB17802AEAD26F592EE, + 9036BC32D6862C8698DB1CCD, + 49D9B20C4878C675B7D54C96, + 8FBFAB4BE11743BC950FCC1D, + 33C4DE044AE46D5AE2388C82, + AA0CBBE7A2398F0748BB6004, + 94B043C26CD74E83C1ABE287, + 83A86F0106572B4C6EB03F18 ); name = native; sourceTree = ""; }; + 55E9A4E5F3C238927160FFEC = { isa = PBXGroup; children = ( + 965D99AEA91600DE9EEC69A9, + B106F6D7E71D33D48310B752, + 6E1B9C6415C5698BAB0035D1, + 744B64F38603F03FEF90DE83, + 7CD7931EB6DA39D4DD36E4C9, + 012FAFCA624535545D12B172, + 5981FC91DFAB0065F69DB621, + 92B7586395729678D1FB0529 ); name = "juce_audio_devices"; sourceTree = ""; }; + C7D7C0D4B07D60E74D05A6E5 = { isa = PBXGroup; children = ( + 0E5407E73165E153DD6222E4, + 2B93D2E835042679AEF904B0, + F64488D624F6F17282331340, + 54F9B1743C86394995809EA6, + E1EAC537056825D9010CFA7C, + C92198F08E04993BE6EE1CC6, + 95C699CB1C7870B3CB514A4C, + 2A9682DD510E987FF51E040E, + 98FD7847EE62F634A358A7B1, + 07B4A716014330D03B1C9254, + 937372961AE7F2FB77370E41, + E9DA0152C10C00F4B3D44BA9 ); name = format; sourceTree = ""; }; + 076F4F22D2F55289466D3C70 = { isa = PBXGroup; children = ( + 474CF4D3FDE58970BF7EC85F, + 142D7FC9105482BFF6CAD3B6, + 9B4EEA9A4FB7A4587EC874CA, + 72643EDD97C029E1D564ACB5, + 9BBCC125D97813AEB2E716B2, + 90BC01DCBC7727C9CACB08A9, + 5D16C05C11465E547DAD245E, + 2389B009F31BCFBB886591D9, + DF89FFDFA65506576B616C75, + EB3B57CDDF333379403811EA, + CB0692036976992ECA69FCC2, + E39C2A1D6CFD5D93BB127740 ); name = codecs; sourceTree = ""; }; + C0A2DC408B71CB32D54A72E6 = { isa = PBXGroup; children = ( + 97D6E5FBB11DC02020C08110, + 7E8C44343473783079862340 ); name = sampler; sourceTree = ""; }; + E65135DBCD8A2D3F42218641 = { isa = PBXGroup; children = ( + C7D7C0D4B07D60E74D05A6E5, + 076F4F22D2F55289466D3C70, + C0A2DC408B71CB32D54A72E6, + 816E4532FC35A681E0CA26DC, + 3063DECCB01F3BE4495014DF, + F921B85B59A227468E75FAD3 ); name = "juce_audio_formats"; sourceTree = ""; }; + CA78E10F1C9F0E4ED687448D = { isa = PBXGroup; children = ( + 1B083261472033722D66A343, + 570DE12AFA65E0EF97A76118, + 869DC33441E16711C4B532E4, + 932A49670D0D124E826A9ED5, + 141780297FA95EB256517C7F, + 39CF0D15C48ED213080B824C, + B6306AE6BE88F9FF06B45C33, + BE4173860D57B9377580EA22, + 878D1F28D564B4D2F6325EE2, + 6EAFDAA7DCC2B36BA1EE02D6, + D896AA464446044CD41C901E, + 0878C27458F8EB824DCB1F11, + 852F32CC1A8309CB8301FF9A ); name = processors; sourceTree = ""; }; + 9900B5EDC6D850AAB4F24E74 = { isa = PBXGroup; children = ( + 6A41D793199AC67506CF46A0, + 815AAF2F2EAB8B72428F0683, + A8422E1461D7CD4FA260F6EC, + AD1ED7D8B455DF2C3C76775E ); name = format; sourceTree = ""; }; + 9332E3D0B5FEEB3489C4BADE = { isa = PBXGroup; children = ( + 333C63B88849CDCC79DEF3EE, + CBA63471294126CD2D0BED29, + 3F6FC668D8F4632A613342EE, + BAEB573AAFC588C1985DF623, + 2BC3C8761ACCCBE3EDB638A6, + E7745FC4897E81B9CADB8567, + 515196A62CD7B09925F43814 ); name = "format_types"; sourceTree = ""; }; + A1592AF17CE3B8706B8383CE = { isa = PBXGroup; children = ( + F0D4DCCD27D10E015E37870B, + 5D4857257908DD62B665C705, + 896F8EE8D168AABC010D3D9E, + 80FD318E49F54C1AE0C71C6E, + 510DD21DC61FB0613C4574F6, + 7818C33F7E1F5C33DB4FD418 ); name = scanning; sourceTree = ""; }; + F55A86C062DA89F9DB6468CF = { isa = PBXGroup; children = ( + CA78E10F1C9F0E4ED687448D, + 9900B5EDC6D850AAB4F24E74, + 9332E3D0B5FEEB3489C4BADE, + A1592AF17CE3B8706B8383CE, + CB380B0C86F49661E939FA43, + 8DADF246B7194D31ED22FB0E, + 13BE00D110CCCC6B3A1CFEFD ); name = "juce_audio_processors"; sourceTree = ""; }; + 087E2B12BBEE505809DCD4A8 = { isa = PBXGroup; children = ( + 68B218650DE669355B29B0BD, + 3A578DB9357D681638212BA6, + E3A448D79602BE793BB5AAAF, + D0D08C5BF3FF3AC38C2BB5F9, + 7007AD793173FAD647FF7A18, + 386F6DC3392D8EB2686ACAFF, + 1A5B03E20105BE5955226D39, + 113C13459089A1E03A142EE7, + 42196C6E61AD81B534C91F5F, + 0B0A66D47FDC55CFC35E8110, + 60F85537112008053327B3D8, + 7ABFCC3AFC27E5402E1DF422, + 82EC14BA832DBF90D8946880, + 4BE74BAA97829DE02C4FDB7F, + 9F1C330398D9FF5FCFB5AC75, + D40B525F93AB6DA1F71608A4, + F4B1CE8EFE058FD9C6348A1A, + 81651FCBF2DB607514C50E97, + 18E372E585BCAE4E0B2F7DC1 ); name = text; sourceTree = ""; }; + C3E75009C7AAB967D41B7034 = { isa = PBXGroup; children = ( + 2A2A15421A84B198DB11E90F, + C652C007E4FFF0063CB89934, + 36BBE27B0B52E98BF728FA66, + FAB48302BA0855EA3AE64178, + D9CDB4457248C0972C9FCA8B, + 85E93DC39BB614155EA397B1, + 339AE29FEA039707CF9AF337, + F2931505057ABEC71EF86327 ); name = maths; sourceTree = ""; }; + 9305555B356744E01928E829 = { isa = PBXGroup; children = ( + 5410062042764412B8CE3031, + 993C75F27C459FF0B8947FDA, + 0BC3ABD4E911A345ADACAD3D, + B51A7EC05DEDFFF65B97FC67, + 416DD782B4D314B1CF519AE2, + 2156E976E03B8A3BF4547434, + E420676FB21174CCAE99FEB3, + 17E157EBFBBD238EFEEAB043, + 8EC5CD107FD22A0CF75C115E, + 211A516DD6179BB28DE93A3B, + 3675F49035A0F817B85A26B1, + 6C99522DF55AD82A23313A81 ); name = memory; sourceTree = ""; }; + 756654D9BD21C4EBDF1FC925 = { isa = PBXGroup; children = ( + 9DCD24C63652C188CF91A04C, + A6EC860FFC84DA2E241C75FE, + 2BE5B24518D9EEF8B241569F, + D1B2F6B360903C38C13984F0, + E18E6670CA33FF08D2268761, + B88744B1C8B510F5FD1142D5, + 39F2371F8172259E80B67162, + 0D296D4CCA103B16CA77FA87, + E62DE16AC2C916C96AB1C901, + 1FC1795EBFBF2AA1B5CF8407, + C7452800D0AE22E6BD60A6B8, + 159226081BE1363DAC91ED92, + 1030F04E04E2EEDE8BDD940D, + 06352BB51E787F4E296E87D8, + D2CD81D1D6FACA7714EA5B87, + B2645B4154582EB412EA5409, + D90C2276E0491F12E3CDACAF, + 5C90FB783FDA31AE5CECABA3, + 0557144872E56AED1981C097, + 8F5578A8C9B3D4468DD9BCC4 ); name = containers; sourceTree = ""; }; + 948C7FA03FC278BC8B3AC4E4 = { isa = PBXGroup; children = ( + F68F092DAC017371B6454B47, + 1BB76DB94CC776536F5D05B9, + 15A1CC4B235B05701A265D80, + 700A0F197FDE2741F2EA67F7, + 6706C60A77E395336BC88AD1, + ABE35C687CD72D0602A57233, + B41A45C80942F20E4236C02A, + 72415E71ABCD81C9B840AF63, + E72C979674B4DD940B28C118, + 3820C635B72EEF8D798BE97D, + 8657F12701FBB235C874CBDD, + 0D7810AF12E758D5B18980D7, + F7A1E0C577A3C351A182FB52, + 86E9ACE4D9E1E75242047B68, + 350E3AAF5E701D63A666727A, + 732C9D0AF1AD903369267F1A, + 66C76A65EFF649387B853C54 ); name = threads; sourceTree = ""; }; + 4FBA32728F67BB73633C3CE1 = { isa = PBXGroup; children = ( + 8E3E0FBE090A32F2B8C85191, + DB86FA3C63BAE361DE634163, + BB4A9AB8DC1834C80E0AA319, + 9E09096F56DAEB3B94677E5A, + 77F45BA59AC7DD8EF43A41EC, + 71E0586238EE6CC0629F5B72 ); name = time; sourceTree = ""; }; + EB0C85200B740C13FCD7E073 = { isa = PBXGroup; children = ( + 50F072C3CDB3FA8AF42C2B30, + 6C4BDADEC05562C652C007E4, + 2E6EFCA0B0D66C8321CD1963, + 0242840CD5E71EA77677E32A, + A85145C19A32D7C370F34CDE, + A6775556269C4FF0DD888BA2, + 6EA8662522EED3D2E001FE05, + BEB28A31BEADADE6D0941858, + 6C80BE829D90C72CB0265682, + B6468CFCA70428E100C9795A, + F2FAED3EB1860FF768D67B66, + B1305C1BE5E31122331946F8, + 75644D1C0249D43156A1E844 ); name = files; sourceTree = ""; }; + 727B671FCA8D2A7CA3A1077D = { isa = PBXGroup; children = ( + F26BE92ADD0FC82E814D5C0E, + 0F85939710C6929C215BFBF1, + C1AF49D543AB6479E426A96B, + F26375A3DA8D95A05B8A8C1C, + EED6DF24D99B5AD12DB93C9C, + B9B630B00821EB0AFFF93FBA, + 5DED88EEA86235D65A53070E, + 9A8C2E6840FC5E13867F9A71 ); name = network; sourceTree = ""; }; + 7885209F50542B78373EB8B0 = { isa = PBXGroup; children = ( + 7C00AE023D8A48249A7FDB46, + 2BF5B812C08372268407E346, + E1B0F4D05FBAC2ECA04906C4, + 5634817B0161F90EFBF06DB7, + 6AAC355A54DF0C4745A5A8BC, + 60919B2823E28A35B0FD8947, + 289B6EC69FE9C1D163E4661E, + 745B8AB58F8F390F7F623633, + 375F26EA0C8014F6C03F05FC, + 9EFEFC2FB4EBD8989B50A393, + 227483B5E56A7451F1F8BA63, + C89196A1A554614F1F1890ED, + 91A055D3F3CF03665527AC74, + 47539AD5CD9E010BF5612CC2, + E691A512A103E237A1D9D3CC ); name = streams; sourceTree = ""; }; + A4A9074807AF7BD2291FF9F2 = { isa = PBXGroup; children = ( + D7919E319088065CA0D215C2, + 1078A320E0828B07DA0FC4BD, + B7BCC3769F1CFED196602026, + 183D6793C658B0A7859A24F4 ); name = logging; sourceTree = ""; }; + C298A0CC0C698551F6B9DB83 = { isa = PBXGroup; children = ( + 6EBA651135AFC3E6A6D15789, + 811832F056181336A6319BA8, + B8CDA8A4419DB8F9ED864F11, + 4AE47A9491165EE241973AEF, + CB57024F0E007E62EB405B0A ); name = system; sourceTree = ""; }; + FE20909AF7CC8A04DCD575E2 = { isa = PBXGroup; children = ( + CC306093DEF3CD7CF2D0CE3A, + 78939D6FFB1256FB084C6C41, + 77A62E8F834AF332A2B3FA48, + 976E858DECA13760377C9BA7 ); name = xml; sourceTree = ""; }; + 00C7255FBB12372B12A3D0A6 = { isa = PBXGroup; children = ( + 4EAF62CC8DAF1FA5E3FBAA64, + 6415031350508A973C592E60 ); name = json; sourceTree = ""; }; + 31F55B73CECD7343A6F41900 = { isa = PBXGroup; children = ( + 12854D6A249055F20565F73F, + E089392644E440A9D7F3F3EB, + 953E224AF3DF5682B975143B, + 37E393AC34FDC09564E8D8FA, + DA7A4E4C23D50AAA923B8B73, + C54CB4FE7F00C1DB353F0C3B ); name = zip; sourceTree = ""; }; + BE3AA276728BDD277EB2E01D = { isa = PBXGroup; children = ( + 0C95F50C215C7DDC637E231F, + AD08BF958198DE916E490C96 ); name = "unit_tests"; sourceTree = ""; }; + 3FFF93E5EA8087D93858834A = { isa = PBXGroup; children = ( + 2BA51B7119C6B3E0DF5F6FF8, + 20459A3A7B6F704A819606E9, + 4F40D25584C032CE140605C6, + 3BEE6439556054726E358EA6, + 7910F7459F48EB4C5FE0497F ); name = misc; sourceTree = ""; }; + 4DF7F5D99FE0E392C18B55C8 = { isa = PBXGroup; children = ( + 4A22DE9DF590115F174CA70E, + C4ADB239D6FD560C5E19BC31, + 2388A53B6D4E843346C7445B, + 301C611AD6F86DE3DA42ED1A, + 8C8971C6351A8A10CE5CDAB3, + 201BD8D3C5B11D5D2FD21230, + D5734F311260EB3496FD78BC, + 30B10FA808CF53D0B4149DC5, + 2AFF41DF959F94285C1DCFD0, + 3EBAF92AE1D96221F7AAB48B, + 3C8DBB6F1552D768B4BD30AF, + E2F45E30DD975B870D03F1EE, + F67FC5A61FA264E289C57040, + EC470D35E244B75A07F5FC3E, + 342ED0275B7134CF56673D4A, + C42C17FD8E3FA07EEC8D2DA1, + 939E84474B6FF1E4BCEED5AF, + 4E200650EBB604C49E585BD1, + 6B1208C30E3A9225B23F9146, + 63FDE7DEE73FFB236B572166, + 75E320A05877A5B36BCB517F, + 1F2753991132B124E6F8F5FE, + 70D9E8061CA196D1CA522750, + FFAB3424D162D2105B2DCDDB, + 817EF68827813C2F9501E88C, + 926752969C54C8102202982F ); name = native; sourceTree = ""; }; + AB2283B69BCCA36045954FEE = { isa = PBXGroup; children = ( + 087E2B12BBEE505809DCD4A8, + C3E75009C7AAB967D41B7034, + 9305555B356744E01928E829, + 756654D9BD21C4EBDF1FC925, + 948C7FA03FC278BC8B3AC4E4, + 4FBA32728F67BB73633C3CE1, + EB0C85200B740C13FCD7E073, + 727B671FCA8D2A7CA3A1077D, + 7885209F50542B78373EB8B0, + A4A9074807AF7BD2291FF9F2, + C298A0CC0C698551F6B9DB83, + FE20909AF7CC8A04DCD575E2, + 00C7255FBB12372B12A3D0A6, + 31F55B73CECD7343A6F41900, + BE3AA276728BDD277EB2E01D, + 3FFF93E5EA8087D93858834A, + 4DF7F5D99FE0E392C18B55C8, + D3E49910B0D68245B2D786EC, + FF9A1392424B439144289CDF, + 2604459A54EEDC3CEE31448D ); name = "juce_core"; sourceTree = ""; }; + 37327AEBCBAB2C3F75165E0C = { isa = PBXGroup; children = ( + 8EB424E80EA1A9BF3996E2D1, + D982DB7C2DF80130B2D0D8DD, + 75877971E84DCE847271789B, + 07DEC3BB2E1871CB718F1F27, + 645BC89CC946D74ADDB036A7, + 18B572494272CE300F994D00 ); name = encryption; sourceTree = ""; }; + 4A1884A884AAD911599EB4B9 = { isa = PBXGroup; children = ( + 12DB0EEC8F72186E4BBAEABE, + DA1ACB637AB7B18748AAFAE8, + D56E61E634565695BD7C2BB0, + 412284310401A060B73B1D57 ); name = hashing; sourceTree = ""; }; + BDDA109EDA6D841424125F82 = { isa = PBXGroup; children = ( + 37327AEBCBAB2C3F75165E0C, + 4A1884A884AAD911599EB4B9, + 9A1CCDCF9A40752332971063, + 63CBF9293F9DDE272E169B7F, + 0B76E61091F963ED4879557A ); name = "juce_cryptography"; sourceTree = ""; }; + EDE7D8A27DE716355A8D72AE = { isa = PBXGroup; children = ( + CD25D88B1553182D59A86484, + C884750081BC05C932B98565, + 595BDD764DE3CEA1BB607AC3, + 2F1A6DA01DC899BD7E18BE1E ); name = values; sourceTree = ""; }; + 66261AC129B7ECB01786ADFB = { isa = PBXGroup; children = ( + 69238ECEC4C28DE7CF12E82B, + 4178E7C965D8A09D227A7A62, + 68376B6E3DB141DDF5EFF632 ); name = undomanager; sourceTree = ""; }; + 44E2A56BC8970A1D9E1601AD = { isa = PBXGroup; children = ( + 35448E92D858B467A6CA6FB6, + BFA84B0C530330CE95E5C79A, + C78F14744080F849C1FE3013, + C4DEA4F5C23211CBC96F7BE6 ); name = "app_properties"; sourceTree = ""; }; + 81D8EA16512FAA6CAD463A65 = { isa = PBXGroup; children = ( + EDE7D8A27DE716355A8D72AE, + 66261AC129B7ECB01786ADFB, + 44E2A56BC8970A1D9E1601AD, + B1C64C530D67E08554002661, + F5DF63B2FF70BBF0C39485BE, + 6A7C85F819E2F2107147C1B1 ); name = "juce_data_structures"; sourceTree = ""; }; + 67A5D27D7046370FB1972353 = { isa = PBXGroup; children = ( + 8CFFAEC1C2C9F172F2C8F35F, + 36102C06CFD099DBD44F6F24, + 1D7B3DD82C6653F78D5DF85C, + E3073207CFB5C1CC34D94CC8, + 8B50F9B60E6BF005666CD0B5, + F91B0EFDBA70D291BE20AC98, + 7B366D238FBBC31D17A18D2C, + D54B4C097B16C12926066715, + 68CE02C950EE2C003B139BB3, + EB7D03F26F0EB86308624830, + 5772D5ED2F13118C42750653 ); name = messages; sourceTree = ""; }; + E91DBA037B66AEFFEB893785 = { isa = PBXGroup; children = ( + 899CB91140BD7EA1A76AC216, + 6551C46518DFCD9854EC7A8C, + 35CBBBEFE0C8737B72EE504A, + D27508A8897823FF62234292 ); name = timers; sourceTree = ""; }; + B48EA093E235DA4BAF8B9F0D = { isa = PBXGroup; children = ( + 204093CE9B5BAFAC9255E467, + FDCD727E7F2138E7BA95E307, + CE79523BC796DAB63590A8C2, + 94692AD8DC01EAB9C1E27830, + EC862443EDD2F4D5CAB870C5, + 41EA95B5883A8D51E033B35D, + 6350C8DC602AD65EF8C81A9A, + D367CD490580A17D262BFE92, + B6CEE808454A8091FAE5B8EA ); name = broadcasters; sourceTree = ""; }; + 6EF766D72759E32BAEB72084 = { isa = PBXGroup; children = ( + 0A0DFB957A245DF78B7973D5, + 436B40E74725074339549CB9, + 85BD76F5FDB051DD5B7AEC62, + 57CD50097C7B3250051E9D74 ); name = interprocess; sourceTree = ""; }; + 64BA0DD44A1FE523C7F6322C = { isa = PBXGroup; children = ( + 6F14B0CCA1AE4035C867821E, + 0CF7FE1754615B48D66EBF77, + DAAC585C4648559DD713F28F, + FEA70002637ACFDF4163AE5B, + 2B89210EB6CEF025FF6484F2, + 1A4267544375B19CC9A62C6D, + F09A6C1754ECBFCDA25FE65A, + 63A6A2C037B73D7ADB95B976 ); name = native; sourceTree = ""; }; + 1FF3B90A0DBCEBA57FE29620 = { isa = PBXGroup; children = ( + 67A5D27D7046370FB1972353, + E91DBA037B66AEFFEB893785, + B48EA093E235DA4BAF8B9F0D, + 6EF766D72759E32BAEB72084, + 64BA0DD44A1FE523C7F6322C, + B44E2B3009F86734509F0707, + F5A4003072BBDA078AA916BC, + 37D57DE00B92A601874582F8 ); name = "juce_events"; sourceTree = ""; }; + D8663E700F665CAAC3054F2A = { isa = PBXGroup; children = ( + 9C1F09B4CECF0A7A71BE540A, + 0A0B8CCC8DFA5E2C09CAA858, + 8068F9138A81662CF961CA52, + 4157C08544A8B484C91C3764, + 30E890EFA7F92153FFE3E330, + E46D62F0E2A796CCBAECD4F9, + D0573A7D4461EAF05C722CA2, + 8BCA535BEC3E15D230384B25, + AE6418EA95A6E452AEF8B8C8 ); name = colour; sourceTree = ""; }; + 291F7C33EAA747E56B54268D = { isa = PBXGroup; children = ( + DDE4BA2E3B67843B0A9369F8, + 950A1D989FE3D8B9EF0EA6F7, + B269B7648EBE79896F7F540A, + CAD0593400306C0949FE1C2F, + 9233A76BA2DB0031F5F195C9, + 2FF800CB11ED065ADD41CF37, + 43CB48BBB7DB4B2990C88428 ); name = contexts; sourceTree = ""; }; + 9A9607909EB3C1A59BC10587 = { isa = PBXGroup; children = ( + B29A76453A0BF56FC1A922FD, + 8092525DEEDFBBF852E3C45E, + 0443EC0F69F8ED92725923AD, + 9F3E553F65665EA4FA1EB7B6, + 66AE31ABC4746528218DD480, + CBEF3B6F6C6E9749BC4FAAD9, + 0CD57CEBFF8DF24388554EBD, + F142C87E6CA7E8600DC4976E ); name = images; sourceTree = ""; }; + F413FC30CE787CE456B5D077 = { isa = PBXGroup; children = ( + DA4ADFC6F3422BC114059024, + 418E1A856AC14C426B5C1A8F, + E0D521D6DBE4DFEA45433C50 ); name = "image_formats"; sourceTree = ""; }; + 730E1863CE27C360B18C92B4 = { isa = PBXGroup; children = ( + 95CE7083810C2C32885E2273, + 4036999747EA1A8D6EB27FB4, + 0B85580C417A5C7F09BC4396, + D31FFA27048ACB5667BB64CE, + 59B990E43C0B976C4EBB3413, + E404A252C81197A37CF2958F, + 23CE9628E867BBE97AE071A8, + E4FA2D879B8B077031DF66C6, + 478054A5B1F8332BFC6F6953, + 0A5B0E482405A3833F7A1E0C, + 910F672035A0E2652741B938, + 1FC89B1F1E561A5B6378E023, + 4033780D0644FE4BA3B74156, + 7A5D0124825A0372D7192236, + 4EA12CEF97519A89E38441FA, + 6A10291720DFEAFE7BAD80F7 ); name = geometry; sourceTree = ""; }; + 1454B52C1BFB14710F1B1E23 = { isa = PBXGroup; children = ( + F939D60573B6792D0D182D22, + ABD9A1C3BFA504D940A4E73A, + 6EC0555C13C1B79A6AAD97F4, + 1FCFBDD08CFD09F520104C40 ); name = placement; sourceTree = ""; }; + 62DA2B0FD149B680FF79CB1B = { isa = PBXGroup; children = ( + 214F431E85ACD34962054FC7, + 9CFBB03B806B54415C496EFC, + CDB5DD0F7B8A49C44A1DC02D, + 3BCFA08D6AB28BF199BFE7D5, + C1EF7D67E0AB069130DE88BC, + E50E7A061D715B7D85498493, + 9DD15C5A32E3C22027FCCB51, + EEB8B811264A01F503BA159F, + A3E0547D12C0E98F33680179, + 4AC448B2A71C82E9D761BDCA ); name = fonts; sourceTree = ""; }; + 81AE98EA97FB5AE22B53D39C = { isa = PBXGroup; children = ( + 48F4862D53AC9B348E218FDD, + 2A4EB371A229E0F850EBAC8B, + C7C5604A104D9BFDEAD48A2C, + 9B10B1DC0962773B6D717072, + 9592DB4B706C1874C6594EAB ); name = effects; sourceTree = ""; }; + 9010EA7568D49B9172CAD24B = { isa = PBXGroup; children = ( + 8073AA7F99EE2C0EC0FA7A2C, + 545AE93246AC76B52EE50E2F, + 5EE3F0DBB0D4B0C3835AA016, + 01551407677077188ABA5B7E, + 3A5AEA422046F7BEB517EFB7, + 0AEC62B784468669FBF60F09, + 4F33C20A13AA76A8FEAF0288, + 0D8B7F20F4C6ED99185BF457, + 802121EA35F8F3310DFC18B0 ); name = native; sourceTree = ""; }; + 7642A8FBD5BAF0B8C5FFF195 = { isa = PBXGroup; children = ( + D8663E700F665CAAC3054F2A, + 291F7C33EAA747E56B54268D, + 9A9607909EB3C1A59BC10587, + F413FC30CE787CE456B5D077, + 730E1863CE27C360B18C92B4, + 1454B52C1BFB14710F1B1E23, + 62DA2B0FD149B680FF79CB1B, + 81AE98EA97FB5AE22B53D39C, + 9010EA7568D49B9172CAD24B, + CB951025F03720D0BE8A598A, + 0243F3269CE52C8F82437C05, + CF62B65C4F32CDEE1EF6A8A9 ); name = "juce_graphics"; sourceTree = ""; }; + 174F251770A327D0C3D3D711 = { isa = PBXGroup; children = ( + 71C843E4EE03B2573AA020A1, + DBB8D646CDE531B71640FD15, + F16FDCE5D2717295136FD426, + A51CA0C86C888A7B6C684813, + 0317531B8F09D6C0B182C3C8, + 4B822BEE79D2282971C5B33F, + 3488ED28F2CB47BC1D333B90, + 8396D0FD4D664788E199D887 ); name = components; sourceTree = ""; }; + 0B6EC44A724144F8D992E6A0 = { isa = PBXGroup; children = ( + AD49C5B84D474C57E43A92DA, + B1B22154E7D53915578F6B3A, + C68077D622E2FBD45D6C7E1D, + 44F0E2DA720B912BBD1269A2, + C2C86565AF5F7529676A2370, + B356E0CDD2AB9A09D6F231A9, + 2CC95CCC9DFF74D71E35B2D3, + 9A2AA5D2EDF62556B4603816, + 439B370001E2AF2D2EFC5546, + 6EE9F9F78C8BC898DDB97CF3, + 4DB84061B9ED5F5282BE0F43, + EDD21B885BC1ED3EA3E12718, + 66F8821490BAB95FB6615620, + A24108E52AB8368AECB8A986, + DB61AFB7662074B5AAAD24EE, + 0632FB95F7E3FAE40288EA9B, + F70470121CC39AE37828718E ); name = mouse; sourceTree = ""; }; + B19B36203C46E436D1B9538D = { isa = PBXGroup; children = ( + 054E7B8005789BD1B541A01D, + 0CFA58E91D08BC401A185136, + 071F527283F198827EF2629A, + 9C17CD80F37C7610168F3C70, + C450132710FE832E3B5F7681, + 23D567386334A6EA71BE7ABC, + 2FCF750086C8198D00C875AA, + 1694E84A1607E4269C32C62E, + 1946F879334BA2C8E8D37685, + A553ABEDE0194D3F8109EA77, + 460EB41C0AB478EE02D8C851, + 642071540A6FC9B26A88A543, + 83D89AB7A52025AA05BD7DAC ); name = keyboard; sourceTree = ""; }; + 5DB3126B85362EAB3B2D2F54 = { isa = PBXGroup; children = ( + E4656586FC087DC3AA86F9BF, + 8BFC0B7A0782234F4FF80715, + 4F20251B06B59DE9129B27F3, + C65BC39DEE41E70E3C52BFFA, + A6B16248557474A746EB334B, + A09C5FEE9C851A3230629D06, + 0AA28797D6F64074AE508FE7, + 756660036BFF964BA6D2A7D3, + 343D73A212C9C553ACB08BF7, + EEACEFE8279756DDE0DE80E0, + 7E55D6E8E530E99667C4BD86, + 81988E4C4B2DC28FC9FFD7B4, + 54083520C7AA5911B1F0371D, + 6575E4E6028876F950F1455E, + A141DBC73B08BE8858E900CF, + FB82C6424438EE90BCB1769A, + 63A58441B648CBBB4DDAC29D, + E000C2F12D4D2A24E908E9A2, + EBF07FAFD74A43C7EADC0971, + D5B4872FD88A73385217EBAC, + 69AF82E34E989BFFB28B6CCC, + 093A44E9074124F31BF14BAF, + C843A835738BF164285A7798, + 5AC0EBA7869F300890FF0F6B, + 595F2DC0235F848F9474E83E, + 7A780E8A8BB90D8F9C4E66E4, + 9F15723232624C3C4725FB75 ); name = widgets; sourceTree = ""; }; + 70DEA78CFE66895AC8BBBC69 = { isa = PBXGroup; children = ( + 72ACCED3247997410B7AECB3, + 0C391EF87050F00BBB197E33, + 4211A516DD6179BB28DE93A3, + 89A0DD89388BB04A0E90B290, + C69FDC981385121647FB8F7B, + 45AF598689D6BF0F83CBEF2E, + D186DCEFB4DC18A2F2C407B2, + BF528D3BD5C4A499BBBE8E76, + A5F74C36A5D4076E5223786C, + 5A4E7B7537E2DEA62D0F03C0, + CD51A1099EFC039CC8E0CA3E, + 9B34ED1B89F86B25AC2387D2, + 8FDDC0F38B4605B01BD752FA, + 7B84ECF9E2759E486C7D8C75, + 57C78F0EB2BF768BC08F952D, + BE4C8A6E9971F9115A615F97, + 8F67F817AAB55ED2BE16B376, + A9708AA439A3EA1FD07432BB, + 67A061B16326CEE71EF7DB9A ); name = windows; sourceTree = ""; }; + 90621D2E6CDA267030405166 = { isa = PBXGroup; children = ( + 3C3BFB23E971E76471158CEE, + C8D93F0ABEC9636EE3A49C49, + FFF80B2DDB0CB2D788583EC7, + 409BA652CF34580213E13F4C, + BD8DE112F37D56E5B24A34DE, + 2C6ECA3A12D2FF2DC6326F06 ); name = menus; sourceTree = ""; }; + 2BD274A03054838291A8B0DB = { isa = PBXGroup; children = ( + C7D8A0A95C3858358006608E, + 5D517E07AD73BA562671706A, + 3E1247ED69CE2B3CCC9AC0B0, + 28D73C6BC496265A4E9A4A33, + 91006C4C3A54A0741775F3C3, + 3B410636D633523A90FABE2C, + 528143E7321E19D40EE470B2, + 5AC73AD1C77A3AE0A498915B, + 75240A9524768C784CED3DFB, + FC7BC34CF1A1880A634CE780, + F6AC26B2CC05F1E8A36F1B33, + 572BB57C627968DBBD52D060, + 449394799FC6C2E65123860A, + 6156C1431F65616F04596382, + D9DC58B13890613B72E80937, + BBFDE0C31ACD2FF8EB74A8F4, + 7A7F182D3F35F8D873672FDD, + 215BEEC802FF1BA1E636ED8D, + 803600D061884786FAC030F2, + D247CA92DA6D06F96E1441AB, + BF99C2F3FA6743EBFE13355B, + 3C8607C87EB9F6A504E15E6E, + 3EE2339AE024B1F2F03F3A74, + A98E0242693E402AD31F33DA, + A21253BEAF77F9EA35933BF8, + C3F89EC86D7F5303F114C031, + 2ADD5A07A5A71C5AE293C5A0, + D76F758D97264230E02F3FE6, + 7870EBC2A5F549700810B0FC, + E305A4F37E36BA5E052B3BD4, + 02AD6374637002CB034EA698, + 885D2CFC91EA7A95322115F8 ); name = layout; sourceTree = ""; }; + 11E3EA1683AFC1334657BE6B = { isa = PBXGroup; children = ( + DD2C7BA5FEE69AACB4AF1987, + 93E235DA4BAF8B9F0D132E57, + 4CD284BCCF9D478448CBDF7B, + 5FF63D7097491A39A4E346D9, + C206EFDA7370330F80852733, + 12284310401A060B73B1D575, + C1BE7C161D78D2AA4AAE5B28, + 3A3DE4B05E4F31594C2B2435, + 2750700FC44694DDB78FF5DC, + A8A7A1E79E55B3541815E00B, + 73BF08B2CACCC317F3D76035, + 35DA3E75DDB03BB35794289B, + A7CFDAB5D91C7E1A27C231F2, + 9C465DACA0450474E6E90E57, + 451F2CB4541F413A4C89874D, + 84174C24CDEDF07737399CAC, + 8144680DB1BA191C5C6AE595, + 4A9B927BF2DBB2355001EF87 ); name = buttons; sourceTree = ""; }; + 2A07F36607BA716F3AF68E1C = { isa = PBXGroup; children = ( + 23468B2CD2686DF9A3868791, + EF50C71A19FF8AC85923D3C7, + 8E8E54D124535961D5DFE52F, + 35EAC30CF2555303A6D6492A, + 0DC33F4C9F356C323E4012C6, + 61744CC7F994C1608DAADC9F, + 0470121CC39AE37828718E9A, + A327279A52A69F6B3FA88980, + F174D805BCEF983AE7F8DA16, + 7740F59A4C12E35D16C05C11, + 77574840FB8B879992747437, + C52310009C96792C3A7C4F45, + BF2EBB74C0B176990A73F1F4, + 5411B575C76B836E77B99A39 ); name = positioning; sourceTree = ""; }; + 9466C522281E46B07D7D110C = { isa = PBXGroup; children = ( + 0AA1B390C00884AF9E0C13DC, + 519CC4D131A3BAC0B1AC3635, + 8F80E337EF93B870AD43DEFB, + E65C3E1E71B5F5F0CB398CE7, + B77D0A0D03B3345E614861F9, + A1A3F4C6AFEF43A689F5573E, + 04C4864AA1B69210E4E5B23D, + 7EB027FA4976B6302AC0B0B2, + D744325C4EC7AA35267208F7, + 3F880248680EADB863A51517, + 8EF61F328D422FE3E1B0E797, + EB02C72CCD6F0460678E82F6, + 689679AF7BEF52CED7C4D87B, + C4CB332F1DD0FB99AA95EF3D, + 6111502CA8C01755F060A955 ); name = drawables; sourceTree = ""; }; + F92F3264A24D142A25468C13 = { isa = PBXGroup; children = ( + 3F13B72C256A6EDA6E996F5D, + 7FB0E78A682D12BA79BE6537, + 8F99A136C5096D3ECED67F67, + 7C77326C42DE10BD9CF0B171, + A0C5EAA827BA071F1DEBF693, + 3B3240DA0FD2518270557EF1, + 47D78AD8F0AB6955D3EBA159, + F65EE17EFB5D024B7A68216B, + 4391B9D427F3803DB30BE000, + E837E7ACF00C18985F3D05BA, + 4B9332A5CBFCB6DE866DC8FF, + 413FDB2991A2C29742DDAAB0, + C7296187BD9DAE05F792BC74, + 875C46DE46DB9DC329734BAA ); name = properties; sourceTree = ""; }; + 43308F7BD156841B15529742 = { isa = PBXGroup; children = ( + 81D7268A6342756F31185F8B, + 7B2BD466BA9FA01B3EABA192 ); name = lookandfeel; sourceTree = ""; }; + 3DB3F8358D9CADC5803A351B = { isa = PBXGroup; children = ( + 4244853D4C40950050FF8AD0, + E7B88E8140BB293B27ED67FB, + 22010A1BC1531A596CBB364B, + BEA3E14ECB80B77C06E10EFF, + 78CC84B857305E4F2BA6BB11, + 3E2C98712D5BD5BD6A7A7E96, + 6585115FE5CC8027A7F26C21, + 61B36B4E92D1A689E91E7065, + 047B0A05950E322525ED72D2, + 1014F815A59589FDC0CCF103, + 9522EEF984711B6B8E8288F3, + D98EF91A0B4CDEDD9B5A5202, + 92CD65D832726C7C6C8B2453, + 3A78E280E732AE84E4EF4EB0, + 666B77D16CBA8706FD6A3E6B, + 030D92F0DB5C788F82B0FBE6, + 077AD2A9E50D775531DF2446, + DE533E6CA3E710317384CF93, + 15F67A1C929981A6F45D97A4, + 4CF58C2565BAF2FD3C7F7FF0, + 5F34F48F0A914EF445E474D6, + 4C5EAE83CB8CD2047DAD661F, + 595E4E56A0A423FAE699BFB6, + ED3729BEFD2CB29B0C3788C1, + A450BAEC4F1CF5AA7470B1DE, + 075FAE0C649D3882D30B7C37 ); name = filebrowser; sourceTree = ""; }; + 3433BBBAE8699BBE169B6905 = { isa = PBXGroup; children = ( + 158C509BB28C7E122A62FAA4, + FBA43AD9D12DEE6D9FE17874, + D571E2ADD8B87CC7DB46B769, + 06B85FEE7323AE769CB2FF8F, + 7445996A906D465BBA86F6B8, + 5B3AC509EF1407C8618F37C7, + C4D8462B6A99DEF61C1A8BD5, + 028D17F9DB473F11FCAEE2A8, + B4CECF0A7A71BE540AFF33D2 ); name = commands; sourceTree = ""; }; + FF470468A3A25D59B1B3A59A = { isa = PBXGroup; children = ( + F212A3C211570621C5BD0FD4, + 4311ADAE30B3E22E902C7264, + B74589F0D8DE6E7EE37941E4, + 5CCF0E894CB444479FA059F8 ); name = misc; sourceTree = ""; }; + 69956C1AD97DFE214EDE7CA1 = { isa = PBXGroup; children = ( + 66D4EAF01DB847FD32EBDE3F, + 338319A1DA71D083608AAF03, + 94CD7EEC63CA3522299F2152 ); name = application; sourceTree = ""; }; + 041971703218095852DE1067 = { isa = PBXGroup; children = ( + 5A3DAE5177CA1D8F462BF482, + 43B22850B025C20CA507A77F, + 60C473600C1CDA1681DC2655, + 02236E4AEC6BD4D8E6A58B7A, + 95BBBF67C97FBDF8EB677F36, + 637B84D647516B20CF2A1479, + B3B3A42500A34388A60E083C, + B4CEE87DE72E5314B876FF4F, + 78A834D78C3F01796D8F94C4, + 8B1D44596529EF0DBDBA2458, + 83DC11B31DA65802201AFD1A, + 13A99AFF67A8D93A1B1E28C8, + EFE44A9ED375A3E13F26B9C8, + 22B75FC400B6E2D2EC0478C3, + 661C3EE8FF4E42E7A616888B ); name = native; sourceTree = ""; }; + D3257EB355BF48FAA4C2BC9F = { isa = PBXGroup; children = ( + 174F251770A327D0C3D3D711, + 0B6EC44A724144F8D992E6A0, + B19B36203C46E436D1B9538D, + 5DB3126B85362EAB3B2D2F54, + 70DEA78CFE66895AC8BBBC69, + 90621D2E6CDA267030405166, + 2BD274A03054838291A8B0DB, + 11E3EA1683AFC1334657BE6B, + 2A07F36607BA716F3AF68E1C, + 9466C522281E46B07D7D110C, + F92F3264A24D142A25468C13, + 43308F7BD156841B15529742, + 3DB3F8358D9CADC5803A351B, + 3433BBBAE8699BBE169B6905, + FF470468A3A25D59B1B3A59A, + 69956C1AD97DFE214EDE7CA1, + 041971703218095852DE1067, + 20709EB2FE1AAEE4E089FF88, + 4D61D7CCD47A5F6014D51309, + F7C1675EBBFE09817A0D55F5 ); name = "juce_gui_basics"; sourceTree = ""; }; + 0FC01648B1E1AA53EA83C318 = { isa = PBXGroup; children = ( + E063C85BEF510B4BE6FB5575, + 01D963F4938891A1343C6779, + F341037EEDD6F0F0E3F5852E, + 6DBA2C9C120E57BA47BB0DFE, + 308939D5849814C8E8EFA033, + E1D39CF4D3AB244E34DF8EB5, + 7746937AA181366BB3F50B93 ); name = "code_editor"; sourceTree = ""; }; + 9211C91C851E138CF61DD0ED = { isa = PBXGroup; children = ( + 742CE15D990B37F70AEA0523, + 6076BEFD8FC899CAA7D68CE0 ); name = documents; sourceTree = ""; }; + A63A60C9E2C1E11BBC658046 = { isa = PBXGroup; children = ( + 366E68B1BD4CEC5F91A13598, + 0B766EB33A321DEEC0EB12A9, + 96CE469ADC88ED936C96A294 ); name = embedding; sourceTree = ""; }; + 10A1AE705AB62D93488B4855 = { isa = PBXGroup; children = ( + 2275184B0A0F9CB0413ADAE3, + E2B37ECA4C7153E10C5C05C6 ); name = lookandfeel; sourceTree = ""; }; + 108DBA2D50BEFC34D045273B = { isa = PBXGroup; children = ( + 973A3E2A4D89D9A869B175BE, + B186677A351CB8CF53227550, + F94CA5C61232419F06E94F4F, + 0755E51FD28EAAE8D9219D25, + CB99FD2E74906DCEFE44CFAF, + 849D76FF0E10BF22278C3BF9, + 8A5834DAA4317FD3EE98E539, + 427ADA4FEC26CF21C199ED66, + 54C1833EEB09BBD862CEF66C, + A6B3CAB55B894540C29DBCC1, + FA7154976E8B041A769C46CC, + FCEAA20A05AD2CEC4F293E59, + 26F014E9AD32C833A0577654, + 9FA3CBD8D31771699900C226, + 11F40A56A705F921C5950780, + C947E8909F41D6061AD873C6 ); name = misc; sourceTree = ""; }; + 6C4B7EEB3DD226042043EBE6 = { isa = PBXGroup; children = ( + 351B5B40822869E883B48DF2, + B49EFBDC00AD56542E756B16, + 8E4822B03C03A21FF2382F6B, + 92BC27199CADC2DF5E93E456, + 13D0F5A9DA4740ADD1A2E417, + 1DFBE3F76F613A86FFB44D61, + B0A5EB6C5B2517EFCDEEDED1, + E402576A746E2BA7883567D4, + 4C73A8578CD960D1AD2FEAEE, + 74339965D04C1610F857E40A, + 75C121B556A6B5AFA5FBF8FB, + 88AD1F74D776B78E192379C8 ); name = native; sourceTree = ""; }; + 4E0C7E6C24A70E0A4CA6D657 = { isa = PBXGroup; children = ( + 0FC01648B1E1AA53EA83C318, + 9211C91C851E138CF61DD0ED, + A63A60C9E2C1E11BBC658046, + 10A1AE705AB62D93488B4855, + 108DBA2D50BEFC34D045273B, + 6C4B7EEB3DD226042043EBE6, + 74F8ECC4F37F0A453CE24138, + 8096CFD082284336F2AB1078, + AC239FEF5AAA75B01C592D9C ); name = "juce_gui_extra"; sourceTree = ""; }; + 7C8F6979D98E0644B91AA03D = { isa = PBXGroup; children = ( + 052E2160A5606FFF33B78D4E, + 52C1D563D8296E3B2493D566, + 5ACCDAB2C25FC4413608B884, + 32F8FAB4137DDBF9B03B99E4 ); name = opengl; sourceTree = ""; }; + ED2ED05BA2DA3D95081470CB = { isa = PBXGroup; children = ( + C251E1A072FB06B7D0C3BC25, + 467BDFECC6239F21DAC14C68, + 20F4EB34011021A504F57A62, + CCD470D68DD83AE99E01E292, + A5679ADD5B887049BCAF00FB ); name = native; sourceTree = ""; }; + 47813F6E49FF6C7A4F1CE871 = { isa = PBXGroup; children = ( + 7C8F6979D98E0644B91AA03D, + ED2ED05BA2DA3D95081470CB, + CDFA365FC3E9CED3C4E3B832, + E6E0DDCBE909FF6978FF4097, + F4B844AB8DDC51D24D1B2274 ); name = "juce_opengl"; sourceTree = ""; }; + AF76ECB187C56998D4CE03A3 = { isa = PBXGroup; children = ( + 2B19DDAFCEFFF9868140E893, + A45E6575CF9F9A9FAF48A3BE ); name = playback; sourceTree = ""; }; + A1BF705F864EC3834D7767C8 = { isa = PBXGroup; children = ( + 7EB04FF29D11C3184321EC0F ); name = capture; sourceTree = ""; }; + D5D214E4B41A545DE0315B36 = { isa = PBXGroup; children = ( + 973248CEF1F5C4004FEA2EA7, + B6872A57D4DCA8D069163BAD, + E330478AE9B1AB613EF67957, + D9387DDAA2D4FBA94639787F, + BBCF511286F5387CA040673F, + 8654B53954A9E2435FE2D101 ); name = native; sourceTree = ""; }; + 2469B5169F5CB0732B3076B7 = { isa = PBXGroup; children = ( + AF76ECB187C56998D4CE03A3, + A1BF705F864EC3834D7767C8, + D5D214E4B41A545DE0315B36, + 6C681528FCAE92522A029FD3, + E6B77106272C003AB862A265, + E870C076EBCABE3DD4EB5D91 ); name = "juce_video"; sourceTree = ""; }; + 37312A9040D19F2291237B67 = { isa = PBXGroup; children = ( + 9A8FC9AB106A682C5F2F9BD1, + 55E9A4E5F3C238927160FFEC, + E65135DBCD8A2D3F42218641, + F55A86C062DA89F9DB6468CF, + AB2283B69BCCA36045954FEE, + BDDA109EDA6D841424125F82, + 81D8EA16512FAA6CAD463A65, + 1FF3B90A0DBCEBA57FE29620, + 7642A8FBD5BAF0B8C5FFF195, + D3257EB355BF48FAA4C2BC9F, + 4E0C7E6C24A70E0A4CA6D657, + 47813F6E49FF6C7A4F1CE871, + 2469B5169F5CB0732B3076B7 ); name = "Juce Modules"; sourceTree = ""; }; + AEA046FBFB13AE633D310DAF = { isa = PBXGroup; children = ( + 30B991A93312852813BC988F, + BEF4293C91AA5081C10A71EF, + F3D89FE403C7A9311A6D552A, + 0C28E3EAC62D8D95F93EE891, + AE54E09CC626A723482BCC70, + 0E81FF3AB6526CD727D14092, + B7EE10A226DDC18C7492D009, + 075CAA516F2B8E1B40E8F40F, + AF743C274F4F8AED5FDB8161, + 58F9FA1714BA8849C34396A3, + 49735B025818B8E30FF6D4F4, + 6DEA8ED994B36333EE2D299E, + 5BBB67267DB8B804ED9C2323, + FE049851997F253302C4D2F9, + F835685535DCBA8888C80CDE ); name = "Juce Library Code"; sourceTree = ""; }; + 531EC6DF408FD2A1FE4502C1 = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; + 76CD7CA426F985996E92BD22 = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; + 81D249308529E0D05897017E = { isa = PBXGroup; children = ( + 8A3B6D1C041C6F1F33C6E5B0 ); name = Products; sourceTree = ""; }; + 788B9E9ADD63962A63C0F1E6 = { isa = PBXGroup; children = ( + 6B8898CEE9965A9A0FB86824, + 37312A9040D19F2291237B67, + AEA046FBFB13AE633D310DAF, + 531EC6DF408FD2A1FE4502C1, + 76CD7CA426F985996E92BD22, + 81D249308529E0D05897017E ); name = Source; sourceTree = ""; }; + 46ED2049099B506E62998F1F = { isa = XCBuildConfiguration; buildSettings = { + PREBINDING = NO; + HEADER_SEARCH_PATHS = " $(inherited)"; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEPLOYMENT_LOCATION = YES; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + ONLY_ACTIVE_ARCH = YES; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_DEBUG=1", + "DEBUG=1", + "JUCE_ObjCExtraSuffix=cbgo2s", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; + E089A9BC33F3F55868E60EE7 = { isa = XCBuildConfiguration; buildSettings = { + PREBINDING = NO; + HEADER_SEARCH_PATHS = " $(inherited)"; + GCC_OPTIMIZATION_LEVEL = s; + INFOPLIST_FILE = Info.plist; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEPLOYMENT_LOCATION = YES; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_NDEBUG=1", + "NDEBUG=1", + "JUCE_ObjCExtraSuffix=cbgo2s", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; + D12B6776E88D6557718593A3 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "jucedebug"; }; name = Debug; }; + C4B22AE2C14477DD9663A5B7 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "juce"; }; name = Release; }; + 8CB4C39C54589B43E3E37081 = { isa = XCConfigurationList; buildConfigurations = ( + D12B6776E88D6557718593A3, + C4B22AE2C14477DD9663A5B7 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 24E6E0D744CC449B92F39574 = { isa = XCConfigurationList; buildConfigurations = ( + 46ED2049099B506E62998F1F, + E089A9BC33F3F55868E60EE7 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + DCBCED3E7DFF72995A463EE6 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 06CA5B0334C150EA394526A1, + BF624C8AF10AA0EF05E22B6E, + C05ED5E13C3193AA809C46FD, + E659ADBF9D832ED8F245400C, + 8799338A7A2C0DCD4A9F79FD, + EE47290AFE3EB6472027A398, + 38D25D7500799F5BAF3E68AE, + 01D42514D5505853BAC90F61, + F3BCEC73FFCCBF87AEB18FAE, + C43A3DBAB79ACA02B91073A4, + CCF81F713D9E0122A7E2363F, + B0CBB760D14E35E1D477AD6A, + 129733E61276EA045C0ED598 ); runOnlyForDeploymentPostprocessing = 0; }; + 54ED678B0A6FD1DF14A3A9A5 = { isa = PBXNativeTarget; buildConfigurationList = 24E6E0D744CC449B92F39574; buildPhases = ( + DCBCED3E7DFF72995A463EE6 ); buildRules = ( ); dependencies = ( ); name = juce; productName = juce; productReference = 8A3B6D1C041C6F1F33C6E5B0; productType = "com.apple.product-type.library.static"; }; + 4F970AD4FB85FFC070A8DEFC = { isa = PBXProject; buildConfigurationList = 8CB4C39C54589B43E3E37081; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 0; mainGroup = 788B9E9ADD63962A63C0F1E6; projectDirPath = ""; projectRoot = ""; targets = ( 54ED678B0A6FD1DF14A3A9A5 ); }; + }; + rootObject = 4F970AD4FB85FFC070A8DEFC; +} diff --git a/Builds/VisualStudio2008/Juce.sln b/extras/static library/Builds/VisualStudio2008/juce.sln similarity index 55% rename from Builds/VisualStudio2008/Juce.sln rename to extras/static library/Builds/VisualStudio2008/juce.sln index 4ee40ce2d4..4d6a9f2732 100644 --- a/Builds/VisualStudio2008/Juce.sln +++ b/extras/static library/Builds/VisualStudio2008/juce.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 -Project("{30DE6365-A0C4-171D-3ADD-E102A1BD1BB8}") = "Juce", "Juce.vcproj", "{2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}" +Project("{4B94D8C7-D5A5-D1AD-ACAA-8C176444229A}") = "juce", "juce.vcproj", "{D034FAC1-F664-2AFC-825F-1B890594D38A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.Build.0 = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.ActiveCfg = Release|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.Build.0 = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.ActiveCfg = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.Build.0 = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.ActiveCfg = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/extras/static library/Builds/VisualStudio2008/juce.vcproj b/extras/static library/Builds/VisualStudio2008/juce.vcproj new file mode 100644 index 0000000000..b887c9e46a --- /dev/null +++ b/extras/static library/Builds/VisualStudio2008/juce.vcproj @@ -0,0 +1,4286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Builds/VisualStudio2010/Juce.sln b/extras/static library/Builds/VisualStudio2010/juce.sln similarity index 53% rename from Builds/VisualStudio2010/Juce.sln rename to extras/static library/Builds/VisualStudio2010/juce.sln index 97770c677b..674fb5df05 100644 --- a/Builds/VisualStudio2010/Juce.sln +++ b/extras/static library/Builds/VisualStudio2010/juce.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 11.00 -Project("{30DE6365-A0C4-171D-3ADD-E102A1BD1BB8}") = "Juce", "Juce.vcxproj", "{2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}" +Project("{4B94D8C7-D5A5-D1AD-ACAA-8C176444229A}") = "juce", "juce.vcxproj", "{D034FAC1-F664-2AFC-825F-1B890594D38A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -7,10 +7,10 @@ Global Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.Build.0 = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.ActiveCfg = Release|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.Build.0 = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.ActiveCfg = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.Build.0 = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.ActiveCfg = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/extras/static library/Builds/VisualStudio2010/juce.vcxproj b/extras/static library/Builds/VisualStudio2010/juce.vcxproj new file mode 100644 index 0000000000..ff9877a9e6 --- /dev/null +++ b/extras/static library/Builds/VisualStudio2010/juce.vcxproj @@ -0,0 +1,1559 @@ + + + + + + Debug + Win32 + + + Release + Win32 + + + + {D034FAC1-F664-2AFC-825F-1B890594D38A} + + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + true + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .\Debug\ + .\Debug\ + jucedebug + .\Release\ + .\Release\ + juce + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + EditAndContinue + %(AdditionalIncludeDirectories) + _LIB;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2010_78A501D=1;%(PreprocessorDefinitions) + MultiThreadedDebug + true + + .\Debug\ + .\Debug\ + .\Debug\ + Level4 + true + + + _DEBUG;%(PreprocessorDefinitions) + + + .\Debug\jucedebug.lib + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + .\Debug\jucedebug.pdb + Windows + MachineX86 + + + true + .\Debug\jucedebug.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + MaxSpeed + %(AdditionalIncludeDirectories) + _LIB;WIN32;_WINDOWS;NDEBUG;JUCER_VS2010_78A501D=1;%(PreprocessorDefinitions) + MultiThreaded + true + + .\Release\ + .\Release\ + .\Release\ + Level4 + true + + + NDEBUG;%(PreprocessorDefinitions) + + + .\Release\juce.lib + true + %(IgnoreSpecificDefaultLibraries) + false + .\Release\juce.pdb + Windows + MachineX86 + true + true + + + true + .\Release\juce.bsc + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters b/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters new file mode 100644 index 0000000000..a5d9e0fc2b --- /dev/null +++ b/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters @@ -0,0 +1,2656 @@ + + + + + + {2DBD136F-29EE-6BA2-E31E-EB1006F7AFE5} + + + {BB5D453B-D0FC-75BF-55F7-FE8D6B05910F} + + + {F842EDF7-A721-5611-7D34-D687130DB5AF} + + + {7DC92EF2-E271-9A9D-670B-D20E3BB1A433} + + + {953A48F2-5B19-40DB-D4D9-68702D2B7E55} + + + {876A26AF-3F56-0869-028E-BE6C40A1A182} + + + {0C3A88A6-68D6-21C8-3D84-1E4572BED74B} + + + {F310E954-1312-0901-03F2-DB22605C8D01} + + + {C78E3776-E6F7-3E8C-B749-98CBDDCE9B0E} + + + {C1B2B846-258B-F93D-4BE8-2CDB6C5E2C16} + + + {864799B4-25B5-64DC-72D7-01158CD83F5C} + + + {C9AC851B-4BFE-C2DD-2D08-94B0494999AB} + + + {70ABBDA7-2F37-4719-30E1-8CB310419BD1} + + + {04C4BB91-19BF-78C1-9227-341FF418F407} + + + {C47BB9B5-898E-0E88-CF3B-D9CC7B92D136} + + + {25FC82DD-463F-03B2-BA96-D16184210964} + + + {38543AD1-0534-1F95-2EFA-FD144E195253} + + + {668A5ED4-B060-3729-7F33-460E109BDBCE} + + + {07477328-9BBA-154C-8CA4-6B2A88124DDA} + + + {E0B0CD34-242F-5CDC-3B0E-6CA8D2BE8CBB} + + + {76811FA4-16E7-EA4C-F7C3-070E59E4E0A5} + + + {3932B99B-188D-7AF5-A665-E627AF7E00DD} + + + {156012C7-39A4-B321-EB15-BD8FFCF5495B} + + + {EDC253C0-6C50-56BE-FE17-56CC84696D46} + + + {0950B058-AE5B-9D46-7088-E03C444D0F06} + + + {110A03A4-99F0-441B-D5B6-A74FFF0E08A2} + + + {D7459C19-374D-EBF2-B7EC-A8F9DC82E741} + + + {1C45EE46-3117-A859-CA98-06A747CB08E7} + + + {F8C2FA89-B782-8B08-3538-E554731603D6} + + + {DE4B5FB8-422B-CCF8-01DC-56AF98FA4C08} + + + {DD78461B-C718-578D-5B4B-735D64F85724} + + + {84719C40-C884-7A1C-8560-D3D822FDB0E1} + + + {FFAC3930-D516-902F-5C61-08568323330C} + + + {0BC6E7C2-9663-7337-062F-970900509712} + + + {3A35ABF7-E18A-4952-5915-A0E1928C53DC} + + + {5D80F2FA-AB7E-764A-2E18-6592C2B14DD7} + + + {39230F68-000A-4CAD-5D74-84BAF16E272F} + + + {09A609BD-B7DC-31A0-BD9C-E90FE0A4FFAE} + + + {1EE08F66-DBAE-C771-4494-58158DA3E8E3} + + + {F1B39DB8-0626-341D-E4D2-76F34BBBF046} + + + {94FE3E28-3828-47E0-1FDF-8176013BDB0D} + + + {101B74A4-0992-5DE8-5838-A808DDE8B7A3} + + + {81E4430F-8336-03D6-2E23-2F77A449AED3} + + + {5CD34F3A-F35F-5830-DE8A-1732DD84968C} + + + {4749AF67-BC46-FE1A-1907-A872742825AE} + + + {3D58C186-9603-64EB-6AB4-FE4C2582E3F6} + + + {58D114A5-0A45-AFE3-8FD5-91086EC144B6} + + + {092FFEA1-B1DD-E3B0-F622-FFF82E191BF4} + + + {D19F7DDF-AA91-367F-7E78-0F7689139649} + + + {221A04C3-46E0-25ED-0513-01F1DF98B7A6} + + + {39F0D56F-4316-F922-D5CA-85947579494C} + + + {C0804462-8683-F5B4-35C7-0F1AE996B629} + + + {0CAC698D-DB2F-4D66-245A-37F1310CF591} + + + {2A86729D-3CA8-6092-76D1-BBFAB48302BA} + + + {21A9F27B-BCC0-624D-9A36-88B47BD8D73F} + + + {A0F36010-FD26-9A02-A707-2524D866CEEB} + + + {3F824684-074B-B8A4-DC59-9FA2130B8B07} + + + {5086C76D-93A3-F4CD-261C-170B507AA20A} + + + {FB197235-391F-F615-38DF-64E37458A2C8} + + + {C245AE79-C1FD-1BC7-A240-D92685E39CED} + + + {9D69F675-30B3-E489-B83D-093CF74A81E9} + + + {95B19F07-6A2A-E1E6-9BD0-D57C1452FAAF} + + + {E71382FA-04DA-800E-6204-31FD1466270C} + + + {01C45013-2710-FE83-2E3B-5F7681DF9F18} + + + {94AC1409-AD42-20B6-8C9D-C4BC9E583E67} + + + {D53FD225-AF8F-5F19-7248-FA0A994B6E3B} + + + {BB0565EF-1117-CE48-B0C4-960A9CB8DD1F} + + + {16014E24-CC78-5E84-64C6-EE1BF3FDA49C} + + + {F9B05FE0-5C2F-42A8-102C-13F88E77AD34} + + + {8C3E1986-17AA-A915-13D0-4453AFFCBB1E} + + + {79B5AC4F-3FB5-ECA1-8C27-81CE05DEF3DA} + + + {9FAC018F-AB64-231D-97DA-EDC2CB323896} + + + {B384975A-B6DD-4E25-5FFE-3EAB799A5A68} + + + {DE0571DC-7C78-DB94-C2FF-920A5AB6D0FF} + + + {0C9063E0-CA59-B74B-7DAC-7E3C506A8325} + + + {CC50812F-047B-0A05-950E-322525ED72D2} + + + {BE9FC74F-A5FE-100D-1960-43C935C55E14} + + + {88FAEC05-1EE5-FD2B-CAA8-B6518C128B16} + + + {F5A19631-2F74-42A9-6077-9EC22B838128} + + + {91B974D2-D165-F4AB-9CC3-F90CE3247D61} + + + {80B64FE2-98A0-247F-46DB-AE6F0F774E0A} + + + {54FACAAC-45ED-C556-7508-13BC301C7411} + + + {C2FBFCFD-4D4D-D52B-35F5-18D93FB9FE7D} + + + {2482DD44-D4EA-9123-BE3D-4AE300D6A890} + + + {71CFB766-88E6-82E0-FB9D-3472EE482CBB} + + + {F1D1D500-7CF8-2E57-D5C9-A63A02DFE8B6} + + + {FF5C4F31-62C5-0D5F-D004-E8DAA7DA568A} + + + {7883B6D2-68CE-FABB-A6C3-28AE5594E88F} + + + {6ED2E9D2-03E8-CB5D-E6FB-A46F606E8CFC} + + + {0334B933-300F-41D5-DB61-A835920A62C4} + + + {E452BA21-77A6-AB4E-1136-6A411A69F202} + + + {2132A5BE-C307-0FB4-1DF1-3C95B267BF4C} + + + {4DE1B8E4-1197-8A19-85D9-EB034F793326} + + + {742FEFFC-9AC9-1450-ACD9-43D03CB726FE} + + + {CCFDA9A0-A76A-1EF9-F809-4A568555B8F4} + + + {5942FFF6-40C9-66AA-D151-FE08AF4A4889} + + + {886E27E5-5D57-DCC2-F42C-EC2AE2C6607C} + + + {F7048EA6-F4B2-F31B-E402-E05D678A1111} + + + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\sampler + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl\native + + + Juce Modules\juce_opengl + + + Juce Modules\juce_opengl + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video\native + + + Juce Modules\juce_video + + + Juce Modules\juce_video + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\audio_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\midi_io + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\sources + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\audio_cd + + + Juce Modules\juce_audio_devices\native + + + Juce Modules\juce_audio_devices + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\format + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\codecs + + + Juce Modules\juce_audio_formats\sampler + + + Juce Modules\juce_audio_formats + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\json + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\encryption + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography\hashing + + + Juce Modules\juce_cryptography + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\lookandfeel + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl + + + Juce Modules\juce_video\playback + + + Juce Modules\juce_video\playback + + + Juce Modules\juce_video\capture + + + Juce Modules\juce_video + + + Juce Library Code + + + Juce Library Code + + + diff --git a/extras/static library/JuceLibraryCode/AppConfig.h b/extras/static library/JuceLibraryCode/AppConfig.h new file mode 100644 index 0000000000..d56548685f --- /dev/null +++ b/extras/static library/JuceLibraryCode/AppConfig.h @@ -0,0 +1,68 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! + + Any commented-out settings will assume their default values. + +*/ + +//============================================================================== +// juce_audio_devices flags: + +//#define JUCE_ASIO +//#define JUCE_WASAPI +//#define JUCE_DIRECTSOUND +//#define JUCE_ALSA +//#define JUCE_JACK +//#define JUCE_USE_CDREADER +//#define JUCE_USE_CDBURNER + +//============================================================================== +// juce_audio_formats flags: + +//#define JUCE_USE_FLAC +//#define JUCE_USE_OGGVORBIS + +//============================================================================== +// juce_audio_processors flags: + +//#define JUCE_PLUGINHOST_VST +//#define JUCE_PLUGINHOST_AU + +//============================================================================== +// juce_core flags: + +//#define JUCE_FORCE_DEBUG +//#define JUCE_LOG_ASSERTIONS +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_graphics flags: + +//#define JUCE_USE_COREIMAGE_LOADER + +//============================================================================== +// juce_gui_basics flags: + +//#define JUCE_ENABLE_REPAINT_DEBUGGING +//#define JUCE_USE_XSHM +//#define JUCE_USE_XRENDER +//#define JUCE_USE_XCURSOR + +//============================================================================== +// juce_gui_extra flags: + +//#define JUCE_WEB_BROWSER + +//============================================================================== +// juce_video flags: + +//#define JUCE_DIRECTSHOW +//#define JUCE_MEDIAFOUNDATION +//#define JUCE_QUICKTIME +//#define JUCE_USE_CAMERA diff --git a/extras/static library/JuceLibraryCode/JuceHeader.h b/extras/static library/JuceLibraryCode/JuceHeader.h new file mode 100644 index 0000000000..a144c8537b --- /dev/null +++ b/extras/static library/JuceLibraryCode/JuceHeader.h @@ -0,0 +1,44 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This is the header file that your files should include in order to get all the + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration + options for your app. + +*/ + +#ifndef __APPHEADERFILE_IVABE4__ +#define __APPHEADERFILE_IVABE4__ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_cryptography/juce_cryptography.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" +#include "../../../modules/juce_opengl/juce_opengl.h" +#include "../../../modules/juce_video/juce_video.h" + +#if ! DONT_SET_USING_JUCE_NAMESPACE + // If your code uses a lot of JUCE classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + using namespace JUCE_NAMESPACE; +#endif + +namespace ProjectInfo +{ + const char* const projectName = "juce"; + const char* const versionString = "1.0.0"; + const int versionNumber = 0x10000; +} + +#endif // __APPHEADERFILE_IVABE4__ diff --git a/extras/static library/JuceLibraryCode/ReadMe.txt b/extras/static library/JuceLibraryCode/ReadMe.txt new file mode 100644 index 0000000000..f6c3564e99 --- /dev/null +++ b/extras/static library/JuceLibraryCode/ReadMe.txt @@ -0,0 +1,12 @@ + + Important Note!! + ================ + +The purpose of this folder is to contain files that are auto-generated by the Introjucer, +and ALL files in this folder will be mercilessly DELETED and completely re-written whenever +the Introjucer saves your project. + +Therefore, it's a bad idea to make any manual changes to the files in here, or to +put any of your own files in here if you don't want to lose them. (Of course you may choose +to add the folder's contents to your version-control system so that you can re-merge your own +modifications after the Introjucer has saved its changes). diff --git a/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..44b47ba02e --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.cpp new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.mm b/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.mm new file mode 100644 index 0000000000..586ef14a5e --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_devices_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.cpp new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.mm b/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.mm new file mode 100644 index 0000000000..c4424a43af --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_formats_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.cpp new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.mm b/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.mm new file mode 100644 index 0000000000..4bfe1c370d --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_audio_processors_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_core_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_core_wrapper.mm b/extras/static library/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..4d16180f61 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.cpp new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.mm b/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.mm new file mode 100644 index 0000000000..ef3a4eaa5c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_cryptography_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..03d7df2837 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_events_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_events_wrapper.mm b/extras/static library/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..e1b7b86612 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/static library/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..74b32d37ce --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..8f8ae22a8c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..5cb2819413 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_opengl_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_opengl_wrapper.cpp new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_opengl_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_opengl_wrapper.mm b/extras/static library/JuceLibraryCode/juce_opengl_wrapper.mm new file mode 100644 index 0000000000..a4be12209c --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_opengl_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_video_wrapper.cpp b/extras/static library/JuceLibraryCode/juce_video_wrapper.cpp new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_video_wrapper.cpp @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/static library/JuceLibraryCode/juce_video_wrapper.mm b/extras/static library/JuceLibraryCode/juce_video_wrapper.mm new file mode 100644 index 0000000000..7dc4ee3ff2 --- /dev/null +++ b/extras/static library/JuceLibraryCode/juce_video_wrapper.mm @@ -0,0 +1,14 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + +*/ + +#define JUCE_WRAPPED_FILE 1 + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/static library/juce.jucer b/extras/static library/juce.jucer new file mode 100644 index 0000000000..02a4e53cdd --- /dev/null +++ b/extras/static library/juce.jucer @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/the jucer/build/mac/English.lproj/InfoPlist.strings b/extras/the jucer/build/mac/English.lproj/InfoPlist.strings deleted file mode 100644 index 22f07dba592b23480da3f94e16a13d1c0c61ed9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmW-b&kn(G5QM*TpF$iPK^$Df$%O=m_6drX#-BEA5#Gp4;>$0a?Cj3YO!oU@L`;u0 z6?-x+l)T9~$UVe{R;J=6_Qb-zax0vN)Is0U$(~ief+{vMvbLlwxpOu5M&dm)H)E$O vXJJCEqcQ);DP+ve>GQEC>Yn08?7| -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=Jucer - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Jucer.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Jucer.mak" CFG="Jucer - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Jucer - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "Jucer - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Jucer - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GR /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib /nologo /subsystem:windows /machine:I386 - -!ELSEIF "$(CFG)" == "Jucer - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "Jucer - Win32 Release" -# Name "Jucer - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Group "model" - -# PROP Default_Filter "" -# Begin Group "components" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ButtonHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ComboBoxHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ComponentNameProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ComponentTypeHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ComponentTypeHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ComponentUndoableAction.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_GenericComponentHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_GroupComponentHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_HyperlinkButtonHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_JucerComponentHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_LabelHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_SliderHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_TabbedComponentHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_TextButtonHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_TextEditorHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ToggleButtonHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_TreeViewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\components\jucer_ViewportHandler.h -# End Source File -# End Group -# Begin Group "paintelements" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_ColouredElement.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_ColouredElement.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_ElementSiblingComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_FillType.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_FillType.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_GradientPointComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_ImageResourceProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElement.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElement.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementEllipse.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementImage.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementPath.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementPath.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementRectangle.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementRoundedRectangle.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementText.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PaintElementUndoableAction.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_PointComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_StrokeType.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\paintelements\jucer_StrokeType.h -# End Source File -# End Group -# Begin Group "documents" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\model\documents\jucer_ButtonDocument.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\documents\jucer_ButtonDocument.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\documents\jucer_ComponentDocument.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\documents\jucer_ComponentDocument.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\src\model\jucer_BinaryResources.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_BinaryResources.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_ComponentLayout.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_ComponentLayout.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_GeneratedCode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_GeneratedCode.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_JucerDocument.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_JucerDocument.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_ObjectTypes.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_ObjectTypes.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_PaintRoutine.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\model\jucer_PaintRoutine.h -# End Source File -# End Group -# Begin Group "properties" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\properties\jucer_ColourPropertyComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_ComponentChoiceProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_ComponentColourProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_ComponentTextProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_FilePropertyComponent.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_FilePropertyComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_FontPropertyComponent.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_FontPropertyComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_JustificationProperty.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\properties\jucer_PositionPropertyBase.h -# End Source File -# End Group -# Begin Group "templates" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\templates\jucer_ComponentTemplate.h -# End Source File -# End Group -# Begin Group "ui" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\ui\jucer_CommandIDs.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentLayoutEditor.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentLayoutEditor.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentLayoutPanel.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentLayoutPanel.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentOverlayComponent.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ComponentOverlayComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_EditingPanelBase.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_EditingPanelBase.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_JucerDocumentHolder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_JucerDocumentHolder.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_MainWindow.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_MainWindow.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PaintRoutineEditor.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PaintRoutineEditor.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PaintRoutinePanel.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PaintRoutinePanel.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PrefsPanel.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_PrefsPanel.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ResourceEditorPanel.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_ResourceEditorPanel.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_SnapGridPainter.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_SnapGridPainter.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_TestComponent.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\ui\jucer_TestComponent.h -# End Source File -# End Group -# Begin Group "utility" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\src\utility\jucer_ColourEditorComponent.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\utility\jucer_Colours.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\utility\jucer_StoredSettings.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\utility\jucer_StoredSettings.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\utility\jucer_UtilityFunctions.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\utility\jucer_UtilityFunctions.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\src\BinaryData.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\BinaryData.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\jucer_Headers.h -# End Source File -# Begin Source File - -SOURCE=..\..\src\jucer_Main.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\jucer.rc -# End Source File -# Begin Source File - -SOURCE=.\jucer_icon.ico -# End Source File -# End Group -# Begin Source File - -SOURCE="..\..\Jucer To Do list.txt" -# End Source File -# End Target -# End Project diff --git a/extras/the jucer/build/vc6/Jucer.dsw b/extras/the jucer/build/vc6/Jucer.dsw deleted file mode 100644 index dba6b48ec9..0000000000 --- a/extras/the jucer/build/vc6/Jucer.dsw +++ /dev/null @@ -1,44 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "JUCE"=..\..\..\build\win32\vc6\JUCE.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "Jucer"=.\Jucer.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name JUCE - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/extras/the jucer/build/vc6/jucer.rc b/extras/the jucer/build/vc6/jucer.rc deleted file mode 100644 index 7f84778535..0000000000 --- a/extras/the jucer/build/vc6/jucer.rc +++ /dev/null @@ -1,2 +0,0 @@ - -IDI_ICON1 ICON DISCARDABLE "jucer_icon.ico" diff --git a/extras/the jucer/build/vc6/jucer_icon.ico b/extras/the jucer/build/vc6/jucer_icon.ico deleted file mode 100644 index 29d7270f446aabe19612c0bb46b9b8a013c9d8bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/the jucer/src/juce_AppConfig.h b/extras/the jucer/src/juce_AppConfig.h index 6a6cc674ab..1b2b22a570 100644 --- a/extras/the jucer/src/juce_AppConfig.h +++ b/extras/the jucer/src/juce_AppConfig.h @@ -26,16 +26,6 @@ /* This file contains settings that you might want to explicitly apply to your Juce build. - - These flags enable or disable juce features - if you're linking to juce as - a library, then to change them, you'd need to alter your juce_Config.h file and - recompile the juce lib. But because we're using the amalgamated file, you can - just include this file before including your juce_amalgamated.cpp file to - have the same effect. - - If you leave any of these commented-out, they'll take on the default value - assigned to them in juce_Config.h, so to force them on or off, just set them - to an explicit 0 or 1 in here. */ //#define JUCE_ONLY_BUILD_CORE_LIBRARY 1 diff --git a/extras/the jucer/src/juce_LibrarySource.mm b/extras/the jucer/src/juce_LibrarySource.mm index 88960e4696..8e2b658e82 100644 --- a/extras/the jucer/src/juce_LibrarySource.mm +++ b/extras/the jucer/src/juce_LibrarySource.mm @@ -9,12 +9,4 @@ */ #include "juce_AppConfig.h" - -// This is where all the juce code gets included, via this amalgamated file.. #include "../../../juce_amalgamated.mm" - -/* NB. A handy tip is that if you're doing a lot of debugging into the juce code, then stepping through - the amalgamated file can be slow or impossible for the debugger. But if you use the following line - instead of the one above, then it makes it a lot easier.. -*/ -//#include "../../../amalgamation/juce_amalgamated_template.cpp" diff --git a/extras/the jucer/src/jucer_Main.cpp b/extras/the jucer/src/jucer_Main.cpp index c66d5a3091..45c60ddf16 100644 --- a/extras/the jucer/src/jucer_Main.cpp +++ b/extras/the jucer/src/jucer_Main.cpp @@ -32,16 +32,9 @@ ApplicationCommandManager* commandManager = 0; //============================================================================== class JucerApplication : public JUCEApplication { - MainWindow* theMainWindow; - public: //============================================================================== JucerApplication() - : theMainWindow (0) - { - } - - ~JucerApplication() { } @@ -62,8 +55,7 @@ public: void shutdown() { - delete theMainWindow; - theMainWindow = 0; + theMainWindow = nullptr; deleteAndZero (commandManager); } @@ -71,12 +63,10 @@ public: //============================================================================== void systemRequestedQuit() { - if (theMainWindow == 0 || theMainWindow->closeAllDocuments()) + if (theMainWindow == nullptr || theMainWindow->closeAllDocuments()) { - deleteAndZero (theMainWindow); - + theMainWindow = nullptr; StoredSettings::deleteInstance(); - quit(); } } @@ -94,18 +84,21 @@ public: bool moreThanOneInstanceAllowed() { -#ifndef JUCE_LINUX + #ifndef JUCE_LINUX return false; -#else + #else return true; //xxx should be false but doesn't work on linux.. -#endif + #endif } void anotherInstanceStarted (const String& commandLine) { - if (theMainWindow != 0 && commandLine.unquoted().isNotEmpty()) + if (theMainWindow != nullptr && commandLine.unquoted().isNotEmpty()) theMainWindow->openFile (commandLine.unquoted()); } + +private: + ScopedPointer theMainWindow; }; diff --git a/extras/the jucer/src/model/components/jucer_ComponentTypeHandler.cpp b/extras/the jucer/src/model/components/jucer_ComponentTypeHandler.cpp index 986b770565..043e1e1399 100644 --- a/extras/the jucer/src/model/components/jucer_ComponentTypeHandler.cpp +++ b/extras/the jucer/src/model/components/jucer_ComponentTypeHandler.cpp @@ -61,13 +61,10 @@ Component* ComponentTypeHandler::createCopyOf (JucerDocument* document, Componen jassert (getHandlerFor (existing) == this); Component* const newOne = createNewComponent (document); - XmlElement* const xml = createXmlFor (&existing, document->getComponentLayout()); + ScopedPointer xml (createXmlFor (&existing, document->getComponentLayout())); - if (xml != 0) - { + if (xml != nullptr) restoreFromXml (*xml, newOne, document->getComponentLayout()); - delete xml; - } return newOne; } diff --git a/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h b/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h index 9a4132cc3e..b2a519ab6a 100644 --- a/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h +++ b/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h @@ -191,16 +191,15 @@ public: if (isTabUsingJucerComp (t, i)) { - JucerDocument* doc - = ObjectTypes::loadDocumentFromFile (code.document->getFile() - .getSiblingFile (getTabJucerFile (t, i)), false); + ScopedPointer doc + (ObjectTypes::loadDocumentFromFile (code.document->getFile() + .getSiblingFile (getTabJucerFile (t, i)), false)); if (doc != 0) { code.includeFilesCPP.add (getTabJucerFile (t, i).replace (".cpp", ".h")); contentClassName = doc->getClassName(); - delete doc; } } else @@ -734,17 +733,11 @@ private: public: RemoveTabAction (TabbedComponent* const comp, ComponentLayout& layout, int indexToRemove_) : ComponentUndoableAction (comp, layout), - indexToRemove (indexToRemove_), - previousState (0) + indexToRemove (indexToRemove_) { previousState = getTabState (comp, indexToRemove); } - ~RemoveTabAction() - { - delete previousState; - } - bool perform() { showCorrectTab(); @@ -767,7 +760,7 @@ private: private: int indexToRemove; - XmlElement* previousState; + ScopedPointer previousState; }; }; @@ -1209,13 +1202,12 @@ private: { showCorrectTab(); - XmlElement* const state = getTabState (getComponent(), from); + ScopedPointer state (getTabState (getComponent(), from)); getComponent()->removeTab (from); addNewTab (getComponent(), to); restoreTabState (getComponent(), to, *state); - delete state; layout.getDocument()->refreshAllPropertyComps(); changed(); diff --git a/extras/the jucer/src/model/components/jucer_ViewportHandler.h b/extras/the jucer/src/model/components/jucer_ViewportHandler.h index 50a2fde8dc..5ea2678171 100644 --- a/extras/the jucer/src/model/components/jucer_ViewportHandler.h +++ b/extras/the jucer/src/model/components/jucer_ViewportHandler.h @@ -148,7 +148,7 @@ public: if (filename.isNotEmpty()) file = code.document->getFile().getSiblingFile (filename); - JucerDocument* doc = ObjectTypes::loadDocumentFromFile (file, false); + ScopedPointer doc (ObjectTypes::loadDocumentFromFile (file, false)); if (doc != 0) { @@ -157,7 +157,6 @@ public: .replaceCharacter ('\\', '/')); className = doc->getClassName(); - delete doc; } else { diff --git a/extras/the jucer/src/model/documents/jucer_ButtonDocument.cpp b/extras/the jucer/src/model/documents/jucer_ButtonDocument.cpp index df9ae4a973..0a603208af 100644 --- a/extras/the jucer/src/model/documents/jucer_ButtonDocument.cpp +++ b/extras/the jucer/src/model/documents/jucer_ButtonDocument.cpp @@ -184,9 +184,8 @@ JucerDocument* ButtonDocument::createCopy() newOne->resources = resources; newOne->setFile (getFile()); - XmlElement* const xml = createXml(); + ScopedPointer xml (createXml()); newOne->loadFromXml (*xml); - delete xml; return newOne; } diff --git a/extras/the jucer/src/model/documents/jucer_ComponentDocument.cpp b/extras/the jucer/src/model/documents/jucer_ComponentDocument.cpp index 96faa748db..1f34c2e5e8 100644 --- a/extras/the jucer/src/model/documents/jucer_ComponentDocument.cpp +++ b/extras/the jucer/src/model/documents/jucer_ComponentDocument.cpp @@ -56,9 +56,8 @@ JucerDocument* ComponentDocument::createCopy() newOne->resources = resources; newOne->setFile (getFile()); - XmlElement* const xml = createXml(); + ScopedPointer xml (createXml()); newOne->loadFromXml (*xml); - delete xml; return newOne; } diff --git a/extras/the jucer/src/model/jucer_ComponentLayout.cpp b/extras/the jucer/src/model/jucer_ComponentLayout.cpp index ea094e0c81..c422edf6b8 100644 --- a/extras/the jucer/src/model/jucer_ComponentLayout.cpp +++ b/extras/the jucer/src/model/jucer_ComponentLayout.cpp @@ -83,11 +83,6 @@ public: { } - ~AddCompAction() - { - delete xml; - } - bool perform() { showCorrectTab(); @@ -111,7 +106,7 @@ public: int indexAdded; private: - XmlElement* xml; + ScopedPointer xml; ComponentLayout& layout; static void showCorrectTab() @@ -138,17 +133,10 @@ public: jassert (h != 0); if (h != 0) xml = h->createXmlFor (comp, &layout); - else - xml = 0; oldIndex = layout.indexOfComponent (comp); } - ~DeleteCompAction() - { - delete xml; - } - bool perform() { showCorrectTab(); @@ -168,7 +156,7 @@ public: } private: - XmlElement* xml; + ScopedPointer xml; int oldIndex; }; @@ -289,7 +277,7 @@ void ComponentLayout::copySelectedToClipboard() void ComponentLayout::paste() { XmlDocument clip (SystemClipboard::getTextFromClipboard()); - XmlElement* const doc = clip.getDocumentElement(); + ScopedPointer doc (clip.getDocumentElement()); if (doc != 0 && doc->hasTagName (clipboardXmlTag)) { @@ -308,8 +296,6 @@ void ComponentLayout::paste() Random::getSystemRandom().nextInt (40)); endDragging(); } - - delete doc; } void ComponentLayout::deleteSelected() @@ -369,7 +355,7 @@ void ComponentLayout::bringLostItemsBackOnScreen (int width, int height) Component* ComponentLayout::addNewComponent (ComponentTypeHandler* const type, int x, int y) { - Component* c = type->createNewComponent (getDocument()); + ScopedPointer c (type->createNewComponent (getDocument())); jassert (c != 0); if (c != 0) @@ -380,11 +366,9 @@ Component* ComponentLayout::addNewComponent (ComponentTypeHandler* const type, i c->getProperties().set ("id", nextCompUID++); - XmlElement* xml = type->createXmlFor (c, this); - delete c; - + ScopedPointer xml (type->createXmlFor (c, this)); + c = nullptr; c = addComponentFromXml (*xml, true); - delete xml; String memberName (makeValidCppIdentifier (type->getClassName (c), true, true, false)); setComponentMemberVariableName (c, memberName); @@ -392,7 +376,7 @@ Component* ComponentLayout::addNewComponent (ComponentTypeHandler* const type, i selected.selectOnly (c); } - return c; + return c.release(); } diff --git a/extras/the jucer/src/model/jucer_JucerDocument.cpp b/extras/the jucer/src/model/jucer_JucerDocument.cpp index 69ec257140..bc720331b7 100644 --- a/extras/the jucer/src/model/jucer_JucerDocument.cpp +++ b/extras/the jucer/src/model/jucer_JucerDocument.cpp @@ -408,27 +408,23 @@ bool JucerDocument::loadFromXml (const XmlElement& xml) //============================================================================== const String JucerDocument::loadDocument (const File& file) { - String error (TRANS("Not a valid Jucer cpp file")); - const File cppFile (file.withFileExtension (".cpp")); const String cppFileString (cppFile.loadFileAsString()); resources.loadFromCpp (file, cppFileString); - XmlElement* const xml = pullMetaDataFromCppFile (cppFileString); + ScopedPointer xml (pullMetaDataFromCppFile (cppFileString)); - if (xml != 0) + if (xml != nullptr) { if (loadFromXml (*xml)) - error = String::empty; - else - error = TRANS("Couldn't parse the XML section of this file correctly"); + return String::empty; - delete xml; + return TRANS("Couldn't parse the XML section of this file correctly"); } - return error; + return TRANS("Not a valid Jucer cpp file"); } const String JucerDocument::saveDocument (const File& file) @@ -511,10 +507,9 @@ void JucerDocument::fillInGeneratedCode (GeneratedCode& code) const fillInPaintCode (code); - XmlElement* const e = createXml(); + ScopedPointer e (createXml()); jassert (e != 0); code.jucerMetadata = e->createDocument (String::empty, false, false); - delete e; resources.fillInGeneratedCode (code); diff --git a/extras/the jucer/src/model/jucer_ObjectTypes.cpp b/extras/the jucer/src/model/jucer_ObjectTypes.cpp index 3b9c332cb3..63b2f54b9b 100644 --- a/extras/the jucer/src/model/jucer_ObjectTypes.cpp +++ b/extras/the jucer/src/model/jucer_ObjectTypes.cpp @@ -107,33 +107,30 @@ JucerDocument* loadDocumentFromFile (const File& f, const bool showErrorMessage) file = fc.getResult(); } - XmlElement* xml = JucerDocument::pullMetaDataFromCppFile (file.loadFileAsString()); + ScopedPointer xml (JucerDocument::pullMetaDataFromCppFile (file.loadFileAsString())); - if (xml == 0 || ! xml->hasTagName (JucerDocument::jucerCompXmlTag)) + if (xml == nullptr || ! xml->hasTagName (JucerDocument::jucerCompXmlTag)) { if (file != File::nonexistent && showErrorMessage) AlertWindow::showMessageBox (AlertWindow::WarningIcon, TRANS("Failed to open file..."), TRANS("This wasn't a valid Jucer .cpp file...")); - delete xml; return 0; } const String docType (xml->getStringAttribute ("documentType")); - delete xml; // (reverse order so ComponentDocument is default last-case) for (int i = numDocumentTypes; --i >= 0;) { if (docType.equalsIgnoreCase (documentTypeNames[i]) || i == 0) { - JucerDocument* doc = createNewDocument (i); + ScopedPointer doc (createNewDocument (i)); if (doc->loadFrom (file, showErrorMessage)) - return doc; + return doc.release(); - delete doc; break; } } @@ -195,7 +192,7 @@ PaintElement* createElementForXml (const XmlElement* const e, PaintRoutine* cons { jassert (e != 0); - PaintElement* pe = 0; + ScopedPointer pe; if (e->hasTagName (PaintElementRectangle::getTagName())) { @@ -226,13 +223,8 @@ PaintElement* createElementForXml (const XmlElement* const e, PaintRoutine* cons pe = new PaintElementGroup (owner); } - if (pe != 0) - { - if (pe->loadFromXml (*e)) - return pe; - - delete pe; - } + if (pe != nullptr && pe->loadFromXml (*e)) + return pe.release(); jassertfalse return 0; diff --git a/extras/the jucer/src/model/jucer_PaintRoutine.cpp b/extras/the jucer/src/model/jucer_PaintRoutine.cpp index 0368d74541..ba36732b4b 100644 --- a/extras/the jucer/src/model/jucer_PaintRoutine.cpp +++ b/extras/the jucer/src/model/jucer_PaintRoutine.cpp @@ -96,11 +96,6 @@ public: { } - ~AddXmlElementAction() - { - delete xml; - } - bool perform() { showCorrectTab(); @@ -125,7 +120,7 @@ public: private: PaintRoutine& routine; - XmlElement* xml; + ScopedPointer xml; void showCorrectTab() const { @@ -170,12 +165,10 @@ PaintElement* PaintRoutine::addNewElement (PaintElement* e, const int index, con { if (e != 0) { - XmlElement* const xml = e->createXml(); + ScopedPointer xml (e->createXml()); delete e; e = addElementFromXml (*xml, index, undoable); - - delete xml; } return e; @@ -193,11 +186,6 @@ public: oldIndex = routine.indexOfElement (element); } - ~DeleteElementAction() - { - delete xml; - } - bool perform() { showCorrectTab(); @@ -215,7 +203,7 @@ public: int getSizeInUnits() { return 10; } private: - XmlElement* xml; + ScopedPointer xml; int oldIndex; }; @@ -335,7 +323,7 @@ void PaintRoutine::copySelectedToClipboard() void PaintRoutine::paste() { XmlDocument clip (SystemClipboard::getTextFromClipboard()); - XmlElement* const doc = clip.getDocumentElement(); + ScopedPointer doc (clip.getDocumentElement()); if (doc != 0 && doc->hasTagName (clipboardXmlTag)) { @@ -350,8 +338,6 @@ void PaintRoutine::paste() selectedElements.addToSelection (newElement); } } - - delete doc; } void PaintRoutine::deleteSelected() @@ -536,12 +522,12 @@ void PaintRoutine::drawElements (Graphics& g, const Rectangle& relativeTo) //============================================================================== void PaintRoutine::dropImageAt (const File& f, int x, int y) { - Drawable* d = Drawable::createFromImageFile (f); + ScopedPointer d (Drawable::createFromImageFile (f)); - if (d != 0) + if (d != nullptr) { Rectangle bounds (d->getDrawableBounds()); - delete d; + d = nullptr; PaintElement* newElement = addNewElement (ObjectTypes::createNewImageElement (this), -1, true); diff --git a/extras/the jucer/src/model/paintelements/jucer_ColouredElement.cpp b/extras/the jucer/src/model/paintelements/jucer_ColouredElement.cpp index 7c084b59d2..0ab160482b 100644 --- a/extras/the jucer/src/model/paintelements/jucer_ColouredElement.cpp +++ b/extras/the jucer/src/model/paintelements/jucer_ColouredElement.cpp @@ -1025,18 +1025,16 @@ void ColouredElement::convertToNewPathElement (const Path& path) { if (! path.isEmpty()) { - PaintElementPath* newElement = new PaintElementPath (getOwner()); - newElement->setToPath (path); - newElement->setFillType (fillType, false); - newElement->enableStroke (isStrokeEnabled(), false); - newElement->setStrokeType (getStrokeType().stroke, false); - newElement->setStrokeFill (getStrokeType().fill, false); + PaintElementPath newElement (getOwner()); + newElement.setToPath (path); + newElement.setFillType (fillType, false); + newElement.enableStroke (isStrokeEnabled(), false); + newElement.setStrokeType (getStrokeType().stroke, false); + newElement.setStrokeFill (getStrokeType().fill, false); - XmlElement* xml = newElement->createXml(); - delete newElement; + ScopedPointer xml (newElement.createXml()); PaintElement* e = getOwner()->addElementFromXml (*xml, getOwner()->indexOfElement (this), true); - delete xml; getOwner()->getSelectedElements().selectOnly (e); getOwner()->removeElement (this, true); diff --git a/extras/the jucer/src/model/paintelements/jucer_PaintElementGroup.h b/extras/the jucer/src/model/paintelements/jucer_PaintElementGroup.h index 5523e7369f..4054d7b21e 100644 --- a/extras/the jucer/src/model/paintelements/jucer_PaintElementGroup.h +++ b/extras/the jucer/src/model/paintelements/jucer_PaintElementGroup.h @@ -42,8 +42,6 @@ public: { } - ~PaintElementGroup() {} - //============================================================================== void ungroup (const bool undoable) { @@ -54,12 +52,10 @@ public: for (int i = 0; i < subElements.size(); ++i) { - XmlElement* const xml = subElements.getUnchecked(i)->createXml(); + ScopedPointer xml (subElements.getUnchecked(i)->createXml()); PaintElement* newOne = getOwner()->addElementFromXml (*xml, index, undoable); getOwner()->getSelectedElements().addToSelection (newOne); - - delete xml; } getOwner()->removeElement (this, undoable); @@ -77,14 +73,12 @@ public: { if (routine->getSelectedElements().isSelected (routine->getElement (i))) { - XmlElement* xml = routine->getElement(i)->createXml(); + ScopedPointer xml (routine->getElement(i)->createXml()); PaintElement* newOne = ObjectTypes::createElementForXml (xml, routine); if (newOne != 0) newGroup->subElements.add (newOne); - delete xml; - if (i > frontIndex) frontIndex = i; } diff --git a/extras/the jucer/src/model/paintelements/jucer_PaintElementPath.cpp b/extras/the jucer/src/model/paintelements/jucer_PaintElementPath.cpp index d4560f7e4e..ccc730a30a 100644 --- a/extras/the jucer/src/model/paintelements/jucer_PaintElementPath.cpp +++ b/extras/the jucer/src/model/paintelements/jucer_PaintElementPath.cpp @@ -586,7 +586,7 @@ void PaintElementPath::restorePathFromString (const String& s) for (int i = 0; i < tokens.size(); ++i) { - PathPoint* p = new PathPoint (this); + ScopedPointer p (new PathPoint (this)); if (tokens[i] == "s") { @@ -627,12 +627,9 @@ void PaintElementPath::restorePathFromString (const String& s) p->type = Path::Iterator::closePath; } else - { - delete p; continue; - } - points.add (p); + points.add (p.release()); } } @@ -644,7 +641,7 @@ void PaintElementPath::setToPath (const Path& p) while (i.next()) { - PathPoint* p = new PathPoint (this); + ScopedPointer p (new PathPoint (this)); p->type = i.elementType; if (i.elementType == Path::Iterator::startNewSubPath) @@ -678,11 +675,10 @@ void PaintElementPath::setToPath (const Path& p) } else { - delete p; continue; } - points.add (p); + points.add (p.release()); } } diff --git a/extras/the jucer/src/ui/jucer_MainWindow.cpp b/extras/the jucer/src/ui/jucer_MainWindow.cpp index 8fd90cdeb8..9c1f751f10 100644 --- a/extras/the jucer/src/ui/jucer_MainWindow.cpp +++ b/extras/the jucer/src/ui/jucer_MainWindow.cpp @@ -68,11 +68,11 @@ MainWindow::MainWindow() setApplicationCommandManagerToWatch (commandManager); -#if JUCE_MAC + #if JUCE_MAC setMacMainMenu (this); -#else + #else setMenuBar (this); -#endif + #endif setResizable (true, false); @@ -107,19 +107,19 @@ MainWindow::MainWindow() // don't want the window to take focus when the title-bar is clicked.. setWantsKeyboardFocus (false); -#ifndef JUCE_DEBUG + #ifndef JUCE_DEBUG // scan for fonts before the app gets started rather than glitching later FontPropertyComponent::preloadAllFonts(); -#endif + #endif } MainWindow::~MainWindow() { -#if JUCE_MAC + #if JUCE_MAC setMacMainMenu (0); -#else + #else setMenuBar (0); -#endif + #endif removeKeyListener (commandManager->getKeyMappings()); diff --git a/extras/the jucer/src/ui/jucer_PaintRoutineEditor.cpp b/extras/the jucer/src/ui/jucer_PaintRoutineEditor.cpp index c67f6fb846..3924205184 100644 --- a/extras/the jucer/src/ui/jucer_PaintRoutineEditor.cpp +++ b/extras/the jucer/src/ui/jucer_PaintRoutineEditor.cpp @@ -291,11 +291,11 @@ void PaintRoutineEditor::filesDropped (const StringArray& filenames, int x, int if (f.existsAsFile()) { - Drawable* d = Drawable::createFromImageFile (f); + ScopedPointer d (Drawable::createFromImageFile (f)); - if (d != 0) + if (d != nullptr) { - delete d; + d = nullptr; document.getUndoManager().beginNewTransaction(); diff --git a/Builds/VisualStudio2008_DLL/Juce.sln b/extras/windows dll/Builds/VisualStudio2008/juce_dll.sln similarity index 54% rename from Builds/VisualStudio2008_DLL/Juce.sln rename to extras/windows dll/Builds/VisualStudio2008/juce_dll.sln index 4ee40ce2d4..fbed2820e4 100644 --- a/Builds/VisualStudio2008_DLL/Juce.sln +++ b/extras/windows dll/Builds/VisualStudio2008/juce_dll.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 -Project("{30DE6365-A0C4-171D-3ADD-E102A1BD1BB8}") = "Juce", "Juce.vcproj", "{2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}" +Project("{DA0710E1-86D4-70A0-F0BD-B0738E8CA7F8}") = "juce_dll", "juce_dll.vcproj", "{D034FAC1-F664-2AFC-825F-1B890594D38A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Debug|Win32.Build.0 = Debug|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.ActiveCfg = Release|Win32 - {2F2AF28C-CD42-F164-1AC5-90A9ACD39DD3}.Release|Win32.Build.0 = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.ActiveCfg = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Debug|Win32.Build.0 = Debug|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.ActiveCfg = Release|Win32 + {D034FAC1-F664-2AFC-825F-1B890594D38A}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/extras/windows dll/Builds/VisualStudio2008/juce_dll.vcproj b/extras/windows dll/Builds/VisualStudio2008/juce_dll.vcproj new file mode 100644 index 0000000000..79aef88ec5 --- /dev/null +++ b/extras/windows dll/Builds/VisualStudio2008/juce_dll.vcproj @@ -0,0 +1,4357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/windows dll/JuceLibraryCode/AppConfig.h b/extras/windows dll/JuceLibraryCode/AppConfig.h new file mode 100644 index 0000000000..24232d33f6 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/AppConfig.h @@ -0,0 +1,63 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + If you want to change any of these values, use the Introjucer to do so, + rather than editing this file directly! + + Any commented-out settings will assume their default values. + +*/ + +//============================================================================== +// juce_audio_devices flags: + +//#define JUCE_ASIO +//#define JUCE_WASAPI +//#define JUCE_DIRECTSOUND +//#define JUCE_ALSA +//#define JUCE_JACK +//#define JUCE_USE_CDREADER +//#define JUCE_USE_CDBURNER + +//============================================================================== +// juce_audio_formats flags: + +//#define JUCE_USE_FLAC +//#define JUCE_USE_OGGVORBIS + +//============================================================================== +// juce_audio_processors flags: + +//#define JUCE_PLUGINHOST_VST +//#define JUCE_PLUGINHOST_AU + +//============================================================================== +// juce_core flags: + +//#define JUCE_FORCE_DEBUG +//#define JUCE_LOG_ASSERTIONS +//#define JUCE_CHECK_MEMORY_LEAKS +//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + +//============================================================================== +// juce_gui_basics flags: + +//#define JUCE_ENABLE_REPAINT_DEBUGGING +//#define JUCE_USE_XSHM +//#define JUCE_USE_XRENDER +//#define JUCE_USE_XCURSOR + +//============================================================================== +// juce_gui_extra flags: + +//#define JUCE_WEB_BROWSER + +//============================================================================== +// juce_video flags: + +//#define JUCE_DIRECTSHOW +//#define JUCE_MEDIAFOUNDATION +//#define JUCE_QUICKTIME +//#define JUCE_USE_CAMERA diff --git a/extras/windows dll/JuceLibraryCode/JuceHeader.h b/extras/windows dll/JuceLibraryCode/JuceHeader.h new file mode 100644 index 0000000000..9104600f58 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/JuceHeader.h @@ -0,0 +1,46 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This is the header file that your files should include in order to get all the + JUCE library headers. You should avoid including the JUCE headers directly in + your own source files, because that wouldn't pick up the correct configuration + options for your app. + +*/ + +#ifndef __APPHEADERFILE_IVABE4__ +#define __APPHEADERFILE_IVABE4__ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.h" +#include "../../../modules/juce_core/juce_core.h" +#include "../../../modules/juce_cryptography/juce_cryptography.h" +#include "../../../modules/juce_data_structures/juce_data_structures.h" +#include "../../../modules/juce_events/juce_events.h" +#include "../../../modules/juce_graphics/juce_graphics.h" +#include "../../../modules/juce_gui_audio/juce_gui_audio.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.h" +#include "../../../modules/juce_opengl/juce_opengl.h" +#include "../../../modules/juce_video/juce_video.h" + +#if defined (JUCE_NAMESPACE) && ! DONT_SET_USING_JUCE_NAMESPACE + /* If you're not mixing JUCE with other libraries, then this will obviously save + a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + */ + using namespace JUCE_NAMESPACE; +#endif + +namespace ProjectInfo +{ + const char* const projectName = "juce_dll"; + const char* const versionString = "1.0.0"; + const int versionNumber = 0x10000; +} + +#endif // __APPHEADERFILE_IVABE4__ diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.cpp new file mode 100644 index 0000000000..ba6330672e --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.mm new file mode 100644 index 0000000000..ba6330672e --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_basics_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_basics/juce_audio_basics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.cpp new file mode 100644 index 0000000000..07262ee842 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.mm new file mode 100644 index 0000000000..07262ee842 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_devices_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_devices/juce_audio_devices.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.cpp new file mode 100644 index 0000000000..0d4aefeae2 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.mm new file mode 100644 index 0000000000..0d4aefeae2 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_formats_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_formats/juce_audio_formats.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.cpp new file mode 100644 index 0000000000..fa57e1e5ce --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.mm new file mode 100644 index 0000000000..fa57e1e5ce --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_audio_processors_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_audio_processors/juce_audio_processors.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_core_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_core_wrapper.cpp new file mode 100644 index 0000000000..7af4bafb6b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_core_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_core_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_core_wrapper.mm new file mode 100644 index 0000000000..7af4bafb6b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_core_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_core/juce_core.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.cpp new file mode 100644 index 0000000000..b49c1699e5 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.mm new file mode 100644 index 0000000000..b49c1699e5 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_cryptography_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_cryptography/juce_cryptography.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.cpp new file mode 100644 index 0000000000..c5f9b3cc4b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.mm new file mode 100644 index 0000000000..c5f9b3cc4b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_data_structures_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_data_structures/juce_data_structures.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_events_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_events_wrapper.cpp new file mode 100644 index 0000000000..06affc1d9b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_events_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_events_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_events_wrapper.mm new file mode 100644 index 0000000000..06affc1d9b --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_events_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_events/juce_events.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.cpp new file mode 100644 index 0000000000..8668e4f787 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.mm new file mode 100644 index 0000000000..8668e4f787 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_graphics_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_graphics/juce_graphics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.cpp new file mode 100644 index 0000000000..cf58a725bf --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_audio/juce_gui_audio.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.mm new file mode 100644 index 0000000000..cf58a725bf --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_audio_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_audio/juce_gui_audio.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.cpp new file mode 100644 index 0000000000..52b697ea2a --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.mm new file mode 100644 index 0000000000..52b697ea2a --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_basics_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_basics/juce_gui_basics.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.cpp new file mode 100644 index 0000000000..286c6bb1f9 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.mm new file mode 100644 index 0000000000..286c6bb1f9 --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_gui_extra_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_gui_extra/juce_gui_extra.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.cpp new file mode 100644 index 0000000000..94bfd12cde --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.mm new file mode 100644 index 0000000000..94bfd12cde --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_opengl_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_opengl/juce_opengl.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_video_wrapper.cpp b/extras/windows dll/JuceLibraryCode/juce_video_wrapper.cpp new file mode 100644 index 0000000000..303d8ad27a --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_video_wrapper.cpp @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/windows dll/JuceLibraryCode/juce_video_wrapper.mm b/extras/windows dll/JuceLibraryCode/juce_video_wrapper.mm new file mode 100644 index 0000000000..303d8ad27a --- /dev/null +++ b/extras/windows dll/JuceLibraryCode/juce_video_wrapper.mm @@ -0,0 +1,15 @@ +/* + + IMPORTANT! This file is auto-generated each time you save your + project - if you alter its contents, your changes may be overwritten! + + This file pulls in a module's source code, and builds it using the settings + defined in AppConfig.h. + + If you want to change the method by which Juce is linked into your app, use the + Jucer to change it, rather than trying to edit this file directly. + +*/ + +#include "AppConfig.h" +#include "../../../modules/juce_video/juce_video.cpp" diff --git a/extras/windows dll/jucedll.jucer b/extras/windows dll/jucedll.jucer new file mode 100644 index 0000000000..fd00cbca5e --- /dev/null +++ b/extras/windows dll/jucedll.jucer @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/juce.h b/juce.h index 5fda86bc02..8193e5692d 100644 --- a/juce.h +++ b/juce.h @@ -26,141 +26,46 @@ #ifndef __JUCE_JUCEHEADER__ #define __JUCE_JUCEHEADER__ -//============================================================================== /* - This is the main JUCE header file that applications need to include. + PLEASE NOTE! This file is just here to help transition old code to the newer + modularised layout - but it will be removed at some point in the future, so + you should update your projects to use the newer design as soon as possible. + Now that the library has been broken up into separate modules, instead of + including one giant header that includes everything, you should include the + headers of the modules that you want to use. By far the easiest way to do that + is with the introjucer, which will sort everything out for you and create a + single header for your app which correctly includes everything you need. */ +#ifdef _MSC_VER + #pragma message ("The juce.h file is deprecated - please include each module's header file directly, or preferably let the introjucer handle the inclusion of source code in your project.") +#else + #warning "The juce.h file is deprecated - please include each module's header file directly, or preferably let the introjucer handle the inclusion of source code in your project." +#endif + //============================================================================== - -/* This line is here just to help catch syntax errors caused by mistakes in other header - files that are included before juce.h. If you hit an error at this line, it must be some - kind of syntax problem in whatever code immediately precedes this header. - - This also acts as a sanity-check in case you're trying to build with a C or obj-C compiler - rather than a proper C++ one. -*/ -namespace JuceDummyNamespace {} - -#define JUCE_PUBLIC_INCLUDES 1 - -// (this includes things that need defining outside of the JUCE namespace) -#include "src/core/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#if JUCE_MSVC - // this is set explicitly in case the app is using a different packing size. - #pragma pack (push, 8) - #pragma warning (push) - #pragma warning (disable: 4786) // (old vc6 warning about long class names) - #ifdef __INTEL_COMPILER - #pragma warning (disable: 1125) - #endif -#endif - -// this is where all the class header files get brought in.. -#include "src/juce_core_includes.h" - -// if you're compiling a command-line app, you might want to just include the core headers, -// so you can set this macro before including juce.h -#if ! JUCE_ONLY_BUILD_CORE_LIBRARY - #include "src/juce_app_includes.h" -#endif - -#if JUCE_MSVC - #pragma warning (pop) - #pragma pack (pop) -#endif - -END_JUCE_NAMESPACE +#include "modules/juce_core/juce_core.h" +#include "modules/juce_gui_basics/juce_gui_basics.h" +#include "modules/juce_data_structures/juce_data_structures.h" +#include "modules/juce_events/juce_events.h" +#include "modules/juce_graphics/juce_graphics.h" +#include "modules/juce_video/juce_video.h" +#include "modules/juce_opengl/juce_opengl.h" +#include "modules/juce_audio_basics/juce_audio_basics.h" +#include "modules/juce_audio_formats/juce_audio_formats.h" +#include "modules/juce_audio_processors/juce_audio_processors.h" +#include "modules/juce_audio_devices/juce_audio_devices.h" +#include "modules/juce_cryptography/juce_cryptography.h" +#include "modules/juce_gui_extra/juce_gui_extra.h" +#include "modules/juce_gui_audio/juce_gui_audio.h" //============================================================================== -#ifndef DONT_SET_USING_JUCE_NAMESPACE -#ifdef JUCE_NAMESPACE - - // this will obviously save a lot of typing, but can be disabled by - // defining DONT_SET_USING_JUCE_NAMESPACE, in case there are conflicts. +#if defined (JUCE_NAMESPACE) && ! DONT_SET_USING_JUCE_NAMESPACE + /* If you're not mixing JUCE with other libraries, then this will obviously save + a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. + */ using namespace JUCE_NAMESPACE; - - /* On the Mac, these symbols are defined in the Mac libraries, so - these macros make it easier to reference them without writing out - the namespace every time. - - If you run into difficulties where these macros interfere with the contents - of 3rd party header files, you may need to use the juce_WithoutMacros.h file - see - the comments in that file for more information. - */ - #if (JUCE_MAC || JUCE_IOS) && ! JUCE_DONT_DEFINE_MACROS - #define Component JUCE_NAMESPACE::Component - #define MemoryBlock JUCE_NAMESPACE::MemoryBlock - #define Point JUCE_NAMESPACE::Point - #define Button JUCE_NAMESPACE::Button - #endif - - /* "Rectangle" is defined in some of the newer windows header files, so this makes - it easier to use the juce version explicitly. - - If you run into difficulties where this macro interferes with other 3rd party header - files, you may need to use the juce_WithoutMacros.h file - see the comments in that - file for more information. - */ - #if JUCE_WINDOWS && ! JUCE_DONT_DEFINE_MACROS - #define Rectangle JUCE_NAMESPACE::Rectangle - #endif -#endif -#endif - -//============================================================================== -/* Easy autolinking to the right JUCE libraries under win32. - - Note that this can be disabled by defining DONT_AUTOLINK_TO_JUCE_LIBRARY before - including this header file. -*/ -#if JUCE_MSVC - - #ifndef DONT_AUTOLINK_TO_JUCE_LIBRARY - - /** If you want your application to link to Juce as a DLL instead of - a static library (on win32), just define the JUCE_DLL macro before - including juce.h - */ - #ifdef JUCE_DLL - #if JUCE_DEBUG - #define AUTOLINKEDLIB "JUCE_debug.lib" - #else - #define AUTOLINKEDLIB "JUCE.lib" - #endif - #else - #if JUCE_DEBUG - #ifdef _WIN64 - #define AUTOLINKEDLIB "jucelib_static_x64_debug.lib" - #else - #define AUTOLINKEDLIB "jucelib_static_Win32_debug.lib" - #endif - #else - #ifdef _WIN64 - #define AUTOLINKEDLIB "jucelib_static_x64.lib" - #else - #define AUTOLINKEDLIB "jucelib_static_Win32.lib" - #endif - #endif - #endif - - #pragma comment(lib, AUTOLINKEDLIB) - - #if ! DONT_LIST_JUCE_AUTOLINKEDLIBS - #pragma message("JUCE! Library to link to: " AUTOLINKEDLIB) - #endif - - // Auto-link the other win32 libs that are needed by library calls.. - #if ! (defined (DONT_AUTOLINK_TO_WIN32_LIBRARIES) || defined (JUCE_DLL)) - #include "src/native/windows/juce_win32_AutoLinkLibraries.h" - #endif - - #endif - #endif #endif // __JUCE_JUCEHEADER__ diff --git a/juce_Config.h b/juce_Config.h deleted file mode 100644 index 771d55fc86..0000000000 --- a/juce_Config.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 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 __JUCE_CONFIG_JUCEHEADER__ -#define __JUCE_CONFIG_JUCEHEADER__ - -//============================================================================== -/* - This file contains macros that enable/disable various JUCE features. -*/ - -//============================================================================= -/** JUCE_FORCE_DEBUG: Normally, JUCE_DEBUG is set to 1 or 0 based on compiler and - project settings, but if you define this value, you can override this to force - it to be true or false. -*/ -#ifndef JUCE_FORCE_DEBUG - //#define JUCE_FORCE_DEBUG 0 -#endif - -//============================================================================= -/** JUCE_LOG_ASSERTIONS: If this flag is enabled, the the jassert and jassertfalse - macros will always use Logger::writeToLog() to write a message when an assertion happens. - - Enabling it will also leave this turned on in release builds. When it's disabled, - however, the jassert and jassertfalse macros will not be compiled in a - release build. - - @see jassert, jassertfalse, Logger -*/ -#ifndef JUCE_LOG_ASSERTIONS - #define JUCE_LOG_ASSERTIONS 0 -#endif - -//============================================================================= -/** JUCE_ASIO: Enables ASIO audio devices (MS Windows only). - Turning this on means that you'll need to have the Steinberg ASIO SDK installed - on your Windows build machine. - - See the comments in the ASIOAudioIODevice class's header file for more - info about this. -*/ -#ifndef JUCE_ASIO - #define JUCE_ASIO 0 -#endif - -/** JUCE_WASAPI: Enables WASAPI audio devices (Windows Vista and above). -*/ -#ifndef JUCE_WASAPI - #define JUCE_WASAPI 0 -#endif - -/** JUCE_DIRECTSOUND: Enables DirectSound audio (MS Windows only). -*/ -#ifndef JUCE_DIRECTSOUND - #define JUCE_DIRECTSOUND 1 -#endif - -/** JUCE_DIRECTSHOW: Enables DirectShow media-streaming architecture (MS Windows only). -*/ -#ifndef JUCE_DIRECTSHOW - #define JUCE_DIRECTSHOW 0 -#endif - -/** JUCE_MEDIAFOUNDATION: Enables Media Foundation multimedia platform (Windows Vista and above). -*/ -#ifndef JUCE_MEDIAFOUNDATION - #define JUCE_MEDIAFOUNDATION 0 -#endif - -#if ! JUCE_WINDOWS - #undef JUCE_DIRECTSHOW - #undef JUCE_MEDIAFOUNDATION -#endif - -/** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ -#ifndef JUCE_ALSA - #define JUCE_ALSA 1 -#endif - -/** JUCE_JACK: Enables JACK audio devices (Linux only). */ -#ifndef JUCE_JACK - #define JUCE_JACK 0 -#endif - -//============================================================================= -/** JUCE_QUICKTIME: Enables the QuickTimeMovieComponent class (Mac and Windows). - If you're building on Windows, you'll need to have the Apple QuickTime SDK - installed, and its header files will need to be on your include path. -*/ -#if ! (defined (JUCE_QUICKTIME) || JUCE_LINUX || JUCE_IOS || JUCE_ANDROID || (JUCE_WINDOWS && ! JUCE_MSVC)) - #define JUCE_QUICKTIME 0 -#endif - -#if (JUCE_IOS || JUCE_LINUX) && JUCE_QUICKTIME - #undef JUCE_QUICKTIME -#endif - -//============================================================================= -/** JUCE_OPENGL: Enables the OpenGLComponent class (available on all platforms). - If you're not using OpenGL, you might want to turn this off to reduce your binary's size. -*/ -#if ! (defined (JUCE_OPENGL) || JUCE_ANDROID) - #define JUCE_OPENGL 1 -#endif - -/** JUCE_DIRECT2D: Enables the Windows 7 Direct2D renderer. - If you're building on a platform older than Vista, you won't be able to compile with this feature. -*/ -#ifndef JUCE_DIRECT2D - #define JUCE_DIRECT2D 0 -#endif - -//============================================================================= -/** JUCE_USE_FLAC: Enables the FLAC audio codec classes (available on all platforms). - If your app doesn't need to read FLAC files, you might want to disable this to - reduce the size of your codebase and build time. -*/ -#ifndef JUCE_USE_FLAC - #define JUCE_USE_FLAC 1 -#endif - -/** JUCE_USE_OGGVORBIS: Enables the Ogg-Vorbis audio codec classes (available on all platforms). - If your app doesn't need to read Ogg-Vorbis files, you might want to disable this to - reduce the size of your codebase and build time. -*/ -#ifndef JUCE_USE_OGGVORBIS - #define JUCE_USE_OGGVORBIS 1 -#endif - -//============================================================================= -/** JUCE_USE_CDBURNER: Enables the audio CD reader code (Mac and Windows only). - Unless you're using CD-burning, you should probably turn this flag off to - reduce code size. -*/ -#if (! defined (JUCE_USE_CDBURNER)) && ! (JUCE_WINDOWS && ! JUCE_MSVC) - #define JUCE_USE_CDBURNER 1 -#endif - -/** JUCE_USE_CDREADER: Enables the audio CD reader code (Mac and Windows only). - Unless you're using CD-reading, you should probably turn this flag off to - reduce code size. -*/ -#ifndef JUCE_USE_CDREADER - #define JUCE_USE_CDREADER 1 -#endif - -//============================================================================= -/** JUCE_USE_CAMERA: Enables web-cam support using the CameraDevice class (Mac and Windows). -*/ -#if (JUCE_QUICKTIME || JUCE_WINDOWS) && ! defined (JUCE_USE_CAMERA) - #define JUCE_USE_CAMERA 0 -#endif - -//============================================================================= -/** JUCE_ENABLE_REPAINT_DEBUGGING: If this option is turned on, each area of the screen that - gets repainted will flash in a random colour, so that you can check exactly how much and how - often your components are being drawn. -*/ -#ifndef JUCE_ENABLE_REPAINT_DEBUGGING - #define JUCE_ENABLE_REPAINT_DEBUGGING 0 -#endif - -//============================================================================= -/** JUCE_USE_XINERAMA: Enables Xinerama multi-monitor support (Linux only). - Unless you specifically want to disable this, it's best to leave this option turned on. -*/ -#ifndef JUCE_USE_XINERAMA - #define JUCE_USE_XINERAMA 1 -#endif - -/** JUCE_USE_XSHM: Enables X shared memory for faster rendering on Linux. This is best left - turned on unless you have a good reason to disable it. -*/ -#ifndef JUCE_USE_XSHM - #define JUCE_USE_XSHM 1 -#endif - -/** JUCE_USE_XRENDER: Uses XRender to allow semi-transparent windowing on Linux. -*/ -#ifndef JUCE_USE_XRENDER - #define JUCE_USE_XRENDER 0 -#endif - -/** JUCE_USE_XCURSOR: Uses XCursor to allow ARGB cursor on Linux. This is best left turned on - unless you have a good reason to disable it. -*/ -#ifndef JUCE_USE_XCURSOR - #define JUCE_USE_XCURSOR 1 -#endif - -//============================================================================= -/** JUCE_PLUGINHOST_VST: Enables the VST audio plugin hosting classes. This requires the - Steinberg VST SDK to be installed on your machine, and should be left turned off unless - you're building a plugin hosting app. - - @see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU -*/ -#ifndef JUCE_PLUGINHOST_VST - #define JUCE_PLUGINHOST_VST 0 -#endif - -/** JUCE_PLUGINHOST_AU: Enables the AudioUnit plugin hosting classes. This is Mac-only, - of course, and should only be enabled if you're building a plugin hosting app. - - @see AudioUnitPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_VST -*/ -#ifndef JUCE_PLUGINHOST_AU - #define JUCE_PLUGINHOST_AU 0 -#endif - -//============================================================================= -/** JUCE_ONLY_BUILD_CORE_LIBRARY: Enabling this will avoid including any UI classes in the build. - This should be enabled if you're writing a console application. -*/ -#ifndef JUCE_ONLY_BUILD_CORE_LIBRARY - #define JUCE_ONLY_BUILD_CORE_LIBRARY 0 -#endif - -/** JUCE_WEB_BROWSER: This lets you disable the WebBrowserComponent class (Mac and Windows). - If you're not using any embedded web-pages, turning this off may reduce your code size. -*/ -#ifndef JUCE_WEB_BROWSER - #define JUCE_WEB_BROWSER 1 -#endif - - -//============================================================================= -/** JUCE_SUPPORT_CARBON: Enabling this allows the Mac code to use old Carbon library functions. - - Carbon isn't required for a normal app, but may be needed by specialised classes like - plugin-hosts, which support older APIs. -*/ -#if ! (defined (JUCE_SUPPORT_CARBON) || defined (__LP64__)) - #define JUCE_SUPPORT_CARBON 1 -#endif - -//============================================================================= -/* JUCE_INCLUDE_ZLIB_CODE: Can be used to disable Juce's embedded 3rd-party zlib code. - You might need to tweak this if you're linking to an external zlib library in your app, - but for normal apps, this option should be left alone. -*/ -#ifndef JUCE_INCLUDE_ZLIB_CODE - #define JUCE_INCLUDE_ZLIB_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_FLAC_CODE - #define JUCE_INCLUDE_FLAC_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_OGGVORBIS_CODE - #define JUCE_INCLUDE_OGGVORBIS_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_PNGLIB_CODE - #define JUCE_INCLUDE_PNGLIB_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_JPEGLIB_CODE - #define JUCE_INCLUDE_JPEGLIB_CODE 1 -#endif - -//============================================================================= -/** JUCE_CHECK_MEMORY_LEAKS: Enables a memory-leak check for certain objects when - the app terminates. See the LeakedObjectDetector class and the JUCE_LEAK_DETECTOR - macro for more details about enabling leak checking for specific classes. -*/ -#if JUCE_DEBUG && ! defined (JUCE_CHECK_MEMORY_LEAKS) - #define JUCE_CHECK_MEMORY_LEAKS 1 -#endif - -/** JUCE_CATCH_UNHANDLED_EXCEPTIONS: Turn on juce's internal catching of exceptions - that are thrown by the message dispatch loop. With it enabled, any unhandled exceptions - are passed to the JUCEApplication::unhandledException() callback for logging. -*/ -#ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS - #define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 -#endif - -//============================================================================= -// If only building the core classes, we can explicitly turn off some features to avoid including them: -#if JUCE_ONLY_BUILD_CORE_LIBRARY - #undef JUCE_QUICKTIME - #define JUCE_QUICKTIME 0 - #undef JUCE_OPENGL - #define JUCE_OPENGL 0 - #undef JUCE_USE_CDBURNER - #define JUCE_USE_CDBURNER 0 - #undef JUCE_USE_CDREADER - #define JUCE_USE_CDREADER 0 - #undef JUCE_WEB_BROWSER - #define JUCE_WEB_BROWSER 0 - #undef JUCE_PLUGINHOST_AU - #define JUCE_PLUGINHOST_AU 0 - #undef JUCE_PLUGINHOST_VST - #define JUCE_PLUGINHOST_VST 0 -#endif - -#endif diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 9ed7452e9d..01ff57df2f 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -1,293482 +1,2 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 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. - - ============================================================================== -*/ - -/* - This monolithic file contains the entire Juce source tree! - - To build an app which uses Juce, all you need to do is to add this - file to your project, and include juce.h in your own cpp files. - -*/ - -#ifdef __JUCE_JUCEHEADER__ - /* When you add the amalgamated cpp file to your project, you mustn't include it in - a file where you've already included juce.h - just put it inside a file on its own, - possibly with your config flags preceding it, but don't include anything else. */ - #error -#endif - - -/*** Start of inlined file: juce_TargetPlatform.h ***/ -#ifndef __JUCE_TARGETPLATFORM_JUCEHEADER__ -#define __JUCE_TARGETPLATFORM_JUCEHEADER__ - -/* This file figures out which platform is being built, and defines some macros - that the rest of the code can use for OS-specific compilation. - - Macros that will be set here are: - - - One of JUCE_WINDOWS, JUCE_MAC JUCE_LINUX, JUCE_IOS, JUCE_ANDROID, etc. - - Either JUCE_32BIT or JUCE_64BIT, depending on the architecture. - - Either JUCE_LITTLE_ENDIAN or JUCE_BIG_ENDIAN. - - Either JUCE_INTEL or JUCE_PPC - - Either JUCE_GCC or JUCE_MSVC -*/ - -/* This line is here as a sanity-check to catch syntax errors caused by mistakes in 3rd-party - header files that have been included before this one. If you hit an error at this line, there - must be some kind of syntax problem in whatever code immediately precedes this header. - - It also causes an error if you attempt to build using a C or obj-C compiler rather than a C++ one. -*/ -namespace JuceDummyNamespace {} - -#if (defined (_WIN32) || defined (_WIN64)) - #define JUCE_WIN32 1 - #define JUCE_WINDOWS 1 -#elif defined (JUCE_ANDROID) - #undef JUCE_ANDROID - #define JUCE_ANDROID 1 -#elif defined (LINUX) || defined (__linux__) - #define JUCE_LINUX 1 -#elif defined (__APPLE_CPP__) || defined(__APPLE_CC__) - #define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers) - #include // (needed to find out what platform we're using) - #undef Point - - #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - #define JUCE_IPHONE 1 - #define JUCE_IOS 1 - #else - #define JUCE_MAC 1 - #endif -#else - #error "Unknown platform!" -#endif - -#if JUCE_WINDOWS - #ifdef _MSC_VER - #ifdef _WIN64 - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - #endif - - #ifdef _DEBUG - #define JUCE_DEBUG 1 - #endif - - #ifdef __MINGW32__ - #define JUCE_MINGW 1 - #endif - - /** If defined, this indicates that the processor is little-endian. */ - #define JUCE_LITTLE_ENDIAN 1 - - #define JUCE_INTEL 1 -#endif - -#if JUCE_MAC || JUCE_IOS - - #if defined (DEBUG) || defined (_DEBUG) || ! (defined (NDEBUG) || defined (_NDEBUG)) - #define JUCE_DEBUG 1 - #endif - - #if ! (defined (DEBUG) || defined (_DEBUG) || defined (NDEBUG) || defined (_NDEBUG)) - #warning "Neither NDEBUG or DEBUG has been defined - you should set one of these to make it clear whether this is a release build," - #endif - - #ifdef __LITTLE_ENDIAN__ - #define JUCE_LITTLE_ENDIAN 1 - #else - #define JUCE_BIG_ENDIAN 1 - #endif -#endif - -#if JUCE_MAC - - #if defined (__ppc__) || defined (__ppc64__) - #define JUCE_PPC 1 - #else - #define JUCE_INTEL 1 - #endif - - #ifdef __LP64__ - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - - #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4 - #error "Building for OSX 10.3 is no longer supported!" - #endif - - #ifndef MAC_OS_X_VERSION_10_5 - #error "To build with 10.4 compatibility, use a 10.5 or 10.6 SDK and set the deployment target to 10.4" - #endif - -#endif - -#if JUCE_LINUX || JUCE_ANDROID - - #ifdef _DEBUG - #define JUCE_DEBUG 1 - #endif - - // Allow override for big-endian Linux platforms - #if defined (__LITTLE_ENDIAN__) || ! defined (JUCE_BIG_ENDIAN) - #define JUCE_LITTLE_ENDIAN 1 - #undef JUCE_BIG_ENDIAN - #else - #undef JUCE_LITTLE_ENDIAN - #define JUCE_BIG_ENDIAN 1 - #endif - - #if defined (__LP64__) || defined (_LP64) - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - - #if __MMX__ || __SSE__ || __amd64__ - #define JUCE_INTEL 1 - #endif -#endif - -// Compiler type macros. - -#ifdef __GNUC__ - #define JUCE_GCC 1 -#elif defined (_MSC_VER) - #define JUCE_MSVC 1 - - #if _MSC_VER < 1500 - #define JUCE_VC8_OR_EARLIER 1 - - #if _MSC_VER < 1400 - #define JUCE_VC7_OR_EARLIER 1 - - #if _MSC_VER < 1300 - #define JUCE_VC6 1 - #endif - #endif - #endif - - #if ! JUCE_VC7_OR_EARLIER - #define JUCE_USE_INTRINSICS 1 - #endif -#else - #error unknown compiler -#endif - -#endif // __JUCE_TARGETPLATFORM_JUCEHEADER__ - -/*** End of inlined file: juce_TargetPlatform.h ***/ - - // FORCE_AMALGAMATOR_INCLUDE - -/*** Start of inlined file: juce_Config.h ***/ -#ifndef __JUCE_CONFIG_JUCEHEADER__ -#define __JUCE_CONFIG_JUCEHEADER__ - -/* - This file contains macros that enable/disable various JUCE features. -*/ - -/** JUCE_FORCE_DEBUG: Normally, JUCE_DEBUG is set to 1 or 0 based on compiler and - project settings, but if you define this value, you can override this to force - it to be true or false. -*/ -#ifndef JUCE_FORCE_DEBUG - //#define JUCE_FORCE_DEBUG 0 -#endif - -/** JUCE_LOG_ASSERTIONS: If this flag is enabled, the the jassert and jassertfalse - macros will always use Logger::writeToLog() to write a message when an assertion happens. - - Enabling it will also leave this turned on in release builds. When it's disabled, - however, the jassert and jassertfalse macros will not be compiled in a - release build. - - @see jassert, jassertfalse, Logger -*/ -#ifndef JUCE_LOG_ASSERTIONS - #define JUCE_LOG_ASSERTIONS 0 -#endif - -/** JUCE_ASIO: Enables ASIO audio devices (MS Windows only). - Turning this on means that you'll need to have the Steinberg ASIO SDK installed - on your Windows build machine. - - See the comments in the ASIOAudioIODevice class's header file for more - info about this. -*/ -#ifndef JUCE_ASIO - #define JUCE_ASIO 0 -#endif - -/** JUCE_WASAPI: Enables WASAPI audio devices (Windows Vista and above). -*/ -#ifndef JUCE_WASAPI - #define JUCE_WASAPI 0 -#endif - -/** JUCE_DIRECTSOUND: Enables DirectSound audio (MS Windows only). -*/ -#ifndef JUCE_DIRECTSOUND - #define JUCE_DIRECTSOUND 1 -#endif - -/** JUCE_DIRECTSHOW: Enables DirectShow media-streaming architecture (MS Windows only). -*/ -#ifndef JUCE_DIRECTSHOW - #define JUCE_DIRECTSHOW 0 -#endif - -/** JUCE_MEDIAFOUNDATION: Enables Media Foundation multimedia platform (Windows Vista and above). -*/ -#ifndef JUCE_MEDIAFOUNDATION - #define JUCE_MEDIAFOUNDATION 0 -#endif - -#if ! JUCE_WINDOWS - #undef JUCE_DIRECTSHOW - #undef JUCE_MEDIAFOUNDATION -#endif - -/** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ -#ifndef JUCE_ALSA - #define JUCE_ALSA 1 -#endif - -/** JUCE_JACK: Enables JACK audio devices (Linux only). */ -#ifndef JUCE_JACK - #define JUCE_JACK 0 -#endif - -/** JUCE_QUICKTIME: Enables the QuickTimeMovieComponent class (Mac and Windows). - If you're building on Windows, you'll need to have the Apple QuickTime SDK - installed, and its header files will need to be on your include path. -*/ -#if ! (defined (JUCE_QUICKTIME) || JUCE_LINUX || JUCE_IOS || JUCE_ANDROID || (JUCE_WINDOWS && ! JUCE_MSVC)) - #define JUCE_QUICKTIME 0 -#endif - -#if (JUCE_IOS || JUCE_LINUX) && JUCE_QUICKTIME - #undef JUCE_QUICKTIME -#endif - -/** JUCE_OPENGL: Enables the OpenGLComponent class (available on all platforms). - If you're not using OpenGL, you might want to turn this off to reduce your binary's size. -*/ -#if ! (defined (JUCE_OPENGL) || JUCE_ANDROID) - #define JUCE_OPENGL 1 -#endif - -/** JUCE_DIRECT2D: Enables the Windows 7 Direct2D renderer. - If you're building on a platform older than Vista, you won't be able to compile with this feature. -*/ -#ifndef JUCE_DIRECT2D - #define JUCE_DIRECT2D 0 -#endif - -/** JUCE_USE_FLAC: Enables the FLAC audio codec classes (available on all platforms). - If your app doesn't need to read FLAC files, you might want to disable this to - reduce the size of your codebase and build time. -*/ -#ifndef JUCE_USE_FLAC - #define JUCE_USE_FLAC 1 -#endif - -/** JUCE_USE_OGGVORBIS: Enables the Ogg-Vorbis audio codec classes (available on all platforms). - If your app doesn't need to read Ogg-Vorbis files, you might want to disable this to - reduce the size of your codebase and build time. -*/ -#ifndef JUCE_USE_OGGVORBIS - #define JUCE_USE_OGGVORBIS 1 -#endif - -/** JUCE_USE_CDBURNER: Enables the audio CD reader code (Mac and Windows only). - Unless you're using CD-burning, you should probably turn this flag off to - reduce code size. -*/ -#if (! defined (JUCE_USE_CDBURNER)) && ! (JUCE_WINDOWS && ! JUCE_MSVC) - #define JUCE_USE_CDBURNER 1 -#endif - -/** JUCE_USE_CDREADER: Enables the audio CD reader code (Mac and Windows only). - Unless you're using CD-reading, you should probably turn this flag off to - reduce code size. -*/ -#ifndef JUCE_USE_CDREADER - #define JUCE_USE_CDREADER 1 -#endif - -/** JUCE_USE_CAMERA: Enables web-cam support using the CameraDevice class (Mac and Windows). -*/ -#if (JUCE_QUICKTIME || JUCE_WINDOWS) && ! defined (JUCE_USE_CAMERA) - #define JUCE_USE_CAMERA 0 -#endif - -/** JUCE_ENABLE_REPAINT_DEBUGGING: If this option is turned on, each area of the screen that - gets repainted will flash in a random colour, so that you can check exactly how much and how - often your components are being drawn. -*/ -#ifndef JUCE_ENABLE_REPAINT_DEBUGGING - #define JUCE_ENABLE_REPAINT_DEBUGGING 0 -#endif - -/** JUCE_USE_XINERAMA: Enables Xinerama multi-monitor support (Linux only). - Unless you specifically want to disable this, it's best to leave this option turned on. -*/ -#ifndef JUCE_USE_XINERAMA - #define JUCE_USE_XINERAMA 1 -#endif - -/** JUCE_USE_XSHM: Enables X shared memory for faster rendering on Linux. This is best left - turned on unless you have a good reason to disable it. -*/ -#ifndef JUCE_USE_XSHM - #define JUCE_USE_XSHM 1 -#endif - -/** JUCE_USE_XRENDER: Uses XRender to allow semi-transparent windowing on Linux. -*/ -#ifndef JUCE_USE_XRENDER - #define JUCE_USE_XRENDER 0 -#endif - -/** JUCE_USE_XCURSOR: Uses XCursor to allow ARGB cursor on Linux. This is best left turned on - unless you have a good reason to disable it. -*/ -#ifndef JUCE_USE_XCURSOR - #define JUCE_USE_XCURSOR 1 -#endif - -/** JUCE_PLUGINHOST_VST: Enables the VST audio plugin hosting classes. This requires the - Steinberg VST SDK to be installed on your machine, and should be left turned off unless - you're building a plugin hosting app. - - @see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU -*/ -#ifndef JUCE_PLUGINHOST_VST - #define JUCE_PLUGINHOST_VST 0 -#endif - -/** JUCE_PLUGINHOST_AU: Enables the AudioUnit plugin hosting classes. This is Mac-only, - of course, and should only be enabled if you're building a plugin hosting app. - - @see AudioUnitPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_VST -*/ -#ifndef JUCE_PLUGINHOST_AU - #define JUCE_PLUGINHOST_AU 0 -#endif - -/** JUCE_ONLY_BUILD_CORE_LIBRARY: Enabling this will avoid including any UI classes in the build. - This should be enabled if you're writing a console application. -*/ -#ifndef JUCE_ONLY_BUILD_CORE_LIBRARY - #define JUCE_ONLY_BUILD_CORE_LIBRARY 0 -#endif - -/** JUCE_WEB_BROWSER: This lets you disable the WebBrowserComponent class (Mac and Windows). - If you're not using any embedded web-pages, turning this off may reduce your code size. -*/ -#ifndef JUCE_WEB_BROWSER - #define JUCE_WEB_BROWSER 1 -#endif - -/** JUCE_SUPPORT_CARBON: Enabling this allows the Mac code to use old Carbon library functions. - - Carbon isn't required for a normal app, but may be needed by specialised classes like - plugin-hosts, which support older APIs. -*/ -#if ! (defined (JUCE_SUPPORT_CARBON) || defined (__LP64__)) - #define JUCE_SUPPORT_CARBON 1 -#endif - -/* JUCE_INCLUDE_ZLIB_CODE: Can be used to disable Juce's embedded 3rd-party zlib code. - You might need to tweak this if you're linking to an external zlib library in your app, - but for normal apps, this option should be left alone. -*/ -#ifndef JUCE_INCLUDE_ZLIB_CODE - #define JUCE_INCLUDE_ZLIB_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_FLAC_CODE - #define JUCE_INCLUDE_FLAC_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_OGGVORBIS_CODE - #define JUCE_INCLUDE_OGGVORBIS_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_PNGLIB_CODE - #define JUCE_INCLUDE_PNGLIB_CODE 1 -#endif - -#ifndef JUCE_INCLUDE_JPEGLIB_CODE - #define JUCE_INCLUDE_JPEGLIB_CODE 1 -#endif - -/** JUCE_CHECK_MEMORY_LEAKS: Enables a memory-leak check for certain objects when - the app terminates. See the LeakedObjectDetector class and the JUCE_LEAK_DETECTOR - macro for more details about enabling leak checking for specific classes. -*/ -#if JUCE_DEBUG && ! defined (JUCE_CHECK_MEMORY_LEAKS) - #define JUCE_CHECK_MEMORY_LEAKS 1 -#endif - -/** JUCE_CATCH_UNHANDLED_EXCEPTIONS: Turn on juce's internal catching of exceptions - that are thrown by the message dispatch loop. With it enabled, any unhandled exceptions - are passed to the JUCEApplication::unhandledException() callback for logging. -*/ -#ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS - #define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 -#endif - -// If only building the core classes, we can explicitly turn off some features to avoid including them: -#if JUCE_ONLY_BUILD_CORE_LIBRARY - #undef JUCE_QUICKTIME - #define JUCE_QUICKTIME 0 - #undef JUCE_OPENGL - #define JUCE_OPENGL 0 - #undef JUCE_USE_CDBURNER - #define JUCE_USE_CDBURNER 0 - #undef JUCE_USE_CDREADER - #define JUCE_USE_CDREADER 0 - #undef JUCE_WEB_BROWSER - #define JUCE_WEB_BROWSER 0 - #undef JUCE_PLUGINHOST_AU - #define JUCE_PLUGINHOST_AU 0 - #undef JUCE_PLUGINHOST_VST - #define JUCE_PLUGINHOST_VST 0 -#endif - -#endif - -/*** End of inlined file: juce_Config.h ***/ - - // FORCE_AMALGAMATOR_INCLUDE - -#ifndef JUCE_BUILD_CORE - #define JUCE_BUILD_CORE 1 -#endif -#ifndef JUCE_BUILD_MISC - #define JUCE_BUILD_MISC 1 -#endif -#ifndef JUCE_BUILD_GUI - #define JUCE_BUILD_GUI 1 -#endif -#ifndef JUCE_BUILD_NATIVE - #define JUCE_BUILD_NATIVE 1 -#endif - -#if JUCE_ONLY_BUILD_CORE_LIBRARY - #undef JUCE_BUILD_MISC - #undef JUCE_BUILD_GUI -#endif - -#ifndef JUCE_NAMESPACE - #define JUCE_NAMESPACE juce -#endif - -//============================================================================== -#if JUCE_BUILD_NATIVE || JUCE_BUILD_CORE || (JUCE_BUILD_MISC && (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_AU)) - #if JUCE_WINDOWS - -/*** Start of inlined file: juce_win32_NativeIncludes.h ***/ -#ifndef __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ -#define __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ - -#if JUCE_MSVC - #ifndef _CPPRTTI - #error "You're compiling without RTTI enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" - #endif - - #ifndef _CPPUNWIND - #error "You're compiling without exceptions enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" - #endif - - #pragma warning (push) - #pragma warning (disable : 4100 4201 4514 4312 4995) -#endif - -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0500 -#undef STRICT -#define STRICT 1 -#undef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#undef _UNICODE -#define _UNICODE 1 -#undef UNICODE -#define UNICODE 1 -#ifndef _WIN32_IE - #define _WIN32_IE 0x0400 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if ! JUCE_MINGW - #include - #include -#endif - -#if JUCE_OPENGL - #include -#endif - -#undef PACKED - -#if JUCE_ASIO && JUCE_BUILD_NATIVE - /* - This is very frustrating - we only need to use a handful of definitions from - a couple of the header files in Steinberg's ASIO SDK, and it'd be easy to copy - about 30 lines of code into this cpp file to create a fully stand-alone ASIO - implementation... - - ..unfortunately that would break Steinberg's license agreement for use of - their SDK, so I'm not allowed to do this. - - This means that anyone who wants to use JUCE's ASIO abilities will have to: - - 1) Agree to Steinberg's licensing terms and download the ASIO SDK - (see www.steinberg.net/Steinberg/Developers.asp). - - 2) Enable this code with a global definition #define JUCE_ASIO 1. - - 3) Make sure that your header search path contains the iasiodrv.h file that - comes with the SDK. (Only about a handful of the SDK header files are actually - needed - so to simplify things, you could just copy these into your JUCE directory). - */ - #include -#endif - -#if JUCE_USE_CDBURNER && JUCE_BUILD_NATIVE - - /* You'll need the Platform SDK for these headers - if you don't have it and don't - need to use CD-burning, then you might just want to disable the JUCE_USE_CDBURNER - flag in juce_Config.h to avoid these includes. - */ - #include - #include -#endif - -#if (JUCE_USE_CAMERA || JUCE_DIRECTSHOW) && JUCE_BUILD_NATIVE - - /* If you're using the camera classes, you'll need access to a few DirectShow headers. - - These files are provided in the normal Windows SDK, but some Microsoft plonker - didn't realise that qedit.h doesn't actually compile without the rest of the DirectShow SDK.. - Microsoft's suggested fix for this is to hack their qedit.h file! See: - http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/ed097d2c-3d68-4f48-8448-277eaaf68252 - .. which is a bit of a bodge, but a lot less hassle than installing the full DShow SDK. - - An alternative workaround is to create a dummy dxtrans.h file and put it in your include path. - The dummy file just needs to contain the following content: - #define __IDxtCompositor_INTERFACE_DEFINED__ - #define __IDxtAlphaSetter_INTERFACE_DEFINED__ - #define __IDxtJpeg_INTERFACE_DEFINED__ - #define __IDxtKey_INTERFACE_DEFINED__ - ..and that should be enough to convince qedit.h that you have the SDK! - */ - #include - #include - #include -#endif - -#if JUCE_DIRECTSHOW && JUCE_MEDIAFOUNDATION && JUCE_BUILD_NATIVE - #include -#endif - -#if JUCE_WASAPI && JUCE_BUILD_NATIVE - #include - #include - #include - #include - #include - #include -#endif - -#if JUCE_QUICKTIME - - /* If you've got an include error here, you probably need to install the QuickTime SDK and - add its header directory to your include path. - - Alternatively, if you don't need any QuickTime services, just turn off the JUCE_QUICKTIME - flag in juce_Config.h - */ - #include - #include - #include - #include - #include - - /* If you've got QuickTime 7 installed, then these COM objects should be found in - the "\Program Files\Quicktime" directory. You'll need to add this directory to - your include search path to make these import statements work. - */ - #import - #import -#endif - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -#if JUCE_DIRECT2D && JUCE_BUILD_NATIVE - #include - #include -#endif - -#ifndef WM_APPCOMMAND - #define WM_APPCOMMAND 0x0319 -#endif - - -/*** Start of inlined file: juce_win32_ComSmartPtr.h ***/ -#ifndef __JUCE_WIN32_COMSMARTPTR_JUCEHEADER__ -#define __JUCE_WIN32_COMSMARTPTR_JUCEHEADER__ - -/** A simple COM smart pointer. -*/ -template -class ComSmartPtr -{ -public: - ComSmartPtr() throw() : p (0) {} - ComSmartPtr (ComClass* const p_) : p (p_) { if (p_ != 0) p_->AddRef(); } - ComSmartPtr (const ComSmartPtr& p_) : p (p_.p) { if (p != 0) p->AddRef(); } - ~ComSmartPtr() { release(); } - - operator ComClass*() const throw() { return p; } - ComClass& operator*() const throw() { return *p; } - ComClass* operator->() const throw() { return p; } - - ComSmartPtr& operator= (ComClass* const newP) - { - if (newP != 0) newP->AddRef(); - release(); - p = newP; - return *this; - } - - ComSmartPtr& operator= (const ComSmartPtr& newP) { return operator= (newP.p); } - - // Releases and nullifies this pointer and returns its address - ComClass** resetAndGetPointerAddress() - { - release(); - p = 0; - return &p; - } - - HRESULT CoCreateInstance (REFCLSID classUUID, DWORD dwClsContext = CLSCTX_INPROC_SERVER) - { - #ifndef __MINGW32__ - return ::CoCreateInstance (classUUID, 0, dwClsContext, __uuidof (ComClass), (void**) resetAndGetPointerAddress()); - #else - return E_NOTIMPL; - #endif - } - - template - HRESULT QueryInterface (REFCLSID classUUID, ComSmartPtr& destObject) const - { - if (p == 0) - return E_POINTER; - - return p->QueryInterface (classUUID, (void**) destObject.resetAndGetPointerAddress()); - } - - template - HRESULT QueryInterface (ComSmartPtr& destObject) const - { - return this->QueryInterface (__uuidof (OtherComClass), destObject); - } - -private: - ComClass* p; - - void release() { if (p != 0) p->Release(); } - - ComClass** operator&() throw(); // private to avoid it being used accidentally -}; - -#define JUCE_COMRESULT HRESULT __stdcall - -/** Handy base class for writing COM objects, providing ref-counting and a basic QueryInterface method. -*/ -template -class ComBaseClassHelper : public ComClass -{ -public: - ComBaseClassHelper() : refCount (1) {} - virtual ~ComBaseClassHelper() {} - - JUCE_COMRESULT QueryInterface (REFIID refId, void** result) - { - #ifndef __MINGW32__ - if (refId == __uuidof (ComClass)) { AddRef(); *result = dynamic_cast (this); return S_OK; } - #endif - - if (refId == IID_IUnknown) { AddRef(); *result = dynamic_cast (this); return S_OK; } - - *result = 0; - return E_NOINTERFACE; - } - - ULONG __stdcall AddRef() { return ++refCount; } - ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; } - -protected: - int refCount; -}; - -#endif // __JUCE_WIN32_COMSMARTPTR_JUCEHEADER__ - -/*** End of inlined file: juce_win32_ComSmartPtr.h ***/ - -/* Used with DynamicLibrary to simplify importing functions - - functionName: function to import - localFunctionName: name you want to use to actually call it (must be different) - returnType: the return type - object: the DynamicLibrary to use - params: list of params (bracketed) -*/ -#define JUCE_DLL_FUNCTION(functionName, localFunctionName, returnType, object, params) \ - typedef returnType (WINAPI *type##localFunctionName) params; \ - type##localFunctionName localFunctionName \ - = (type##localFunctionName)object.getFunction (#functionName); - -#endif // __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__ - -/*** End of inlined file: juce_win32_NativeIncludes.h ***/ - - - #elif JUCE_LINUX - -/*** Start of inlined file: juce_linux_NativeIncludes.h ***/ -#ifndef __JUCE_LINUX_NATIVEINCLUDES_JUCEHEADER__ -#define __JUCE_LINUX_NATIVEINCLUDES_JUCEHEADER__ - -/* - This file wraps together all the linux-specific headers, so - that we can include them all just once, and compile all our - platform-specific stuff in one big lump, keeping it out of the - way of the rest of the codebase. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Got a build error here? You'll need to install the freetype library... - The name of the package to install is "libfreetype6-dev". -*/ -#include -#include FT_FREETYPE_H - -#include -#include -#include -#include -#include -#include -#include - -#if JUCE_USE_XINERAMA - /* If you're trying to use Xinerama, you'll need to install the "libxinerama-dev" package.. */ - #include -#endif - -#if JUCE_USE_XSHM - #include - #include - #include -#endif - -#if JUCE_USE_XRENDER - // If you're missing these headers, try installing the libxrender-dev and libxcomposite-dev - #include - #include -#endif - -#if JUCE_USE_XCURSOR - // If you're missing this header, try installing the libxcursor-dev package - #include -#endif - -#if JUCE_OPENGL - /* Got an include error here? - - If you want to install OpenGL support, the packages to get are "mesa-common-dev" - and "freeglut3-dev". - - Alternatively, you can turn off the JUCE_OPENGL flag in juce_Config.h if you - want to disable it. - */ - #include -#endif - -#undef KeyPress - -#if JUCE_ALSA - /* Got an include error here? If so, you've either not got ALSA installed, or you've - not got your paths set up correctly to find its header files. - - The package you need to install to get ASLA support is "libasound2-dev". - - If you don't have the ALSA library and don't want to build Juce with audio support, - just disable the JUCE_ALSA flag in juce_Config.h - */ - #include -#endif - -#if JUCE_JACK - /* Got an include error here? If so, you've either not got jack-audio-connection-kit - installed, or you've not got your paths set up correctly to find its header files. - - The package you need to install to get JACK support is "libjack-dev". - - If you don't have the jack-audio-connection-kit library and don't want to build - Juce with low latency audio support, just disable the JUCE_JACK flag in juce_Config.h - */ - #include - //#include -#endif - -#undef SIZEOF - -#endif // __JUCE_LINUX_NATIVEINCLUDES_JUCEHEADER__ - -/*** End of inlined file: juce_linux_NativeIncludes.h ***/ - - - #elif JUCE_MAC || JUCE_IOS - -/*** Start of inlined file: juce_mac_NativeIncludes.h ***/ -#ifndef __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ -#define __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ - -#define USE_COREGRAPHICS_RENDERING 1 - -#if JUCE_IOS - #import - #import - #import - #import - #import - #import - #import - #import - #include - #if JUCE_OPENGL - #include - #include - #endif -#else - #define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers) - #import - #import - #if JUCE_BUILD_NATIVE - #include - #import - #import - #import - #import - #import - #import - #import - #import - #import - #import - #endif - #if (JUCE_BUILD_MISC && (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_AU)) \ - || ! (defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6) - #include - #endif - #undef Point - #include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if MACOS_10_4_OR_EARLIER - #include -#endif - -#if ! CGFLOAT_DEFINED - #define CGFloat float -#endif - -#endif // __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__ - -/*** End of inlined file: juce_mac_NativeIncludes.h ***/ - - - #elif JUCE_ANDROID - -/*** Start of inlined file: juce_android_NativeIncludes.h ***/ -#ifndef __JUCE_ANDROID_NATIVEINCLUDES_JUCEHEADER__ -#define __JUCE_ANDROID_NATIVEINCLUDES_JUCEHEADER__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if JUCE_OPENGL - #include -#endif - -#endif // __JUCE_ANDROID_NATIVEINCLUDES_JUCEHEADER__ - -/*** End of inlined file: juce_android_NativeIncludes.h ***/ - - - #else - #error "Unknown platform!" - #endif -#endif - -//============================================================================== -#define DONT_SET_USING_JUCE_NAMESPACE 1 -#undef max -#undef min -#define NO_DUMMY_DECL - -#define JUCE_AMALGAMATED_TEMPLATE 1 - -#if JUCE_BUILD_NATIVE - #include "juce_amalgamated.h" // FORCE_AMALGAMATOR_INCLUDE -#endif - -#if (defined(_MSC_VER) && (_MSC_VER <= 1200)) - #pragma warning (disable: 4309 4305) -#endif - -#if JUCE_MAC && JUCE_32BIT && JUCE_SUPPORT_CARBON && JUCE_BUILD_NATIVE && ! JUCE_ONLY_BUILD_CORE_LIBRARY - BEGIN_JUCE_NAMESPACE - -/*** Start of inlined file: juce_mac_CarbonViewWrapperComponent.h ***/ -#ifndef __JUCE_MAC_CARBONVIEWWRAPPERCOMPONENT_JUCEHEADER__ -#define __JUCE_MAC_CARBONVIEWWRAPPERCOMPONENT_JUCEHEADER__ - -/** - Creates a floating carbon window that can be used to hold a carbon UI. - - This is a handy class that's designed to be inlined where needed, e.g. - in the audio plugin hosting code. -*/ -class CarbonViewWrapperComponent : public Component, - public ComponentMovementWatcher, - public Timer -{ -public: - CarbonViewWrapperComponent() - : ComponentMovementWatcher (this), - wrapperWindow (0), - carbonWindow (0), - embeddedView (0), - recursiveResize (false) - { - } - - virtual ~CarbonViewWrapperComponent() - { - jassert (embeddedView == 0); // must call deleteWindow() in the subclass's destructor! - } - - virtual HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) = 0; - virtual void removeView (HIViewRef embeddedView) = 0; - virtual void mouseDown (int, int) {} - virtual void paint() {} - - virtual bool getEmbeddedViewSize (int& w, int& h) - { - if (embeddedView == 0) - return false; - - HIRect bounds; - HIViewGetBounds (embeddedView, &bounds); - w = jmax (1, roundToInt (bounds.size.width)); - h = jmax (1, roundToInt (bounds.size.height)); - return true; - } - - void createWindow() - { - if (wrapperWindow == 0) - { - Rect r; - r.left = getScreenX(); - r.top = getScreenY(); - r.right = r.left + getWidth(); - r.bottom = r.top + getHeight(); - - CreateNewWindow (kDocumentWindowClass, - (WindowAttributes) (kWindowStandardHandlerAttribute | kWindowCompositingAttribute - | kWindowNoShadowAttribute | kWindowNoTitleBarAttribute), - &r, &wrapperWindow); - - jassert (wrapperWindow != 0); - if (wrapperWindow == 0) - return; - - carbonWindow = [[NSWindow alloc] initWithWindowRef: wrapperWindow]; - NSWindow* ownerWindow = [((NSView*) getWindowHandle()) window]; - - [ownerWindow addChildWindow: carbonWindow - ordered: NSWindowAbove]; - - embeddedView = attachView (wrapperWindow, HIViewGetRoot (wrapperWindow)); - - EventTypeSpec windowEventTypes[] = - { - { kEventClassWindow, kEventWindowGetClickActivation }, - { kEventClassWindow, kEventWindowHandleDeactivate }, - { kEventClassWindow, kEventWindowBoundsChanging }, - { kEventClassMouse, kEventMouseDown }, - { kEventClassMouse, kEventMouseMoved }, - { kEventClassMouse, kEventMouseDragged }, - { kEventClassMouse, kEventMouseUp}, - { kEventClassWindow, kEventWindowDrawContent }, - { kEventClassWindow, kEventWindowShown }, - { kEventClassWindow, kEventWindowHidden } - }; - - EventHandlerUPP upp = NewEventHandlerUPP (carbonEventCallback); - InstallWindowEventHandler (wrapperWindow, upp, - sizeof (windowEventTypes) / sizeof (EventTypeSpec), - windowEventTypes, this, &eventHandlerRef); - - setOurSizeToEmbeddedViewSize(); - setEmbeddedWindowToOurSize(); - - creationTime = Time::getCurrentTime(); - } - } - - void deleteWindow() - { - removeView (embeddedView); - embeddedView = 0; - - if (wrapperWindow != 0) - { - RemoveEventHandler (eventHandlerRef); - DisposeWindow (wrapperWindow); - wrapperWindow = 0; - } - } - - void setOurSizeToEmbeddedViewSize() - { - int w, h; - if (getEmbeddedViewSize (w, h)) - { - if (w != getWidth() || h != getHeight()) - { - startTimer (50); - - setSize (w, h); - if (getParentComponent() != nullptr) - getParentComponent()->setSize (w, h); - } - else - { - startTimer (jlimit (50, 500, getTimerInterval() + 20)); - } - } - else - { - stopTimer(); - } - } - - void setEmbeddedWindowToOurSize() - { - if (! recursiveResize) - { - recursiveResize = true; - - if (embeddedView != 0) - { - HIRect r; - r.origin.x = 0; - r.origin.y = 0; - r.size.width = (float) getWidth(); - r.size.height = (float) getHeight(); - HIViewSetFrame (embeddedView, &r); - } - - if (wrapperWindow != 0) - { - Rect wr; - wr.left = getScreenX(); - wr.top = getScreenY(); - wr.right = wr.left + getWidth(); - wr.bottom = wr.top + getHeight(); - - SetWindowBounds (wrapperWindow, kWindowContentRgn, &wr); - ShowWindow (wrapperWindow); - } - - recursiveResize = false; - } - } - - void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) - { - setEmbeddedWindowToOurSize(); - } - - void componentPeerChanged() - { - deleteWindow(); - createWindow(); - } - - void componentVisibilityChanged() - { - if (isShowing()) - createWindow(); - else - deleteWindow(); - - setEmbeddedWindowToOurSize(); - } - - static void recursiveHIViewRepaint (HIViewRef view) - { - HIViewSetNeedsDisplay (view, true); - HIViewRef child = HIViewGetFirstSubview (view); - - while (child != 0) - { - recursiveHIViewRepaint (child); - child = HIViewGetNextView (child); - } - } - - void timerCallback() - { - setOurSizeToEmbeddedViewSize(); - - // To avoid strange overpainting problems when the UI is first opened, we'll - // repaint it a few times during the first second that it's on-screen.. - if ((Time::getCurrentTime() - creationTime).inMilliseconds() < 1000) - recursiveHIViewRepaint (HIViewGetRoot (wrapperWindow)); - } - - OSStatus carbonEventHandler (EventHandlerCallRef /*nextHandlerRef*/, EventRef event) - { - switch (GetEventKind (event)) - { - case kEventWindowHandleDeactivate: - ActivateWindow (wrapperWindow, TRUE); - return noErr; - - case kEventWindowGetClickActivation: - { - getTopLevelComponent()->toFront (false); - [carbonWindow makeKeyAndOrderFront: nil]; - - ClickActivationResult howToHandleClick = kActivateAndHandleClick; - - SetEventParameter (event, kEventParamClickActivation, typeClickActivationResult, - sizeof (ClickActivationResult), &howToHandleClick); - - HIViewSetNeedsDisplay (embeddedView, true); - return noErr; - } - } - - return eventNotHandledErr; - } - - static pascal OSStatus carbonEventCallback (EventHandlerCallRef nextHandlerRef, EventRef event, void* userData) - { - return ((CarbonViewWrapperComponent*) userData)->carbonEventHandler (nextHandlerRef, event); - } - -protected: - WindowRef wrapperWindow; - NSWindow* carbonWindow; - HIViewRef embeddedView; - bool recursiveResize; - Time creationTime; - - EventHandlerRef eventHandlerRef; -}; - -#endif // __JUCE_MAC_CARBONVIEWWRAPPERCOMPONENT_JUCEHEADER__ - -/*** End of inlined file: juce_mac_CarbonViewWrapperComponent.h ***/ - - - END_JUCE_NAMESPACE -#endif - -//============================================================================== -#if JUCE_BUILD_CORE - -/*** Start of inlined file: juce_FileLogger.cpp ***/ -BEGIN_JUCE_NAMESPACE - -FileLogger::FileLogger (const File& logFile_, - const String& welcomeMessage, - const int maxInitialFileSizeBytes) - : logFile (logFile_) -{ - if (maxInitialFileSizeBytes >= 0) - trimFileSize (maxInitialFileSizeBytes); - - if (! logFile_.exists()) - { - // do this so that the parent directories get created.. - logFile_.create(); - } - - String welcome; - welcome << newLine - << "**********************************************************" << newLine - << welcomeMessage << newLine - << "Log started: " << Time::getCurrentTime().toString (true, true) << newLine; - - FileLogger::logMessage (welcome); -} - -FileLogger::~FileLogger() -{ -} - -void FileLogger::logMessage (const String& message) -{ - DBG (message); - - const ScopedLock sl (logLock); - - FileOutputStream out (logFile, 256); - out << message << newLine; -} - -void FileLogger::trimFileSize (int maxFileSizeBytes) const -{ - if (maxFileSizeBytes <= 0) - { - logFile.deleteFile(); - } - else - { - const int64 fileSize = logFile.getSize(); - - if (fileSize > maxFileSizeBytes) - { - ScopedPointer in (logFile.createInputStream()); - jassert (in != nullptr); - - if (in != nullptr) - { - in->setPosition (fileSize - maxFileSizeBytes); - String content; - - { - MemoryBlock contentToSave; - contentToSave.setSize (maxFileSizeBytes + 4); - contentToSave.fillWith (0); - - in->read (contentToSave.getData(), maxFileSizeBytes); - in = nullptr; - - content = contentToSave.toString(); - } - - int newStart = 0; - - while (newStart < fileSize - && content[newStart] != '\n' - && content[newStart] != '\r') - ++newStart; - - logFile.deleteFile(); - logFile.appendText (content.substring (newStart), false, false); - } - } - } -} - -FileLogger* FileLogger::createDefaultAppLogger (const String& logFileSubDirectoryName, - const String& logFileName, - const String& welcomeMessage, - const int maxInitialFileSizeBytes) -{ -#if JUCE_MAC - File logFile ("~/Library/Logs"); - logFile = logFile.getChildFile (logFileSubDirectoryName) - .getChildFile (logFileName); - -#else - File logFile (File::getSpecialLocation (File::userApplicationDataDirectory)); - - if (logFile.isDirectory()) - { - logFile = logFile.getChildFile (logFileSubDirectoryName) - .getChildFile (logFileName); - } -#endif - - return new FileLogger (logFile, welcomeMessage, maxInitialFileSizeBytes); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileLogger.cpp ***/ - - - -/*** Start of inlined file: juce_Logger.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Logger::Logger() -{ -} - -Logger::~Logger() -{ -} - -Logger* Logger::currentLogger = nullptr; - -void Logger::setCurrentLogger (Logger* const newLogger, - const bool deleteOldLogger) -{ - Logger* const oldLogger = currentLogger; - currentLogger = newLogger; - - if (deleteOldLogger) - delete oldLogger; -} - -void Logger::writeToLog (const String& message) -{ - if (currentLogger != nullptr) - currentLogger->logMessage (message); - else - outputDebugString (message); -} - -#if JUCE_LOG_ASSERTIONS -void JUCE_API juce_LogAssertion (const char* filename, const int lineNum) noexcept -{ - String m ("JUCE Assertion failure in "); - m << filename << ", line " << lineNum; - - Logger::writeToLog (m); -} -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Logger.cpp ***/ - - -/*** Start of inlined file: juce_Random.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Random::Random (const int64 seedValue) noexcept - : seed (seedValue) -{ -} - -Random::Random() - : seed (1) -{ - setSeedRandomly(); -} - -Random::~Random() noexcept -{ -} - -void Random::setSeed (const int64 newSeed) noexcept -{ - seed = newSeed; -} - -void Random::combineSeed (const int64 seedValue) noexcept -{ - seed ^= nextInt64() ^ seedValue; -} - -void Random::setSeedRandomly() -{ - static int64 globalSeed = 0; - - combineSeed (globalSeed ^ (int64) (pointer_sized_int) this); - combineSeed (Time::getMillisecondCounter()); - combineSeed (Time::getHighResolutionTicks()); - combineSeed (Time::getHighResolutionTicksPerSecond()); - combineSeed (Time::currentTimeMillis()); - globalSeed ^= seed; -} - -Random& Random::getSystemRandom() noexcept -{ - static Random sysRand; - return sysRand; -} - -int Random::nextInt() noexcept -{ - seed = (seed * literal64bit (0x5deece66d) + 11) & literal64bit (0xffffffffffff); - - return (int) (seed >> 16); -} - -int Random::nextInt (const int maxValue) noexcept -{ - jassert (maxValue > 0); - return (((unsigned int) nextInt()) * (uint64) maxValue) >> 32; -} - -int64 Random::nextInt64() noexcept -{ - return (((int64) nextInt()) << 32) | (int64) (uint64) (uint32) nextInt(); -} - -bool Random::nextBool() noexcept -{ - return (nextInt() & 0x80000000) != 0; -} - -float Random::nextFloat() noexcept -{ - return static_cast (nextInt()) / (float) 0xffffffff; -} - -double Random::nextDouble() noexcept -{ - return static_cast (nextInt()) / (double) 0xffffffff; -} - -BigInteger Random::nextLargeNumber (const BigInteger& maximumValue) -{ - BigInteger n; - - do - { - fillBitsRandomly (n, 0, maximumValue.getHighestBit() + 1); - } - while (n >= maximumValue); - - return n; -} - -void Random::fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits) -{ - arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space - - while ((startBit & 31) != 0 && numBits > 0) - { - arrayToChange.setBit (startBit++, nextBool()); - --numBits; - } - - while (numBits >= 32) - { - arrayToChange.setBitRangeAsInt (startBit, 32, (unsigned int) nextInt()); - startBit += 32; - numBits -= 32; - } - - while (--numBits >= 0) - arrayToChange.setBit (startBit + numBits, nextBool()); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Random.cpp ***/ - - -/*** Start of inlined file: juce_RelativeTime.cpp ***/ -BEGIN_JUCE_NAMESPACE - -RelativeTime::RelativeTime (const double seconds_) noexcept - : seconds (seconds_) -{ -} - -RelativeTime::RelativeTime (const RelativeTime& other) noexcept - : seconds (other.seconds) -{ -} - -RelativeTime::~RelativeTime() noexcept -{ -} - -const RelativeTime RelativeTime::milliseconds (const int milliseconds) noexcept { return RelativeTime (milliseconds * 0.001); } -const RelativeTime RelativeTime::milliseconds (const int64 milliseconds) noexcept { return RelativeTime (milliseconds * 0.001); } -const RelativeTime RelativeTime::minutes (const double numberOfMinutes) noexcept { return RelativeTime (numberOfMinutes * 60.0); } -const RelativeTime RelativeTime::hours (const double numberOfHours) noexcept { return RelativeTime (numberOfHours * (60.0 * 60.0)); } -const RelativeTime RelativeTime::days (const double numberOfDays) noexcept { return RelativeTime (numberOfDays * (60.0 * 60.0 * 24.0)); } -const RelativeTime RelativeTime::weeks (const double numberOfWeeks) noexcept { return RelativeTime (numberOfWeeks * (60.0 * 60.0 * 24.0 * 7.0)); } - -int64 RelativeTime::inMilliseconds() const noexcept { return (int64) (seconds * 1000.0); } -double RelativeTime::inMinutes() const noexcept { return seconds / 60.0; } -double RelativeTime::inHours() const noexcept { return seconds / (60.0 * 60.0); } -double RelativeTime::inDays() const noexcept { return seconds / (60.0 * 60.0 * 24.0); } -double RelativeTime::inWeeks() const noexcept { return seconds / (60.0 * 60.0 * 24.0 * 7.0); } - -String RelativeTime::getDescription (const String& returnValueForZeroTime) const -{ - if (seconds < 0.001 && seconds > -0.001) - return returnValueForZeroTime; - - String result; - result.preallocateBytes (32); - - if (seconds < 0) - result << '-'; - - int fieldsShown = 0; - int n = std::abs ((int) inWeeks()); - if (n > 0) - { - result << n << (n == 1 ? TRANS(" week ") - : TRANS(" weeks ")); - ++fieldsShown; - } - - n = std::abs ((int) inDays()) % 7; - if (n > 0) - { - result << n << (n == 1 ? TRANS(" day ") - : TRANS(" days ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = std::abs ((int) inHours()) % 24; - if (n > 0) - { - result << n << (n == 1 ? TRANS(" hr ") - : TRANS(" hrs ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = std::abs ((int) inMinutes()) % 60; - if (n > 0) - { - result << n << (n == 1 ? TRANS(" min ") - : TRANS(" mins ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = std::abs ((int) inSeconds()) % 60; - if (n > 0) - { - result << n << (n == 1 ? TRANS(" sec ") - : TRANS(" secs ")); - ++fieldsShown; - } - - if (fieldsShown == 0) - { - n = std::abs ((int) inMilliseconds()) % 1000; - if (n > 0) - result << n << TRANS(" ms"); - } - } - } - } - - return result.trimEnd(); -} - -RelativeTime& RelativeTime::operator= (const RelativeTime& other) noexcept -{ - seconds = other.seconds; - return *this; -} - -const RelativeTime& RelativeTime::operator+= (const RelativeTime& timeToAdd) noexcept -{ - seconds += timeToAdd.seconds; - return *this; -} - -const RelativeTime& RelativeTime::operator-= (const RelativeTime& timeToSubtract) noexcept -{ - seconds -= timeToSubtract.seconds; - return *this; -} - -const RelativeTime& RelativeTime::operator+= (const double secondsToAdd) noexcept -{ - seconds += secondsToAdd; - return *this; -} - -const RelativeTime& RelativeTime::operator-= (const double secondsToSubtract) noexcept -{ - seconds -= secondsToSubtract; - return *this; -} - -bool operator== (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() == t2.inSeconds(); } -bool operator!= (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() != t2.inSeconds(); } -bool operator> (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() > t2.inSeconds(); } -bool operator< (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() < t2.inSeconds(); } -bool operator>= (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() >= t2.inSeconds(); } -bool operator<= (const RelativeTime& t1, const RelativeTime& t2) noexcept { return t1.inSeconds() <= t2.inSeconds(); } - -RelativeTime operator+ (const RelativeTime& t1, const RelativeTime& t2) noexcept { RelativeTime t (t1); return t += t2; } -RelativeTime operator- (const RelativeTime& t1, const RelativeTime& t2) noexcept { RelativeTime t (t1); return t -= t2; } - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_RelativeTime.cpp ***/ - - -/*** Start of inlined file: juce_SystemStats.cpp ***/ -BEGIN_JUCE_NAMESPACE - -const SystemStats::CPUFlags& SystemStats::getCPUFlags() -{ - static CPUFlags cpuFlags; - return cpuFlags; -} - -String SystemStats::getJUCEVersion() -{ - // Some basic tests, to keep an eye on things and make sure these types work ok - // on all platforms. Let me know if any of these assertions fail on your system! - static_jassert (sizeof (pointer_sized_int) == sizeof (void*)); - static_jassert (sizeof (int8) == 1); - static_jassert (sizeof (uint8) == 1); - static_jassert (sizeof (int16) == 2); - static_jassert (sizeof (uint16) == 2); - static_jassert (sizeof (int32) == 4); - static_jassert (sizeof (uint32) == 4); - static_jassert (sizeof (int64) == 8); - static_jassert (sizeof (uint64) == 8); - - // (these confusing macros convert numbers into a single string literal) - #define JUCE_STRINGIFYVERSION2(a) #a - #define JUCE_STRINGIFYVERSION(a) JUCE_STRINGIFYVERSION2(a) - - return "JUCE v" JUCE_STRINGIFYVERSION(JUCE_MAJOR_VERSION) - "." JUCE_STRINGIFYVERSION(JUCE_MINOR_VERSION) - "." JUCE_STRINGIFYVERSION(JUCE_BUILDNUMBER); - - #undef JUCE_STRINGIFYVERSION - #undef JUCE_STRINGIFYVERSION2 -} - -#if JUCE_DEBUG && ! JUCE_ANDROID - struct JuceVersionPrinter - { - JuceVersionPrinter() - { - DBG (SystemStats::getJUCEVersion()); - } - }; - - static JuceVersionPrinter juceVersionPrinter; -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_SystemStats.cpp ***/ - - -/*** Start of inlined file: juce_Result.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Result::Result (const String& message) noexcept - : errorMessage (message) -{ -} - -Result::Result (const Result& other) - : errorMessage (other.errorMessage) -{ -} - -Result& Result::operator= (const Result& other) -{ - errorMessage = other.errorMessage; - return *this; -} - -bool Result::operator== (const Result& other) const noexcept -{ - return errorMessage == other.errorMessage; -} - -bool Result::operator!= (const Result& other) const noexcept -{ - return errorMessage != other.errorMessage; -} - -Result Result::ok() noexcept -{ - return Result (String::empty); -} - -Result Result::fail (const String& errorMessage) noexcept -{ - return Result (errorMessage.isEmpty() ? "Unknown Error" : errorMessage); -} - -const String& Result::getErrorMessage() const noexcept -{ - return errorMessage; -} - -bool Result::wasOk() const noexcept { return errorMessage.isEmpty(); } -Result::operator bool() const noexcept { return errorMessage.isEmpty(); } -bool Result::failed() const noexcept { return errorMessage.isNotEmpty(); } -bool Result::operator!() const noexcept { return errorMessage.isNotEmpty(); } - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Result.cpp ***/ - - -/*** Start of inlined file: juce_Time.cpp ***/ -#if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4514) -#endif - -#ifndef JUCE_WINDOWS - #include -#else - #include -#endif - -#include - -#if JUCE_MSVC - #pragma warning (pop) - - #ifdef _INC_TIME_INL - #define USE_NEW_SECURE_TIME_FNS - #endif -#endif - -BEGIN_JUCE_NAMESPACE - -namespace TimeHelpers -{ - struct tm millisToLocal (const int64 millis) noexcept - { - struct tm result; - const int64 seconds = millis / 1000; - - if (seconds < literal64bit (86400) || seconds >= literal64bit (2145916800)) - { - // use extended maths for dates beyond 1970 to 2037.. - const int timeZoneAdjustment = 31536000 - (int) (Time (1971, 0, 1, 0, 0).toMilliseconds() / 1000); - const int64 jdm = seconds + timeZoneAdjustment + literal64bit (210866803200); - - const int days = (int) (jdm / literal64bit (86400)); - const int a = 32044 + days; - const int b = (4 * a + 3) / 146097; - const int c = a - (b * 146097) / 4; - const int d = (4 * c + 3) / 1461; - const int e = c - (d * 1461) / 4; - const int m = (5 * e + 2) / 153; - - result.tm_mday = e - (153 * m + 2) / 5 + 1; - result.tm_mon = m + 2 - 12 * (m / 10); - result.tm_year = b * 100 + d - 6700 + (m / 10); - result.tm_wday = (days + 1) % 7; - result.tm_yday = -1; - - int t = (int) (jdm % literal64bit (86400)); - result.tm_hour = t / 3600; - t %= 3600; - result.tm_min = t / 60; - result.tm_sec = t % 60; - result.tm_isdst = -1; - } - else - { - time_t now = static_cast (seconds); - - #if JUCE_WINDOWS - #ifdef USE_NEW_SECURE_TIME_FNS - if (now >= 0 && now <= 0x793406fff) - localtime_s (&result, &now); - else - zerostruct (result); - #else - result = *localtime (&now); - #endif - #else - - localtime_r (&now, &result); // more thread-safe - #endif - } - - return result; - } - - int extendedModulo (const int64 value, const int modulo) noexcept - { - return (int) (value >= 0 ? (value % modulo) - : (value - ((value / modulo) + 1) * modulo)); - } - - int doFTime (CharPointer_UTF32 dest, const int maxChars, const String& format, const struct tm* const tm) noexcept - { - #if JUCE_ANDROID - HeapBlock tempDest; - tempDest.calloc (maxChars + 2); - const int result = (int) strftime (tempDest, maxChars, format.toUTF8(), tm); - if (result > 0) - dest.writeAll (CharPointer_UTF8 (tempDest.getData())); - return result; - #elif JUCE_WINDOWS - HeapBlock tempDest; - tempDest.calloc (maxChars + 2); - const int result = (int) wcsftime (tempDest, maxChars, format.toWideCharPointer(), tm); - if (result > 0) - dest.writeAll (CharPointer_UTF16 (tempDest.getData())); - return result; - #else - return (int) wcsftime (dest.getAddress(), maxChars, format.toUTF32(), tm); - #endif - } - - static uint32 lastMSCounterValue = 0; -} - -Time::Time() noexcept - : millisSinceEpoch (0) -{ -} - -Time::Time (const Time& other) noexcept - : millisSinceEpoch (other.millisSinceEpoch) -{ -} - -Time::Time (const int64 ms) noexcept - : millisSinceEpoch (ms) -{ -} - -Time::Time (const int year, - const int month, - const int day, - const int hours, - const int minutes, - const int seconds, - const int milliseconds, - const bool useLocalTime) noexcept -{ - jassert (year > 100); // year must be a 4-digit version - - if (year < 1971 || year >= 2038 || ! useLocalTime) - { - // use extended maths for dates beyond 1970 to 2037.. - const int timeZoneAdjustment = useLocalTime ? (31536000 - (int) (Time (1971, 0, 1, 0, 0).toMilliseconds() / 1000)) - : 0; - const int a = (13 - month) / 12; - const int y = year + 4800 - a; - const int jd = day + (153 * (month + 12 * a - 2) + 2) / 5 - + (y * 365) + (y / 4) - (y / 100) + (y / 400) - - 32045; - - const int64 s = ((int64) jd) * literal64bit (86400) - literal64bit (210866803200); - - millisSinceEpoch = 1000 * (s + (hours * 3600 + minutes * 60 + seconds - timeZoneAdjustment)) - + milliseconds; - } - else - { - struct tm t; - t.tm_year = year - 1900; - t.tm_mon = month; - t.tm_mday = day; - t.tm_hour = hours; - t.tm_min = minutes; - t.tm_sec = seconds; - t.tm_isdst = -1; - - millisSinceEpoch = 1000 * (int64) mktime (&t); - - if (millisSinceEpoch < 0) - millisSinceEpoch = 0; - else - millisSinceEpoch += milliseconds; - } -} - -Time::~Time() noexcept -{ -} - -Time& Time::operator= (const Time& other) noexcept -{ - millisSinceEpoch = other.millisSinceEpoch; - return *this; -} - -int64 Time::currentTimeMillis() noexcept -{ - static uint32 lastCounterResult = 0xffffffff; - static int64 correction = 0; - - const uint32 now = getMillisecondCounter(); - - // check the counter hasn't wrapped (also triggered the first time this function is called) - if (now < lastCounterResult) - { - // double-check it's actually wrapped, in case multi-cpu machines have timers that drift a bit. - if (lastCounterResult == 0xffffffff || now < lastCounterResult - 10) - { - // get the time once using normal library calls, and store the difference needed to - // turn the millisecond counter into a real time. - #if JUCE_WINDOWS - struct _timeb t; - #ifdef USE_NEW_SECURE_TIME_FNS - _ftime_s (&t); - #else - _ftime (&t); - #endif - correction = (((int64) t.time) * 1000 + t.millitm) - now; - #else - struct timeval tv; - struct timezone tz; - gettimeofday (&tv, &tz); - correction = (((int64) tv.tv_sec) * 1000 + tv.tv_usec / 1000) - now; - #endif - } - } - - lastCounterResult = now; - - return correction + now; -} - -uint32 juce_millisecondsSinceStartup() noexcept; - -uint32 Time::getMillisecondCounter() noexcept -{ - const uint32 now = juce_millisecondsSinceStartup(); - - if (now < TimeHelpers::lastMSCounterValue) - { - // in multi-threaded apps this might be called concurrently, so - // make sure that our last counter value only increases and doesn't - // go backwards.. - if (now < TimeHelpers::lastMSCounterValue - 1000) - TimeHelpers::lastMSCounterValue = now; - } - else - { - TimeHelpers::lastMSCounterValue = now; - } - - return now; -} - -uint32 Time::getApproximateMillisecondCounter() noexcept -{ - if (TimeHelpers::lastMSCounterValue == 0) - getMillisecondCounter(); - - return TimeHelpers::lastMSCounterValue; -} - -void Time::waitForMillisecondCounter (const uint32 targetTime) noexcept -{ - for (;;) - { - const uint32 now = getMillisecondCounter(); - - if (now >= targetTime) - break; - - const int toWait = targetTime - now; - - if (toWait > 2) - { - Thread::sleep (jmin (20, toWait >> 1)); - } - else - { - // xxx should consider using mutex_pause on the mac as it apparently - // makes it seem less like a spinlock and avoids lowering the thread pri. - for (int i = 10; --i >= 0;) - Thread::yield(); - } - } -} - -double Time::highResolutionTicksToSeconds (const int64 ticks) noexcept -{ - return ticks / (double) getHighResolutionTicksPerSecond(); -} - -int64 Time::secondsToHighResolutionTicks (const double seconds) noexcept -{ - return (int64) (seconds * (double) getHighResolutionTicksPerSecond()); -} - -Time JUCE_CALLTYPE Time::getCurrentTime() noexcept -{ - return Time (currentTimeMillis()); -} - -String Time::toString (const bool includeDate, - const bool includeTime, - const bool includeSeconds, - const bool use24HourClock) const noexcept -{ - String result; - - if (includeDate) - { - result << getDayOfMonth() << ' ' - << getMonthName (true) << ' ' - << getYear(); - - if (includeTime) - result << ' '; - } - - if (includeTime) - { - const int mins = getMinutes(); - - result << (use24HourClock ? getHours() : getHoursInAmPmFormat()) - << (mins < 10 ? ":0" : ":") << mins; - - if (includeSeconds) - { - const int secs = getSeconds(); - result << (secs < 10 ? ":0" : ":") << secs; - } - - if (! use24HourClock) - result << (isAfternoon() ? "pm" : "am"); - } - - return result.trimEnd(); -} - -String Time::formatted (const String& format) const -{ - int bufferSize = 128; - HeapBlock buffer (128); - - struct tm t (TimeHelpers::millisToLocal (millisSinceEpoch)); - - while (TimeHelpers::doFTime (CharPointer_UTF32 (buffer.getData()), bufferSize, format, &t) <= 0) - { - bufferSize += 128; - buffer.malloc (bufferSize); - } - - return CharPointer_UTF32 (buffer.getData()); -} - -int Time::getYear() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_year + 1900; } -int Time::getMonth() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_mon; } -int Time::getDayOfMonth() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_mday; } -int Time::getDayOfWeek() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_wday; } -int Time::getHours() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_hour; } -int Time::getMinutes() const noexcept { return TimeHelpers::millisToLocal (millisSinceEpoch).tm_min; } -int Time::getSeconds() const noexcept { return TimeHelpers::extendedModulo (millisSinceEpoch / 1000, 60); } -int Time::getMilliseconds() const noexcept { return TimeHelpers::extendedModulo (millisSinceEpoch, 1000); } - -int Time::getHoursInAmPmFormat() const noexcept -{ - const int hours = getHours(); - - if (hours == 0) - return 12; - else if (hours <= 12) - return hours; - else - return hours - 12; -} - -bool Time::isAfternoon() const noexcept -{ - return getHours() >= 12; -} - -bool Time::isDaylightSavingTime() const noexcept -{ - return TimeHelpers::millisToLocal (millisSinceEpoch).tm_isdst != 0; -} - -String Time::getTimeZone() const noexcept -{ - String zone[2]; - - #if JUCE_WINDOWS - _tzset(); - - #ifdef USE_NEW_SECURE_TIME_FNS - for (int i = 0; i < 2; ++i) - { - char name[128] = { 0 }; - size_t length; - _get_tzname (&length, name, 127, i); - zone[i] = name; - } - #else - const char** const zonePtr = (const char**) _tzname; - zone[0] = zonePtr[0]; - zone[1] = zonePtr[1]; - #endif - #else - tzset(); - const char** const zonePtr = (const char**) tzname; - zone[0] = zonePtr[0]; - zone[1] = zonePtr[1]; - #endif - - if (isDaylightSavingTime()) - { - zone[0] = zone[1]; - - if (zone[0].length() > 3 - && zone[0].containsIgnoreCase ("daylight") - && zone[0].contains ("GMT")) - zone[0] = "BST"; - } - - return zone[0].substring (0, 3); -} - -String Time::getMonthName (const bool threeLetterVersion) const -{ - return getMonthName (getMonth(), threeLetterVersion); -} - -String Time::getWeekdayName (const bool threeLetterVersion) const -{ - return getWeekdayName (getDayOfWeek(), threeLetterVersion); -} - -String Time::getMonthName (int monthNumber, const bool threeLetterVersion) -{ - const char* const shortMonthNames[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - const char* const longMonthNames[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; - - monthNumber %= 12; - - return TRANS (threeLetterVersion ? shortMonthNames [monthNumber] - : longMonthNames [monthNumber]); -} - -String Time::getWeekdayName (int day, const bool threeLetterVersion) -{ - const char* const shortDayNames[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - const char* const longDayNames[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; - - day %= 7; - - return TRANS (threeLetterVersion ? shortDayNames [day] - : longDayNames [day]); -} - -Time& Time::operator+= (const RelativeTime& delta) { millisSinceEpoch += delta.inMilliseconds(); return *this; } -Time& Time::operator-= (const RelativeTime& delta) { millisSinceEpoch -= delta.inMilliseconds(); return *this; } - -Time operator+ (const Time& time, const RelativeTime& delta) { Time t (time); return t += delta; } -Time operator- (const Time& time, const RelativeTime& delta) { Time t (time); return t -= delta; } -Time operator+ (const RelativeTime& delta, const Time& time) { Time t (time); return t += delta; } -const RelativeTime operator- (const Time& time1, const Time& time2) { return RelativeTime::milliseconds (time1.toMilliseconds() - time2.toMilliseconds()); } - -bool operator== (const Time& time1, const Time& time2) { return time1.toMilliseconds() == time2.toMilliseconds(); } -bool operator!= (const Time& time1, const Time& time2) { return time1.toMilliseconds() != time2.toMilliseconds(); } -bool operator< (const Time& time1, const Time& time2) { return time1.toMilliseconds() < time2.toMilliseconds(); } -bool operator> (const Time& time1, const Time& time2) { return time1.toMilliseconds() > time2.toMilliseconds(); } -bool operator<= (const Time& time1, const Time& time2) { return time1.toMilliseconds() <= time2.toMilliseconds(); } -bool operator>= (const Time& time1, const Time& time2) { return time1.toMilliseconds() >= time2.toMilliseconds(); } - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Time.cpp ***/ - - -/*** Start of inlined file: juce_AbstractFifo.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AbstractFifo::AbstractFifo (const int capacity) noexcept - : bufferSize (capacity) -{ - jassert (bufferSize > 0); -} - -AbstractFifo::~AbstractFifo() {} - -int AbstractFifo::getTotalSize() const noexcept { return bufferSize; } -int AbstractFifo::getFreeSpace() const noexcept { return bufferSize - getNumReady(); } - -int AbstractFifo::getNumReady() const noexcept -{ - const int vs = validStart.get(); - const int ve = validEnd.get(); - return ve >= vs ? (ve - vs) : (bufferSize - (vs - ve)); -} - -void AbstractFifo::reset() noexcept -{ - validEnd = 0; - validStart = 0; -} - -void AbstractFifo::setTotalSize (int newSize) noexcept -{ - jassert (newSize > 0); - reset(); - bufferSize = newSize; -} - -void AbstractFifo::prepareToWrite (int numToWrite, int& startIndex1, int& blockSize1, int& startIndex2, int& blockSize2) const noexcept -{ - const int vs = validStart.get(); - const int ve = validEnd.value; - - const int freeSpace = ve >= vs ? (bufferSize - (ve - vs)) : (vs - ve); - numToWrite = jmin (numToWrite, freeSpace - 1); - - if (numToWrite <= 0) - { - startIndex1 = 0; - startIndex2 = 0; - blockSize1 = 0; - blockSize2 = 0; - } - else - { - startIndex1 = ve; - startIndex2 = 0; - blockSize1 = jmin (bufferSize - ve, numToWrite); - numToWrite -= blockSize1; - blockSize2 = numToWrite <= 0 ? 0 : jmin (numToWrite, vs); - } -} - -void AbstractFifo::finishedWrite (int numWritten) noexcept -{ - jassert (numWritten >= 0 && numWritten < bufferSize); - int newEnd = validEnd.value + numWritten; - if (newEnd >= bufferSize) - newEnd -= bufferSize; - - validEnd = newEnd; -} - -void AbstractFifo::prepareToRead (int numWanted, int& startIndex1, int& blockSize1, int& startIndex2, int& blockSize2) const noexcept -{ - const int vs = validStart.value; - const int ve = validEnd.get(); - - const int numReady = ve >= vs ? (ve - vs) : (bufferSize - (vs - ve)); - numWanted = jmin (numWanted, numReady); - - if (numWanted <= 0) - { - startIndex1 = 0; - startIndex2 = 0; - blockSize1 = 0; - blockSize2 = 0; - } - else - { - startIndex1 = vs; - startIndex2 = 0; - blockSize1 = jmin (bufferSize - vs, numWanted); - numWanted -= blockSize1; - blockSize2 = numWanted <= 0 ? 0 : jmin (numWanted, ve); - } -} - -void AbstractFifo::finishedRead (int numRead) noexcept -{ - jassert (numRead >= 0 && numRead <= bufferSize); - - int newStart = validStart.value + numRead; - if (newStart >= bufferSize) - newStart -= bufferSize; - - validStart = newStart; -} - -#if JUCE_UNIT_TESTS - -class AbstractFifoTests : public UnitTest -{ -public: - AbstractFifoTests() : UnitTest ("Abstract Fifo") {} - - class WriteThread : public Thread - { - public: - WriteThread (AbstractFifo& fifo_, int* buffer_) - : Thread ("fifo writer"), fifo (fifo_), buffer (buffer_) - { - startThread(); - } - - ~WriteThread() - { - stopThread (5000); - } - - void run() - { - int n = 0; - Random r; - - while (! threadShouldExit()) - { - int num = r.nextInt (2000) + 1; - - int start1, size1, start2, size2; - fifo.prepareToWrite (num, start1, size1, start2, size2); - - jassert (size1 >= 0 && size2 >= 0); - jassert (size1 == 0 || (start1 >= 0 && start1 < fifo.getTotalSize())); - jassert (size2 == 0 || (start2 >= 0 && start2 < fifo.getTotalSize())); - - int i; - for (i = 0; i < size1; ++i) - buffer [start1 + i] = n++; - - for (i = 0; i < size2; ++i) - buffer [start2 + i] = n++; - - fifo.finishedWrite (size1 + size2); - } - } - - private: - AbstractFifo& fifo; - int* buffer; - }; - - void runTest() - { - beginTest ("AbstractFifo"); - - int buffer [5000]; - AbstractFifo fifo (numElementsInArray (buffer)); - - WriteThread writer (fifo, buffer); - - int n = 0; - Random r; - - for (int count = 1000000; --count >= 0;) - { - int num = r.nextInt (6000) + 1; - - int start1, size1, start2, size2; - fifo.prepareToRead (num, start1, size1, start2, size2); - - if (! (size1 >= 0 && size2 >= 0) - && (size1 == 0 || (start1 >= 0 && start1 < fifo.getTotalSize())) - && (size2 == 0 || (start2 >= 0 && start2 < fifo.getTotalSize()))) - { - expect (false, "prepareToRead returned -ve values"); - break; - } - - bool failed = false; - - int i; - for (i = 0; i < size1; ++i) - failed = (buffer [start1 + i] != n++) || failed; - - for (i = 0; i < size2; ++i) - failed = (buffer [start2 + i] != n++) || failed; - - if (failed) - { - expect (false, "read values were incorrect"); - break; - } - - fifo.finishedRead (size1 + size2); - } - } -}; - -static AbstractFifoTests fifoUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AbstractFifo.cpp ***/ - - -/*** Start of inlined file: juce_BigInteger.cpp ***/ -BEGIN_JUCE_NAMESPACE - -BigInteger::BigInteger() - : numValues (4), - highestBit (-1), - negative (false) -{ - values.calloc (numValues + 1); -} - -BigInteger::BigInteger (const int32 value) - : numValues (4), - highestBit (31), - negative (value < 0) -{ - values.calloc (numValues + 1); - values[0] = abs (value); - highestBit = getHighestBit(); -} - -BigInteger::BigInteger (const uint32 value) - : numValues (4), - highestBit (31), - negative (false) -{ - values.calloc (numValues + 1); - values[0] = value; - highestBit = getHighestBit(); -} - -BigInteger::BigInteger (int64 value) - : numValues (4), - highestBit (63), - negative (value < 0) -{ - values.calloc (numValues + 1); - - if (value < 0) - value = -value; - - values[0] = (uint32) value; - values[1] = (uint32) (value >> 32); - highestBit = getHighestBit(); -} - -BigInteger::BigInteger (const BigInteger& other) - : numValues (jmax (4, bitToIndex (other.highestBit) + 1)), - highestBit (other.getHighestBit()), - negative (other.negative) -{ - values.malloc (numValues + 1); - memcpy (values, other.values, sizeof (uint32) * (numValues + 1)); -} - -BigInteger::~BigInteger() -{ -} - -void BigInteger::swapWith (BigInteger& other) noexcept -{ - values.swapWith (other.values); - std::swap (numValues, other.numValues); - std::swap (highestBit, other.highestBit); - std::swap (negative, other.negative); -} - -BigInteger& BigInteger::operator= (const BigInteger& other) -{ - if (this != &other) - { - highestBit = other.getHighestBit(); - numValues = jmax (4, bitToIndex (highestBit) + 1); - negative = other.negative; - values.malloc (numValues + 1); - memcpy (values, other.values, sizeof (uint32) * (numValues + 1)); - } - - return *this; -} - -void BigInteger::ensureSize (const int numVals) -{ - if (numVals + 2 >= numValues) - { - int oldSize = numValues; - numValues = ((numVals + 2) * 3) / 2; - values.realloc (numValues + 1); - - while (oldSize < numValues) - values [oldSize++] = 0; - } -} - -bool BigInteger::operator[] (const int bit) const noexcept -{ - return bit <= highestBit && bit >= 0 - && ((values [bitToIndex (bit)] & bitToMask (bit)) != 0); -} - -int BigInteger::toInteger() const noexcept -{ - const int n = (int) (values[0] & 0x7fffffff); - return negative ? -n : n; -} - -BigInteger BigInteger::getBitRange (int startBit, int numBits) const -{ - BigInteger r; - numBits = jmin (numBits, getHighestBit() + 1 - startBit); - r.ensureSize (bitToIndex (numBits)); - r.highestBit = numBits; - - int i = 0; - while (numBits > 0) - { - r.values[i++] = getBitRangeAsInt (startBit, jmin (32, numBits)); - numBits -= 32; - startBit += 32; - } - - r.highestBit = r.getHighestBit(); - return r; -} - -int BigInteger::getBitRangeAsInt (const int startBit, int numBits) const noexcept -{ - if (numBits > 32) - { - jassertfalse; // use getBitRange() if you need more than 32 bits.. - numBits = 32; - } - - numBits = jmin (numBits, highestBit + 1 - startBit); - - if (numBits <= 0) - return 0; - - const int pos = bitToIndex (startBit); - const int offset = startBit & 31; - const int endSpace = 32 - numBits; - - uint32 n = ((uint32) values [pos]) >> offset; - - if (offset > endSpace) - n |= ((uint32) values [pos + 1]) << (32 - offset); - - return (int) (n & (((uint32) 0xffffffff) >> endSpace)); -} - -void BigInteger::setBitRangeAsInt (const int startBit, int numBits, uint32 valueToSet) -{ - if (numBits > 32) - { - jassertfalse; - numBits = 32; - } - - for (int i = 0; i < numBits; ++i) - { - setBit (startBit + i, (valueToSet & 1) != 0); - valueToSet >>= 1; - } -} - -void BigInteger::clear() -{ - if (numValues > 16) - { - numValues = 4; - values.calloc (numValues + 1); - } - else - { - values.clear (numValues + 1); - } - - highestBit = -1; - negative = false; -} - -void BigInteger::setBit (const int bit) -{ - if (bit >= 0) - { - if (bit > highestBit) - { - ensureSize (bitToIndex (bit)); - highestBit = bit; - } - - values [bitToIndex (bit)] |= bitToMask (bit); - } -} - -void BigInteger::setBit (const int bit, const bool shouldBeSet) -{ - if (shouldBeSet) - setBit (bit); - else - clearBit (bit); -} - -void BigInteger::clearBit (const int bit) noexcept -{ - if (bit >= 0 && bit <= highestBit) - values [bitToIndex (bit)] &= ~bitToMask (bit); -} - -void BigInteger::setRange (int startBit, int numBits, const bool shouldBeSet) -{ - while (--numBits >= 0) - setBit (startBit++, shouldBeSet); -} - -void BigInteger::insertBit (const int bit, const bool shouldBeSet) -{ - if (bit >= 0) - shiftBits (1, bit); - - setBit (bit, shouldBeSet); -} - -bool BigInteger::isZero() const noexcept -{ - return getHighestBit() < 0; -} - -bool BigInteger::isOne() const noexcept -{ - return getHighestBit() == 0 && ! negative; -} - -bool BigInteger::isNegative() const noexcept -{ - return negative && ! isZero(); -} - -void BigInteger::setNegative (const bool neg) noexcept -{ - negative = neg; -} - -void BigInteger::negate() noexcept -{ - negative = (! negative) && ! isZero(); -} - -#if JUCE_USE_INTRINSICS && ! defined (__INTEL_COMPILER) - #pragma intrinsic (_BitScanReverse) -#endif - -namespace BitFunctions -{ - inline int countBitsInInt32 (uint32 n) noexcept - { - n -= ((n >> 1) & 0x55555555); - n = (((n >> 2) & 0x33333333) + (n & 0x33333333)); - n = (((n >> 4) + n) & 0x0f0f0f0f); - n += (n >> 8); - n += (n >> 16); - return n & 0x3f; - } - - inline int highestBitInInt (uint32 n) noexcept - { - jassert (n != 0); // (the built-in functions may not work for n = 0) - - #if JUCE_GCC - return 31 - __builtin_clz (n); - #elif JUCE_USE_INTRINSICS - unsigned long highest; - _BitScanReverse (&highest, n); - return (int) highest; - #else - n |= (n >> 1); - n |= (n >> 2); - n |= (n >> 4); - n |= (n >> 8); - n |= (n >> 16); - return countBitsInInt32 (n >> 1); - #endif - } -} - -int BigInteger::countNumberOfSetBits() const noexcept -{ - int total = 0; - - for (int i = bitToIndex (highestBit) + 1; --i >= 0;) - total += BitFunctions::countBitsInInt32 (values[i]); - - return total; -} - -int BigInteger::getHighestBit() const noexcept -{ - for (int i = bitToIndex (highestBit + 1); i >= 0; --i) - { - const uint32 n = values[i]; - - if (n != 0) - return BitFunctions::highestBitInInt (n) + (i << 5); - } - - return -1; -} - -int BigInteger::findNextSetBit (int i) const noexcept -{ - for (; i <= highestBit; ++i) - if ((values [bitToIndex (i)] & bitToMask (i)) != 0) - return i; - - return -1; -} - -int BigInteger::findNextClearBit (int i) const noexcept -{ - for (; i <= highestBit; ++i) - if ((values [bitToIndex (i)] & bitToMask (i)) == 0) - break; - - return i; -} - -BigInteger& BigInteger::operator+= (const BigInteger& other) -{ - if (other.isNegative()) - return operator-= (-other); - - if (isNegative()) - { - if (compareAbsolute (other) < 0) - { - BigInteger temp (*this); - temp.negate(); - *this = other; - operator-= (temp); - } - else - { - negate(); - operator-= (other); - negate(); - } - } - else - { - if (other.highestBit > highestBit) - highestBit = other.highestBit; - - ++highestBit; - - const int numInts = bitToIndex (highestBit) + 1; - ensureSize (numInts); - - int64 remainder = 0; - - for (int i = 0; i <= numInts; ++i) - { - if (i < numValues) - remainder += values[i]; - - if (i < other.numValues) - remainder += other.values[i]; - - values[i] = (uint32) remainder; - remainder >>= 32; - } - - jassert (remainder == 0); - highestBit = getHighestBit(); - } - - return *this; -} - -BigInteger& BigInteger::operator-= (const BigInteger& other) -{ - if (other.isNegative()) - return operator+= (-other); - - if (! isNegative()) - { - if (compareAbsolute (other) < 0) - { - BigInteger temp (other); - swapWith (temp); - operator-= (temp); - negate(); - return *this; - } - } - else - { - negate(); - operator+= (other); - negate(); - return *this; - } - - const int numInts = bitToIndex (highestBit) + 1; - const int maxOtherInts = bitToIndex (other.highestBit) + 1; - int64 amountToSubtract = 0; - - for (int i = 0; i <= numInts; ++i) - { - if (i <= maxOtherInts) - amountToSubtract += (int64) other.values[i]; - - if (values[i] >= amountToSubtract) - { - values[i] = (uint32) (values[i] - amountToSubtract); - amountToSubtract = 0; - } - else - { - const int64 n = ((int64) values[i] + (((int64) 1) << 32)) - amountToSubtract; - values[i] = (uint32) n; - amountToSubtract = 1; - } - } - - return *this; -} - -BigInteger& BigInteger::operator*= (const BigInteger& other) -{ - BigInteger total; - highestBit = getHighestBit(); - const bool wasNegative = isNegative(); - setNegative (false); - - for (int i = 0; i <= highestBit; ++i) - { - if (operator[](i)) - { - BigInteger n (other); - n.setNegative (false); - n <<= i; - total += n; - } - } - - total.setNegative (wasNegative ^ other.isNegative()); - swapWith (total); - return *this; -} - -void BigInteger::divideBy (const BigInteger& divisor, BigInteger& remainder) -{ - jassert (this != &remainder); // (can't handle passing itself in to get the remainder) - - const int divHB = divisor.getHighestBit(); - const int ourHB = getHighestBit(); - - if (divHB < 0 || ourHB < 0) - { - // division by zero - remainder.clear(); - clear(); - } - else - { - const bool wasNegative = isNegative(); - - swapWith (remainder); - remainder.setNegative (false); - clear(); - - BigInteger temp (divisor); - temp.setNegative (false); - - int leftShift = ourHB - divHB; - temp <<= leftShift; - - while (leftShift >= 0) - { - if (remainder.compareAbsolute (temp) >= 0) - { - remainder -= temp; - setBit (leftShift); - } - - if (--leftShift >= 0) - temp >>= 1; - } - - negative = wasNegative ^ divisor.isNegative(); - remainder.setNegative (wasNegative); - } -} - -BigInteger& BigInteger::operator/= (const BigInteger& other) -{ - BigInteger remainder; - divideBy (other, remainder); - return *this; -} - -BigInteger& BigInteger::operator|= (const BigInteger& other) -{ - // this operation doesn't take into account negative values.. - jassert (isNegative() == other.isNegative()); - - if (other.highestBit >= 0) - { - ensureSize (bitToIndex (other.highestBit)); - - int n = bitToIndex (other.highestBit) + 1; - - while (--n >= 0) - values[n] |= other.values[n]; - - if (other.highestBit > highestBit) - highestBit = other.highestBit; - - highestBit = getHighestBit(); - } - - return *this; -} - -BigInteger& BigInteger::operator&= (const BigInteger& other) -{ - // this operation doesn't take into account negative values.. - jassert (isNegative() == other.isNegative()); - - int n = numValues; - - while (n > other.numValues) - values[--n] = 0; - - while (--n >= 0) - values[n] &= other.values[n]; - - if (other.highestBit < highestBit) - highestBit = other.highestBit; - - highestBit = getHighestBit(); - return *this; -} - -BigInteger& BigInteger::operator^= (const BigInteger& other) -{ - // this operation will only work with the absolute values - jassert (isNegative() == other.isNegative()); - - if (other.highestBit >= 0) - { - ensureSize (bitToIndex (other.highestBit)); - - int n = bitToIndex (other.highestBit) + 1; - - while (--n >= 0) - values[n] ^= other.values[n]; - - if (other.highestBit > highestBit) - highestBit = other.highestBit; - - highestBit = getHighestBit(); - } - - return *this; -} - -BigInteger& BigInteger::operator%= (const BigInteger& divisor) -{ - BigInteger remainder; - divideBy (divisor, remainder); - swapWith (remainder); - return *this; -} - -BigInteger& BigInteger::operator++() { return operator+= (1); } -BigInteger& BigInteger::operator--() { return operator-= (1); } -BigInteger BigInteger::operator++ (int) { const BigInteger old (*this); operator+= (1); return old; } -BigInteger BigInteger::operator-- (int) { const BigInteger old (*this); operator-= (1); return old; } - -BigInteger BigInteger::operator-() const { BigInteger b (*this); b.negate(); return b; } -BigInteger BigInteger::operator+ (const BigInteger& other) const { BigInteger b (*this); return b += other; } -BigInteger BigInteger::operator- (const BigInteger& other) const { BigInteger b (*this); return b -= other; } -BigInteger BigInteger::operator* (const BigInteger& other) const { BigInteger b (*this); return b *= other; } -BigInteger BigInteger::operator/ (const BigInteger& other) const { BigInteger b (*this); return b /= other; } -BigInteger BigInteger::operator| (const BigInteger& other) const { BigInteger b (*this); return b |= other; } -BigInteger BigInteger::operator& (const BigInteger& other) const { BigInteger b (*this); return b &= other; } -BigInteger BigInteger::operator^ (const BigInteger& other) const { BigInteger b (*this); return b ^= other; } -BigInteger BigInteger::operator% (const BigInteger& other) const { BigInteger b (*this); return b %= other; } -BigInteger BigInteger::operator<< (const int numBits) const { BigInteger b (*this); return b <<= numBits; } -BigInteger BigInteger::operator>> (const int numBits) const { BigInteger b (*this); return b >>= numBits; } -BigInteger& BigInteger::operator<<= (const int numBits) { shiftBits (numBits, 0); return *this; } -BigInteger& BigInteger::operator>>= (const int numBits) { shiftBits (-numBits, 0); return *this; } - -int BigInteger::compare (const BigInteger& other) const noexcept -{ - if (isNegative() == other.isNegative()) - { - const int absComp = compareAbsolute (other); - return isNegative() ? -absComp : absComp; - } - else - { - return isNegative() ? -1 : 1; - } -} - -int BigInteger::compareAbsolute (const BigInteger& other) const noexcept -{ - const int h1 = getHighestBit(); - const int h2 = other.getHighestBit(); - - if (h1 > h2) - return 1; - else if (h1 < h2) - return -1; - - for (int i = bitToIndex (h1) + 1; --i >= 0;) - if (values[i] != other.values[i]) - return (values[i] > other.values[i]) ? 1 : -1; - - return 0; -} - -bool BigInteger::operator== (const BigInteger& other) const noexcept { return compare (other) == 0; } -bool BigInteger::operator!= (const BigInteger& other) const noexcept { return compare (other) != 0; } -bool BigInteger::operator< (const BigInteger& other) const noexcept { return compare (other) < 0; } -bool BigInteger::operator<= (const BigInteger& other) const noexcept { return compare (other) <= 0; } -bool BigInteger::operator> (const BigInteger& other) const noexcept { return compare (other) > 0; } -bool BigInteger::operator>= (const BigInteger& other) const noexcept { return compare (other) >= 0; } - -void BigInteger::shiftLeft (int bits, const int startBit) -{ - if (startBit > 0) - { - for (int i = highestBit + 1; --i >= startBit;) - setBit (i + bits, operator[] (i)); - - while (--bits >= 0) - clearBit (bits + startBit); - } - else - { - ensureSize (bitToIndex (highestBit + bits) + 1); - - const int wordsToMove = bitToIndex (bits); - int top = 1 + bitToIndex (highestBit); - highestBit += bits; - - if (wordsToMove > 0) - { - int i; - for (i = top; --i >= 0;) - values [i + wordsToMove] = values [i]; - - for (i = 0; i < wordsToMove; ++i) - values [i] = 0; - - bits &= 31; - } - - if (bits != 0) - { - const int invBits = 32 - bits; - - for (int i = top + 1 + wordsToMove; --i > wordsToMove;) - values[i] = (values[i] << bits) | (values [i - 1] >> invBits); - - values [wordsToMove] = values [wordsToMove] << bits; - } - - highestBit = getHighestBit(); - } -} - -void BigInteger::shiftRight (int bits, const int startBit) -{ - if (startBit > 0) - { - for (int i = startBit; i <= highestBit; ++i) - setBit (i, operator[] (i + bits)); - - highestBit = getHighestBit(); - } - else - { - if (bits > highestBit) - { - clear(); - } - else - { - const int wordsToMove = bitToIndex (bits); - int top = 1 + bitToIndex (highestBit) - wordsToMove; - highestBit -= bits; - - if (wordsToMove > 0) - { - int i; - for (i = 0; i < top; ++i) - values [i] = values [i + wordsToMove]; - - for (i = 0; i < wordsToMove; ++i) - values [top + i] = 0; - - bits &= 31; - } - - if (bits != 0) - { - const int invBits = 32 - bits; - - --top; - for (int i = 0; i < top; ++i) - values[i] = (values[i] >> bits) | (values [i + 1] << invBits); - - values[top] = (values[top] >> bits); - } - - highestBit = getHighestBit(); - } - } -} - -void BigInteger::shiftBits (int bits, const int startBit) -{ - if (highestBit >= 0) - { - if (bits < 0) - shiftRight (-bits, startBit); - else if (bits > 0) - shiftLeft (bits, startBit); - } -} - -BigInteger BigInteger::simpleGCD (BigInteger* m, BigInteger* n) -{ - while (! m->isZero()) - { - if (n->compareAbsolute (*m) > 0) - std::swap (m, n); - - *m -= *n; - } - - return *n; -} - -BigInteger BigInteger::findGreatestCommonDivisor (BigInteger n) const -{ - BigInteger m (*this); - - while (! n.isZero()) - { - if (abs (m.getHighestBit() - n.getHighestBit()) <= 16) - return simpleGCD (&m, &n); - - BigInteger temp1 (m), temp2; - temp1.divideBy (n, temp2); - - m = n; - n = temp2; - } - - return m; -} - -void BigInteger::exponentModulo (const BigInteger& exponent, const BigInteger& modulus) -{ - BigInteger exp (exponent); - exp %= modulus; - - BigInteger value (1); - swapWith (value); - value %= modulus; - - while (! exp.isZero()) - { - if (exp [0]) - { - operator*= (value); - operator%= (modulus); - } - - value *= value; - value %= modulus; - exp >>= 1; - } -} - -void BigInteger::inverseModulo (const BigInteger& modulus) -{ - if (modulus.isOne() || modulus.isNegative()) - { - clear(); - return; - } - - if (isNegative() || compareAbsolute (modulus) >= 0) - operator%= (modulus); - - if (isOne()) - return; - - if (! (*this)[0]) - { - // not invertible - clear(); - return; - } - - BigInteger a1 (modulus); - BigInteger a2 (*this); - BigInteger b1 (modulus); - BigInteger b2 (1); - - while (! a2.isOne()) - { - BigInteger temp1, temp2, multiplier (a1); - multiplier.divideBy (a2, temp1); - - temp1 = a2; - temp1 *= multiplier; - temp2 = a1; - temp2 -= temp1; - a1 = a2; - a2 = temp2; - - temp1 = b2; - temp1 *= multiplier; - temp2 = b1; - temp2 -= temp1; - b1 = b2; - b2 = temp2; - } - - while (b2.isNegative()) - b2 += modulus; - - b2 %= modulus; - swapWith (b2); -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const BigInteger& value) -{ - return stream << value.toString (10); -} - -String BigInteger::toString (const int base, const int minimumNumCharacters) const -{ - String s; - BigInteger v (*this); - - if (base == 2 || base == 8 || base == 16) - { - const int bits = (base == 2) ? 1 : (base == 8 ? 3 : 4); - static const char* const hexDigits = "0123456789abcdef"; - - for (;;) - { - const int remainder = v.getBitRangeAsInt (0, bits); - - v >>= bits; - - if (remainder == 0 && v.isZero()) - break; - - s = String::charToString (hexDigits [remainder]) + s; - } - } - else if (base == 10) - { - const BigInteger ten (10); - BigInteger remainder; - - for (;;) - { - v.divideBy (ten, remainder); - - if (remainder.isZero() && v.isZero()) - break; - - s = String (remainder.getBitRangeAsInt (0, 8)) + s; - } - } - else - { - jassertfalse; // can't do the specified base! - return String::empty; - } - - s = s.paddedLeft ('0', minimumNumCharacters); - - return isNegative() ? "-" + s : s; -} - -void BigInteger::parseString (const String& text, const int base) -{ - clear(); - String::CharPointerType t (text.getCharPointer()); - - if (base == 2 || base == 8 || base == 16) - { - const int bits = (base == 2) ? 1 : (base == 8 ? 3 : 4); - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - const int digit = CharacterFunctions::getHexDigitValue (c); - - if (((uint32) digit) < (uint32) base) - { - operator<<= (bits); - operator+= (digit); - } - else if (c == 0) - { - break; - } - } - } - else if (base == 10) - { - const BigInteger ten ((uint32) 10); - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - - if (c >= '0' && c <= '9') - { - operator*= (ten); - operator+= ((int) (c - '0')); - } - else if (c == 0) - { - break; - } - } - } - - setNegative (text.trimStart().startsWithChar ('-')); -} - -MemoryBlock BigInteger::toMemoryBlock() const -{ - const int numBytes = (getHighestBit() + 8) >> 3; - MemoryBlock mb ((size_t) numBytes); - - for (int i = 0; i < numBytes; ++i) - mb[i] = (uint8) getBitRangeAsInt (i << 3, 8); - - return mb; -} - -void BigInteger::loadFromMemoryBlock (const MemoryBlock& data) -{ - clear(); - - for (int i = (int) data.getSize(); --i >= 0;) - this->setBitRangeAsInt ((int) (i << 3), 8, data [i]); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_BigInteger.cpp ***/ - - -/*** Start of inlined file: juce_MemoryBlock.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MemoryBlock::MemoryBlock() noexcept - : size (0) -{ -} - -MemoryBlock::MemoryBlock (const size_t initialSize, const bool initialiseToZero) -{ - if (initialSize > 0) - { - size = initialSize; - data.allocate (initialSize, initialiseToZero); - } - else - { - size = 0; - } -} - -MemoryBlock::MemoryBlock (const MemoryBlock& other) - : size (other.size) -{ - if (size > 0) - { - jassert (other.data != nullptr); - data.malloc (size); - memcpy (data, other.data, size); - } -} - -MemoryBlock::MemoryBlock (const void* const dataToInitialiseFrom, const size_t sizeInBytes) - : size (jmax ((size_t) 0, sizeInBytes)) -{ - jassert (sizeInBytes >= 0); - - if (size > 0) - { - jassert (dataToInitialiseFrom != nullptr); // non-zero size, but a zero pointer passed-in? - - data.malloc (size); - - if (dataToInitialiseFrom != nullptr) - memcpy (data, dataToInitialiseFrom, size); - } -} - -MemoryBlock::~MemoryBlock() noexcept -{ - jassert (size >= 0); // should never happen - jassert (size == 0 || data != nullptr); // non-zero size but no data allocated? -} - -MemoryBlock& MemoryBlock::operator= (const MemoryBlock& other) -{ - if (this != &other) - { - setSize (other.size, false); - memcpy (data, other.data, size); - } - - return *this; -} - -bool MemoryBlock::operator== (const MemoryBlock& other) const noexcept -{ - return matches (other.data, other.size); -} - -bool MemoryBlock::operator!= (const MemoryBlock& other) const noexcept -{ - return ! operator== (other); -} - -bool MemoryBlock::matches (const void* dataToCompare, size_t dataSize) const noexcept -{ - return size == dataSize - && memcmp (data, dataToCompare, size) == 0; -} - -// this will resize the block to this size -void MemoryBlock::setSize (const size_t newSize, const bool initialiseToZero) -{ - if (size != newSize) - { - if (newSize <= 0) - { - data.free(); - size = 0; - } - else - { - if (data != nullptr) - { - data.realloc (newSize); - - if (initialiseToZero && (newSize > size)) - zeromem (data + size, newSize - size); - } - else - { - data.allocate (newSize, initialiseToZero); - } - - size = newSize; - } - } -} - -void MemoryBlock::ensureSize (const size_t minimumSize, const bool initialiseToZero) -{ - if (size < minimumSize) - setSize (minimumSize, initialiseToZero); -} - -void MemoryBlock::swapWith (MemoryBlock& other) noexcept -{ - std::swap (size, other.size); - data.swapWith (other.data); -} - -void MemoryBlock::fillWith (const uint8 value) noexcept -{ - memset (data, (int) value, size); -} - -void MemoryBlock::append (const void* const srcData, const size_t numBytes) -{ - if (numBytes > 0) - { - const size_t oldSize = size; - setSize (size + numBytes); - memcpy (data + oldSize, srcData, numBytes); - } -} - -void MemoryBlock::copyFrom (const void* const src, int offset, size_t num) noexcept -{ - const char* d = static_cast (src); - - if (offset < 0) - { - d -= offset; - num -= offset; - offset = 0; - } - - if (offset + num > size) - num = size - offset; - - if (num > 0) - memcpy (data + offset, d, num); -} - -void MemoryBlock::copyTo (void* const dst, int offset, size_t num) const noexcept -{ - char* d = static_cast (dst); - - if (offset < 0) - { - zeromem (d, -offset); - d -= offset; - - num += offset; - offset = 0; - } - - if (offset + num > size) - { - const size_t newNum = size - offset; - zeromem (d + newNum, num - newNum); - num = newNum; - } - - if (num > 0) - memcpy (d, data + offset, num); -} - -void MemoryBlock::removeSection (size_t startByte, size_t numBytesToRemove) -{ - if (startByte + numBytesToRemove >= size) - { - setSize (startByte); - } - else if (numBytesToRemove > 0) - { - memmove (data + startByte, - data + startByte + numBytesToRemove, - size - (startByte + numBytesToRemove)); - - setSize (size - numBytesToRemove); - } -} - -String MemoryBlock::toString() const -{ - return String (CharPointer_UTF8 (data), size); -} - -int MemoryBlock::getBitRange (const size_t bitRangeStart, size_t numBits) const noexcept -{ - int res = 0; - - size_t byte = bitRangeStart >> 3; - int offsetInByte = (int) bitRangeStart & 7; - size_t bitsSoFar = 0; - - while (numBits > 0 && (size_t) byte < size) - { - const int bitsThisTime = jmin ((int) numBits, 8 - offsetInByte); - const int mask = (0xff >> (8 - bitsThisTime)) << offsetInByte; - - res |= (((data[byte] & mask) >> offsetInByte) << bitsSoFar); - - bitsSoFar += bitsThisTime; - numBits -= bitsThisTime; - ++byte; - offsetInByte = 0; - } - - return res; -} - -void MemoryBlock::setBitRange (const size_t bitRangeStart, size_t numBits, int bitsToSet) noexcept -{ - size_t byte = bitRangeStart >> 3; - int offsetInByte = (int) bitRangeStart & 7; - unsigned int mask = ~((((unsigned int) 0xffffffff) << (32 - numBits)) >> (32 - numBits)); - - while (numBits > 0 && (size_t) byte < size) - { - const int bitsThisTime = jmin ((int) numBits, 8 - offsetInByte); - - const unsigned int tempMask = (mask << offsetInByte) | ~((((unsigned int) 0xffffffff) >> offsetInByte) << offsetInByte); - const unsigned int tempBits = bitsToSet << offsetInByte; - - data[byte] = (char) ((data[byte] & tempMask) | tempBits); - - ++byte; - numBits -= bitsThisTime; - bitsToSet >>= bitsThisTime; - mask >>= bitsThisTime; - offsetInByte = 0; - } -} - -void MemoryBlock::loadFromHexString (const String& hex) -{ - ensureSize (hex.length() >> 1); - char* dest = data; - String::CharPointerType t (hex.getCharPointer()); - - for (;;) - { - int byte = 0; - - for (int loop = 2; --loop >= 0;) - { - byte <<= 4; - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - - if (c >= '0' && c <= '9') - { - byte |= c - '0'; - break; - } - else if (c >= 'a' && c <= 'z') - { - byte |= c - ('a' - 10); - break; - } - else if (c >= 'A' && c <= 'Z') - { - byte |= c - ('A' - 10); - break; - } - else if (c == 0) - { - setSize (static_cast (dest - data)); - return; - } - } - } - - *dest++ = (char) byte; - } -} - -const char* const MemoryBlock::encodingTable = ".ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+"; - -String MemoryBlock::toBase64Encoding() const -{ - const size_t numChars = ((size << 3) + 5) / 6; - - String destString ((unsigned int) size); // store the length, followed by a '.', and then the data. - const int initialLen = destString.length(); - destString.preallocateBytes (sizeof (String::CharPointerType::CharType) * (initialLen + 2 + numChars)); - - String::CharPointerType d (destString.getCharPointer()); - d += initialLen; - d.write ('.'); - - for (size_t i = 0; i < numChars; ++i) - d.write (encodingTable [getBitRange (i * 6, 6)]); - - d.writeNull(); - return destString; -} - -bool MemoryBlock::fromBase64Encoding (const String& s) -{ - const int startPos = s.indexOfChar ('.') + 1; - - if (startPos <= 0) - return false; - - const int numBytesNeeded = s.substring (0, startPos - 1).getIntValue(); - - setSize (numBytesNeeded, true); - - const int numChars = s.length() - startPos; - - String::CharPointerType srcChars (s.getCharPointer()); - srcChars += startPos; - int pos = 0; - - for (int i = 0; i < numChars; ++i) - { - const char c = (char) srcChars.getAndAdvance(); - - for (int j = 0; j < 64; ++j) - { - if (encodingTable[j] == c) - { - setBitRange (pos, 6, j); - pos += 6; - break; - } - } - } - - return true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MemoryBlock.cpp ***/ - - -/*** Start of inlined file: juce_PropertySet.cpp ***/ -BEGIN_JUCE_NAMESPACE - -PropertySet::PropertySet (const bool ignoreCaseOfKeyNames) - : properties (ignoreCaseOfKeyNames), - fallbackProperties (nullptr), - ignoreCaseOfKeys (ignoreCaseOfKeyNames) -{ -} - -PropertySet::PropertySet (const PropertySet& other) - : properties (other.properties), - fallbackProperties (other.fallbackProperties), - ignoreCaseOfKeys (other.ignoreCaseOfKeys) -{ -} - -PropertySet& PropertySet::operator= (const PropertySet& other) -{ - properties = other.properties; - fallbackProperties = other.fallbackProperties; - ignoreCaseOfKeys = other.ignoreCaseOfKeys; - - propertyChanged(); - return *this; -} - -PropertySet::~PropertySet() -{ -} - -void PropertySet::clear() -{ - const ScopedLock sl (lock); - - if (properties.size() > 0) - { - properties.clear(); - propertyChanged(); - } -} - -String PropertySet::getValue (const String& keyName, - const String& defaultValue) const noexcept -{ - const ScopedLock sl (lock); - - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index >= 0) - return properties.getAllValues() [index]; - - return fallbackProperties != nullptr ? fallbackProperties->getValue (keyName, defaultValue) - : defaultValue; -} - -int PropertySet::getIntValue (const String& keyName, - const int defaultValue) const noexcept -{ - const ScopedLock sl (lock); - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index >= 0) - return properties.getAllValues() [index].getIntValue(); - - return fallbackProperties != nullptr ? fallbackProperties->getIntValue (keyName, defaultValue) - : defaultValue; -} - -double PropertySet::getDoubleValue (const String& keyName, - const double defaultValue) const noexcept -{ - const ScopedLock sl (lock); - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index >= 0) - return properties.getAllValues()[index].getDoubleValue(); - - return fallbackProperties != nullptr ? fallbackProperties->getDoubleValue (keyName, defaultValue) - : defaultValue; -} - -bool PropertySet::getBoolValue (const String& keyName, - const bool defaultValue) const noexcept -{ - const ScopedLock sl (lock); - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index >= 0) - return properties.getAllValues() [index].getIntValue() != 0; - - return fallbackProperties != nullptr ? fallbackProperties->getBoolValue (keyName, defaultValue) - : defaultValue; -} - -XmlElement* PropertySet::getXmlValue (const String& keyName) const -{ - return XmlDocument::parse (getValue (keyName)); -} - -void PropertySet::setValue (const String& keyName, const var& v) -{ - jassert (keyName.isNotEmpty()); // shouldn't use an empty key name! - - if (keyName.isNotEmpty()) - { - const String value (v.toString()); - const ScopedLock sl (lock); - - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index < 0 || properties.getAllValues() [index] != value) - { - properties.set (keyName, value); - propertyChanged(); - } - } -} - -void PropertySet::removeValue (const String& keyName) -{ - if (keyName.isNotEmpty()) - { - const ScopedLock sl (lock); - const int index = properties.getAllKeys().indexOf (keyName, ignoreCaseOfKeys); - - if (index >= 0) - { - properties.remove (keyName); - propertyChanged(); - } - } -} - -void PropertySet::setValue (const String& keyName, const XmlElement* const xml) -{ - setValue (keyName, xml == nullptr ? var::null - : var (xml->createDocument (String::empty, true))); -} - -bool PropertySet::containsKey (const String& keyName) const noexcept -{ - const ScopedLock sl (lock); - return properties.getAllKeys().contains (keyName, ignoreCaseOfKeys); -} - -void PropertySet::addAllPropertiesFrom (const PropertySet& source) -{ - const ScopedLock sl (source.getLock()); - - for (int i = 0; i < source.properties.size(); ++i) - setValue (source.properties.getAllKeys() [i], - source.properties.getAllValues() [i]); -} - -void PropertySet::setFallbackPropertySet (PropertySet* fallbackProperties_) noexcept -{ - const ScopedLock sl (lock); - fallbackProperties = fallbackProperties_; -} - -XmlElement* PropertySet::createXml (const String& nodeName) const -{ - const ScopedLock sl (lock); - XmlElement* const xml = new XmlElement (nodeName); - - for (int i = 0; i < properties.getAllKeys().size(); ++i) - { - XmlElement* const e = xml->createNewChildElement ("VALUE"); - e->setAttribute ("name", properties.getAllKeys()[i]); - e->setAttribute ("val", properties.getAllValues()[i]); - } - - return xml; -} - -void PropertySet::restoreFromXml (const XmlElement& xml) -{ - const ScopedLock sl (lock); - clear(); - - forEachXmlChildElementWithTagName (xml, e, "VALUE") - { - if (e->hasAttribute ("name") - && e->hasAttribute ("val")) - { - properties.set (e->getStringAttribute ("name"), - e->getStringAttribute ("val")); - } - } - - if (properties.size() > 0) - propertyChanged(); -} - -void PropertySet::propertyChanged() -{ -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PropertySet.cpp ***/ - - -/*** Start of inlined file: juce_Identifier.cpp ***/ -BEGIN_JUCE_NAMESPACE - -StringPool& Identifier::getPool() -{ - static StringPool pool; - return pool; -} - -Identifier::Identifier() noexcept - : name (nullptr) -{ -} - -Identifier::Identifier (const Identifier& other) noexcept - : name (other.name) -{ -} - -Identifier& Identifier::operator= (const Identifier& other) noexcept -{ - name = other.name; - return *this; -} - -Identifier::Identifier (const String& name_) - : name (Identifier::getPool().getPooledString (name_)) -{ - /* An Identifier string must be suitable for use as a script variable or XML - attribute, so it can only contain this limited set of characters.. */ - jassert (isValidIdentifier (name_)); -} - -Identifier::Identifier (const char* const name_) - : name (Identifier::getPool().getPooledString (name_)) -{ - /* An Identifier string must be suitable for use as a script variable or XML - attribute, so it can only contain this limited set of characters.. */ - jassert (isValidIdentifier (toString())); -} - -Identifier::~Identifier() -{ -} - -bool Identifier::isValidIdentifier (const String& possibleIdentifier) noexcept -{ - return possibleIdentifier.isNotEmpty() - && possibleIdentifier.containsOnly ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-:"); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Identifier.cpp ***/ - - -/*** Start of inlined file: juce_Variant.cpp ***/ -BEGIN_JUCE_NAMESPACE - -enum VariantStreamMarkers -{ - varMarker_Int = 1, - varMarker_BoolTrue = 2, - varMarker_BoolFalse = 3, - varMarker_Double = 4, - varMarker_String = 5, - varMarker_Int64 = 6, - varMarker_Array = 7 -}; - -class var::VariantType -{ -public: - VariantType() noexcept {} - virtual ~VariantType() noexcept {} - - virtual int toInt (const ValueUnion&) const noexcept { return 0; } - virtual int64 toInt64 (const ValueUnion&) const noexcept { return 0; } - virtual double toDouble (const ValueUnion&) const noexcept { return 0; } - virtual String toString (const ValueUnion&) const { return String::empty; } - virtual bool toBool (const ValueUnion&) const noexcept { return false; } - virtual ReferenceCountedObject* toObject (const ValueUnion&) const noexcept { return nullptr; } - virtual Array* toArray (const ValueUnion&) const noexcept { return 0; } - - virtual bool isVoid() const noexcept { return false; } - virtual bool isInt() const noexcept { return false; } - virtual bool isInt64() const noexcept { return false; } - virtual bool isBool() const noexcept { return false; } - virtual bool isDouble() const noexcept { return false; } - virtual bool isString() const noexcept { return false; } - virtual bool isObject() const noexcept { return false; } - virtual bool isArray() const noexcept { return false; } - virtual bool isMethod() const noexcept { return false; } - - virtual void cleanUp (ValueUnion&) const noexcept {} - virtual void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest = source; } - virtual bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept = 0; - virtual void writeToStream (const ValueUnion& data, OutputStream& output) const = 0; -}; - -class var::VariantType_Void : public var::VariantType -{ -public: - VariantType_Void() noexcept {} - static const VariantType_Void instance; - - bool isVoid() const noexcept { return true; } - bool equals (const ValueUnion&, const ValueUnion&, const VariantType& otherType) const noexcept { return otherType.isVoid(); } - void writeToStream (const ValueUnion&, OutputStream& output) const { output.writeCompressedInt (0); } -}; - -class var::VariantType_Int : public var::VariantType -{ -public: - VariantType_Int() noexcept {} - static const VariantType_Int instance; - - int toInt (const ValueUnion& data) const noexcept { return data.intValue; }; - int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.intValue; }; - double toDouble (const ValueUnion& data) const noexcept { return (double) data.intValue; } - String toString (const ValueUnion& data) const { return String (data.intValue); } - bool toBool (const ValueUnion& data) const noexcept { return data.intValue != 0; } - bool isInt() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toInt (otherData) == data.intValue; - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - output.writeCompressedInt (5); - output.writeByte (varMarker_Int); - output.writeInt (data.intValue); - } -}; - -class var::VariantType_Int64 : public var::VariantType -{ -public: - VariantType_Int64() noexcept {} - static const VariantType_Int64 instance; - - int toInt (const ValueUnion& data) const noexcept { return (int) data.int64Value; }; - int64 toInt64 (const ValueUnion& data) const noexcept { return data.int64Value; }; - double toDouble (const ValueUnion& data) const noexcept { return (double) data.int64Value; } - String toString (const ValueUnion& data) const { return String (data.int64Value); } - bool toBool (const ValueUnion& data) const noexcept { return data.int64Value != 0; } - bool isInt64() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toInt64 (otherData) == data.int64Value; - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - output.writeCompressedInt (9); - output.writeByte (varMarker_Int64); - output.writeInt64 (data.int64Value); - } -}; - -class var::VariantType_Double : public var::VariantType -{ -public: - VariantType_Double() noexcept {} - static const VariantType_Double instance; - - int toInt (const ValueUnion& data) const noexcept { return (int) data.doubleValue; }; - int64 toInt64 (const ValueUnion& data) const noexcept { return (int64) data.doubleValue; }; - double toDouble (const ValueUnion& data) const noexcept { return data.doubleValue; } - String toString (const ValueUnion& data) const { return String (data.doubleValue); } - bool toBool (const ValueUnion& data) const noexcept { return data.doubleValue != 0; } - bool isDouble() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toDouble (otherData) == data.doubleValue; - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - output.writeCompressedInt (9); - output.writeByte (varMarker_Double); - output.writeDouble (data.doubleValue); - } -}; - -class var::VariantType_Bool : public var::VariantType -{ -public: - VariantType_Bool() noexcept {} - static const VariantType_Bool instance; - - int toInt (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; - int64 toInt64 (const ValueUnion& data) const noexcept { return data.boolValue ? 1 : 0; }; - double toDouble (const ValueUnion& data) const noexcept { return data.boolValue ? 1.0 : 0.0; } - String toString (const ValueUnion& data) const { return String::charToString (data.boolValue ? '1' : '0'); } - bool toBool (const ValueUnion& data) const noexcept { return data.boolValue; } - bool isBool() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toBool (otherData) == data.boolValue; - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - output.writeCompressedInt (1); - output.writeByte (data.boolValue ? (char) varMarker_BoolTrue : (char) varMarker_BoolFalse); - } -}; - -class var::VariantType_String : public var::VariantType -{ -public: - VariantType_String() noexcept {} - static const VariantType_String instance; - - void cleanUp (ValueUnion& data) const noexcept { getString (data)-> ~String(); } - void createCopy (ValueUnion& dest, const ValueUnion& source) const { new (dest.stringValue) String (*getString (source)); } - - bool isString() const noexcept { return true; } - int toInt (const ValueUnion& data) const noexcept { return getString (data)->getIntValue(); }; - int64 toInt64 (const ValueUnion& data) const noexcept { return getString (data)->getLargeIntValue(); }; - double toDouble (const ValueUnion& data) const noexcept { return getString (data)->getDoubleValue(); } - String toString (const ValueUnion& data) const { return *getString (data); } - bool toBool (const ValueUnion& data) const noexcept { return getString (data)->getIntValue() != 0 - || getString (data)->trim().equalsIgnoreCase ("true") - || getString (data)->trim().equalsIgnoreCase ("yes"); } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toString (otherData) == *getString (data); - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - const String* const s = getString (data); - const int len = s->getNumBytesAsUTF8() + 1; - HeapBlock temp (len); - s->copyToUTF8 (temp, len); - output.writeCompressedInt (len + 1); - output.writeByte (varMarker_String); - output.write (temp, len); - } - -private: - static inline const String* getString (const ValueUnion& data) noexcept { return reinterpret_cast (data.stringValue); } - static inline String* getString (ValueUnion& data) noexcept { return reinterpret_cast (data.stringValue); } -}; - -class var::VariantType_Object : public var::VariantType -{ -public: - VariantType_Object() noexcept {} - static const VariantType_Object instance; - - void cleanUp (ValueUnion& data) const noexcept { if (data.objectValue != nullptr) data.objectValue->decReferenceCount(); } - - void createCopy (ValueUnion& dest, const ValueUnion& source) const - { - dest.objectValue = source.objectValue; - if (dest.objectValue != nullptr) - dest.objectValue->incReferenceCount(); - } - - String toString (const ValueUnion& data) const { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); } - bool toBool (const ValueUnion& data) const noexcept { return data.objectValue != 0; } - ReferenceCountedObject* toObject (const ValueUnion& data) const noexcept { return data.objectValue; } - bool isObject() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.toObject (otherData) == data.objectValue; - } - - void writeToStream (const ValueUnion&, OutputStream& output) const - { - jassertfalse; // Can't write an object to a stream! - output.writeCompressedInt (0); - } -}; - -class var::VariantType_Array : public var::VariantType -{ -public: - VariantType_Array() noexcept {} - static const VariantType_Array instance; - - void cleanUp (ValueUnion& data) const noexcept { delete data.arrayValue; } - void createCopy (ValueUnion& dest, const ValueUnion& source) const { dest.arrayValue = new Array (*(source.arrayValue)); } - - String toString (const ValueUnion&) const { return "[Array]"; } - bool isArray() const noexcept { return true; } - Array* toArray (const ValueUnion& data) const noexcept { return data.arrayValue; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - const Array* const otherArray = otherType.toArray (otherData); - return otherArray != nullptr && *otherArray == *(data.arrayValue); - } - - void writeToStream (const ValueUnion& data, OutputStream& output) const - { - MemoryOutputStream buffer (512); - const int numItems = data.arrayValue->size(); - buffer.writeCompressedInt (numItems); - - for (int i = 0; i < numItems; ++i) - data.arrayValue->getReference(i).writeToStream (buffer); - - output.writeCompressedInt (1 + (int) buffer.getDataSize()); - output.writeByte (varMarker_Array); - output << buffer; - } -}; - -class var::VariantType_Method : public var::VariantType -{ -public: - VariantType_Method() noexcept {} - static const VariantType_Method instance; - - String toString (const ValueUnion&) const { return "Method"; } - bool toBool (const ValueUnion& data) const noexcept { return data.methodValue != 0; } - bool isMethod() const noexcept { return true; } - - bool equals (const ValueUnion& data, const ValueUnion& otherData, const VariantType& otherType) const noexcept - { - return otherType.isMethod() && otherData.methodValue == data.methodValue; - } - - void writeToStream (const ValueUnion&, OutputStream& output) const - { - jassertfalse; // Can't write a method to a stream! - output.writeCompressedInt (0); - } -}; - -const var::VariantType_Void var::VariantType_Void::instance; -const var::VariantType_Int var::VariantType_Int::instance; -const var::VariantType_Int64 var::VariantType_Int64::instance; -const var::VariantType_Bool var::VariantType_Bool::instance; -const var::VariantType_Double var::VariantType_Double::instance; -const var::VariantType_String var::VariantType_String::instance; -const var::VariantType_Object var::VariantType_Object::instance; -const var::VariantType_Array var::VariantType_Array::instance; -const var::VariantType_Method var::VariantType_Method::instance; - -var::var() noexcept : type (&VariantType_Void::instance) -{ -} - -var::~var() noexcept -{ - type->cleanUp (value); -} - -const var var::null; - -var::var (const var& valueToCopy) : type (valueToCopy.type) -{ - type->createCopy (value, valueToCopy.value); -} - -var::var (const int value_) noexcept : type (&VariantType_Int::instance) { value.intValue = value_; } -var::var (const int64 value_) noexcept : type (&VariantType_Int64::instance) { value.int64Value = value_; } -var::var (const bool value_) noexcept : type (&VariantType_Bool::instance) { value.boolValue = value_; } -var::var (const double value_) noexcept : type (&VariantType_Double::instance) { value.doubleValue = value_; } -var::var (MethodFunction method_) noexcept : type (&VariantType_Method::instance) { value.methodValue = method_; } - -var::var (const String& value_) : type (&VariantType_String::instance) { new (value.stringValue) String (value_); } -var::var (const char* const value_) : type (&VariantType_String::instance) { new (value.stringValue) String (value_); } -var::var (const wchar_t* const value_) : type (&VariantType_String::instance) { new (value.stringValue) String (value_); } - -var::var (const Array& value_) : type (&VariantType_Array::instance) -{ - value.arrayValue = new Array (value_); -} - -var::var (ReferenceCountedObject* const object) : type (&VariantType_Object::instance) -{ - value.objectValue = object; - - if (object != nullptr) - object->incReferenceCount(); -} - -bool var::isVoid() const noexcept { return type->isVoid(); } -bool var::isInt() const noexcept { return type->isInt(); } -bool var::isInt64() const noexcept { return type->isInt64(); } -bool var::isBool() const noexcept { return type->isBool(); } -bool var::isDouble() const noexcept { return type->isDouble(); } -bool var::isString() const noexcept { return type->isString(); } -bool var::isObject() const noexcept { return type->isObject(); } -bool var::isArray() const noexcept { return type->isArray(); } -bool var::isMethod() const noexcept { return type->isMethod(); } - -var::operator int() const noexcept { return type->toInt (value); } -var::operator int64() const noexcept { return type->toInt64 (value); } -var::operator bool() const noexcept { return type->toBool (value); } -var::operator float() const noexcept { return (float) type->toDouble (value); } -var::operator double() const noexcept { return type->toDouble (value); } -String var::toString() const { return type->toString (value); } -var::operator String() const { return type->toString (value); } -ReferenceCountedObject* var::getObject() const noexcept { return type->toObject (value); } -Array* var::getArray() const noexcept { return type->toArray (value); } -DynamicObject* var::getDynamicObject() const noexcept { return dynamic_cast (getObject()); } - -void var::swapWith (var& other) noexcept -{ - std::swap (type, other.type); - std::swap (value, other.value); -} - -const var& var::operator= (const var& v) { type->cleanUp (value); type = v.type; type->createCopy (value, v.value); return *this; } -const var& var::operator= (const int v) { type->cleanUp (value); type = &VariantType_Int::instance; value.intValue = v; return *this; } -const var& var::operator= (const int64 v) { type->cleanUp (value); type = &VariantType_Int64::instance; value.int64Value = v; return *this; } -const var& var::operator= (const bool v) { type->cleanUp (value); type = &VariantType_Bool::instance; value.boolValue = v; return *this; } -const var& var::operator= (const double v) { type->cleanUp (value); type = &VariantType_Double::instance; value.doubleValue = v; return *this; } -const var& var::operator= (const char* const v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } -const var& var::operator= (const wchar_t* const v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } -const var& var::operator= (const String& v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } -const var& var::operator= (const Array& v) { var v2 (v); swapWith (v2); return *this; } -const var& var::operator= (ReferenceCountedObject* v) { var v2 (v); swapWith (v2); return *this; } -const var& var::operator= (MethodFunction v) { var v2 (v); swapWith (v2); return *this; } - -bool var::equals (const var& other) const noexcept -{ - return type->equals (value, other.value, *other.type); -} - -bool var::equalsWithSameType (const var& other) const noexcept -{ - return type == other.type && equals (other); -} - -bool operator== (const var& v1, const var& v2) noexcept { return v1.equals (v2); } -bool operator!= (const var& v1, const var& v2) noexcept { return ! v1.equals (v2); } -bool operator== (const var& v1, const String& v2) { return v1.toString() == v2; } -bool operator!= (const var& v1, const String& v2) { return v1.toString() != v2; } -bool operator== (const var& v1, const char* const v2) { return v1.toString() == v2; } -bool operator!= (const var& v1, const char* const v2) { return v1.toString() != v2; } - -var var::operator[] (const Identifier& propertyName) const -{ - DynamicObject* const o = getDynamicObject(); - return o != nullptr ? o->getProperty (propertyName) : var::null; -} - -var var::operator[] (const char* const propertyName) const -{ - return operator[] (Identifier (propertyName)); -} - -var var::getProperty (const Identifier& propertyName, const var& defaultReturnValue) const -{ - DynamicObject* const o = getDynamicObject(); - return o != nullptr ? o->getProperties().getWithDefault (propertyName, defaultReturnValue) : defaultReturnValue; -} - -var var::invoke (const Identifier& method, const var* arguments, int numArguments) const -{ - DynamicObject* const o = getDynamicObject(); - return o != nullptr ? o->invokeMethod (method, arguments, numArguments) : var::null; -} - -var var::invokeMethod (DynamicObject* const target, const var* const arguments, const int numArguments) const -{ - jassert (target != nullptr); - - if (isMethod()) - return (target->*(value.methodValue)) (arguments, numArguments); - - return var::null; -} - -var var::call (const Identifier& method) const -{ - return invoke (method, nullptr, 0); -} - -var var::call (const Identifier& method, const var& arg1) const -{ - return invoke (method, &arg1, 1); -} - -var var::call (const Identifier& method, const var& arg1, const var& arg2) const -{ - var args[] = { arg1, arg2 }; - return invoke (method, args, 2); -} - -var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3) -{ - var args[] = { arg1, arg2, arg3 }; - return invoke (method, args, 3); -} - -var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4) const -{ - var args[] = { arg1, arg2, arg3, arg4 }; - return invoke (method, args, 4); -} - -var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4, const var& arg5) const -{ - var args[] = { arg1, arg2, arg3, arg4, arg5 }; - return invoke (method, args, 5); -} - -int var::size() const -{ - const Array* const array = getArray(); - return array != nullptr ? array->size() : 0; -} - -const var& var::operator[] (int arrayIndex) const -{ - const Array* const array = getArray(); - - // When using this method, the var must actually be an array, and the index - // must be in-range! - jassert (array != nullptr && isPositiveAndBelow (arrayIndex, array->size())); - - return array->getReference (arrayIndex); -} - -var& var::operator[] (int arrayIndex) -{ - const Array* const array = getArray(); - - // When using this method, the var must actually be an array, and the index - // must be in-range! - jassert (array != nullptr && isPositiveAndBelow (arrayIndex, array->size())); - - return array->getReference (arrayIndex); -} - -Array* var::convertToArray() -{ - Array* array = getArray(); - - if (array == nullptr) - { - const Array tempVar; - var v (tempVar); - array = v.value.arrayValue; - - if (! isVoid()) - array->add (*this); - - swapWith (v); - } - - return array; -} - -void var::append (const var& n) -{ - convertToArray()->add (n); -} - -void var::remove (const int index) -{ - Array* const array = getArray(); - - if (array != nullptr) - array->remove (index); -} - -void var::insert (const int index, const var& n) -{ - convertToArray()->insert (index, n); -} - -void var::resize (const int numArrayElementsWanted) -{ - convertToArray()->resize (numArrayElementsWanted); -} - -int var::indexOf (const var& n) const -{ - const Array* const array = getArray(); - return array != nullptr ? array->indexOf (n) : -1; -} - -void var::writeToStream (OutputStream& output) const -{ - type->writeToStream (value, output); -} - -var var::readFromStream (InputStream& input) -{ - const int numBytes = input.readCompressedInt(); - - if (numBytes > 0) - { - switch (input.readByte()) - { - case varMarker_Int: return var (input.readInt()); - case varMarker_Int64: return var (input.readInt64()); - case varMarker_BoolTrue: return var (true); - case varMarker_BoolFalse: return var (false); - case varMarker_Double: return var (input.readDouble()); - case varMarker_String: - { - MemoryOutputStream mo; - mo.writeFromInputStream (input, numBytes - 1); - return var (mo.toUTF8()); - } - - case varMarker_Array: - { - var v; - Array* const destArray = v.convertToArray(); - - for (int i = input.readCompressedInt(); --i >= 0;) - destArray->add (readFromStream (input)); - - return v; - } - - default: - input.skipNextBytes (numBytes - 1); break; - } - } - - return var::null; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Variant.cpp ***/ - - -/*** Start of inlined file: juce_NamedValueSet.cpp ***/ -BEGIN_JUCE_NAMESPACE - -NamedValueSet::NamedValue::NamedValue() noexcept -{ -} - -inline NamedValueSet::NamedValue::NamedValue (const Identifier& name_, const var& value_) - : name (name_), value (value_) -{ -} - -NamedValueSet::NamedValue::NamedValue (const NamedValue& other) - : name (other.name), value (other.value) -{ -} - -NamedValueSet::NamedValue& NamedValueSet::NamedValue::operator= (const NamedValueSet::NamedValue& other) -{ - name = other.name; - value = other.value; - return *this; -} - -bool NamedValueSet::NamedValue::operator== (const NamedValueSet::NamedValue& other) const noexcept -{ - return name == other.name && value == other.value; -} - -NamedValueSet::NamedValueSet() noexcept -{ -} - -NamedValueSet::NamedValueSet (const NamedValueSet& other) -{ - values.addCopyOfList (other.values); -} - -NamedValueSet& NamedValueSet::operator= (const NamedValueSet& other) -{ - clear(); - values.addCopyOfList (other.values); - return *this; -} - -NamedValueSet::~NamedValueSet() -{ - clear(); -} - -void NamedValueSet::clear() -{ - values.deleteAll(); -} - -bool NamedValueSet::operator== (const NamedValueSet& other) const -{ - const NamedValue* i1 = values; - const NamedValue* i2 = other.values; - - while (i1 != nullptr && i2 != nullptr) - { - if (! (*i1 == *i2)) - return false; - - i1 = i1->nextListItem; - i2 = i2->nextListItem; - } - - return true; -} - -bool NamedValueSet::operator!= (const NamedValueSet& other) const -{ - return ! operator== (other); -} - -int NamedValueSet::size() const noexcept -{ - return values.size(); -} - -const var& NamedValueSet::operator[] (const Identifier& name) const -{ - for (NamedValue* i = values; i != nullptr; i = i->nextListItem) - if (i->name == name) - return i->value; - - return var::null; -} - -var NamedValueSet::getWithDefault (const Identifier& name, const var& defaultReturnValue) const -{ - const var* const v = getVarPointer (name); - return v != nullptr ? *v : defaultReturnValue; -} - -var* NamedValueSet::getVarPointer (const Identifier& name) const noexcept -{ - for (NamedValue* i = values; i != nullptr; i = i->nextListItem) - if (i->name == name) - return &(i->value); - - return nullptr; -} - -bool NamedValueSet::set (const Identifier& name, const var& newValue) -{ - LinkedListPointer* i = &values; - - while (i->get() != nullptr) - { - NamedValue* const v = i->get(); - - if (v->name == name) - { - if (v->value.equalsWithSameType (newValue)) - return false; - - v->value = newValue; - return true; - } - - i = &(v->nextListItem); - } - - i->insertNext (new NamedValue (name, newValue)); - return true; -} - -bool NamedValueSet::contains (const Identifier& name) const -{ - return getVarPointer (name) != nullptr; -} - -bool NamedValueSet::remove (const Identifier& name) -{ - LinkedListPointer* i = &values; - - for (;;) - { - NamedValue* const v = i->get(); - - if (v == nullptr) - break; - - if (v->name == name) - { - delete i->removeNext(); - return true; - } - - i = &(v->nextListItem); - } - - return false; -} - -const Identifier NamedValueSet::getName (const int index) const -{ - const NamedValue* const v = values[index]; - jassert (v != nullptr); - return v->name; -} - -const var& NamedValueSet::getValueAt (const int index) const -{ - const NamedValue* const v = values[index]; - jassert (v != nullptr); - return v->value; -} - -void NamedValueSet::setFromXmlAttributes (const XmlElement& xml) -{ - clear(); - LinkedListPointer::Appender appender (values); - - const int numAtts = xml.getNumAttributes(); // xxx inefficient - should write an att iterator.. - - for (int i = 0; i < numAtts; ++i) - appender.append (new NamedValue (xml.getAttributeName (i), var (xml.getAttributeValue (i)))); -} - -void NamedValueSet::copyToXmlAttributes (XmlElement& xml) const -{ - for (NamedValue* i = values; i != nullptr; i = i->nextListItem) - { - jassert (! i->value.isObject()); // DynamicObjects can't be stored as XML! - - xml.setAttribute (i->name.toString(), - i->value.toString()); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_NamedValueSet.cpp ***/ - - -/*** Start of inlined file: juce_DynamicObject.cpp ***/ -BEGIN_JUCE_NAMESPACE - -DynamicObject::DynamicObject() -{ -} - -DynamicObject::~DynamicObject() -{ -} - -bool DynamicObject::hasProperty (const Identifier& propertyName) const -{ - const var* const v = properties.getVarPointer (propertyName); - return v != nullptr && ! v->isMethod(); -} - -var DynamicObject::getProperty (const Identifier& propertyName) const -{ - return properties [propertyName]; -} - -void DynamicObject::setProperty (const Identifier& propertyName, const var& newValue) -{ - properties.set (propertyName, newValue); -} - -void DynamicObject::removeProperty (const Identifier& propertyName) -{ - properties.remove (propertyName); -} - -bool DynamicObject::hasMethod (const Identifier& methodName) const -{ - return getProperty (methodName).isMethod(); -} - -var DynamicObject::invokeMethod (const Identifier& methodName, - const var* parameters, - int numParameters) -{ - return properties [methodName].invokeMethod (this, parameters, numParameters); -} - -void DynamicObject::setMethod (const Identifier& name, - var::MethodFunction methodFunction) -{ - properties.set (name, var (methodFunction)); -} - -void DynamicObject::clear() -{ - properties.clear(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_DynamicObject.cpp ***/ - - -/*** Start of inlined file: juce_Expression.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class Expression::Term : public SingleThreadedReferenceCountedObject -{ -public: - Term() {} - virtual ~Term() {} - - virtual Type getType() const noexcept = 0; - virtual Term* clone() const = 0; - virtual ReferenceCountedObjectPtr resolve (const Scope&, int recursionDepth) = 0; - virtual String toString() const = 0; - virtual double toDouble() const { return 0; } - virtual int getInputIndexFor (const Term*) const { return -1; } - virtual int getOperatorPrecedence() const { return 0; } - virtual int getNumInputs() const { return 0; } - virtual Term* getInput (int) const { return nullptr; } - virtual ReferenceCountedObjectPtr negated(); - - virtual ReferenceCountedObjectPtr createTermToEvaluateInput (const Scope&, const Term* /*inputTerm*/, - double /*overallTarget*/, Term* /*topLevelTerm*/) const - { - jassertfalse; - return nullptr; - } - - virtual String getName() const - { - jassertfalse; // You shouldn't call this for an expression that's not actually a function! - return String::empty; - } - - virtual void renameSymbol (const Symbol& oldSymbol, const String& newName, const Scope& scope, int recursionDepth) - { - for (int i = getNumInputs(); --i >= 0;) - getInput (i)->renameSymbol (oldSymbol, newName, scope, recursionDepth); - } - - class SymbolVisitor - { - public: - virtual ~SymbolVisitor() {} - virtual void useSymbol (const Symbol&) = 0; - }; - - virtual void visitAllSymbols (SymbolVisitor& visitor, const Scope& scope, int recursionDepth) - { - for (int i = getNumInputs(); --i >= 0;) - getInput(i)->visitAllSymbols (visitor, scope, recursionDepth); - } - -private: - JUCE_DECLARE_NON_COPYABLE (Term); -}; - -class Expression::Helpers -{ -public: - typedef ReferenceCountedObjectPtr TermPtr; - - // This helper function is needed to work around VC6 scoping bugs - static inline const TermPtr& getTermFor (const Expression& exp) noexcept { return exp.term; } - - static void checkRecursionDepth (const int depth) - { - if (depth > 256) - throw EvaluationError ("Recursive symbol references"); - } - - friend class Expression::Term; // (also only needed as a VC6 workaround) - - /** An exception that can be thrown by Expression::evaluate(). */ - class EvaluationError : public std::exception - { - public: - EvaluationError (const String& description_) - : description (description_) - { - DBG ("Expression::EvaluationError: " + description); - } - - String description; - }; - - class Constant : public Term - { - public: - Constant (const double value_, const bool isResolutionTarget_) - : value (value_), isResolutionTarget (isResolutionTarget_) {} - - Type getType() const noexcept { return constantType; } - Term* clone() const { return new Constant (value, isResolutionTarget); } - TermPtr resolve (const Scope&, int) { return this; } - double toDouble() const { return value; } - TermPtr negated() { return new Constant (-value, isResolutionTarget); } - - String toString() const - { - String s (value); - if (isResolutionTarget) - s = "@" + s; - - return s; - } - - double value; - bool isResolutionTarget; - }; - - class BinaryTerm : public Term - { - public: - BinaryTerm (Term* const left_, Term* const right_) : left (left_), right (right_) - { - jassert (left_ != nullptr && right_ != nullptr); - } - - int getInputIndexFor (const Term* possibleInput) const - { - return possibleInput == left ? 0 : (possibleInput == right ? 1 : -1); - } - - Type getType() const noexcept { return operatorType; } - int getNumInputs() const { return 2; } - Term* getInput (int index) const { return index == 0 ? left.getObject() : (index == 1 ? right.getObject() : 0); } - - virtual double performFunction (double left, double right) const = 0; - virtual void writeOperator (String& dest) const = 0; - - TermPtr resolve (const Scope& scope, int recursionDepth) - { - return new Constant (performFunction (left->resolve (scope, recursionDepth)->toDouble(), - right->resolve (scope, recursionDepth)->toDouble()), false); - } - - String toString() const - { - String s; - - const int ourPrecendence = getOperatorPrecedence(); - if (left->getOperatorPrecedence() > ourPrecendence) - s << '(' << left->toString() << ')'; - else - s = left->toString(); - - writeOperator (s); - - if (right->getOperatorPrecedence() >= ourPrecendence) - s << '(' << right->toString() << ')'; - else - s << right->toString(); - - return s; - } - - protected: - const TermPtr left, right; - - TermPtr createDestinationTerm (const Scope& scope, const Term* input, double overallTarget, Term* topLevelTerm) const - { - jassert (input == left || input == right); - if (input != left && input != right) - return nullptr; - - const Term* const dest = findDestinationFor (topLevelTerm, this); - - if (dest == nullptr) - return new Constant (overallTarget, false); - - return dest->createTermToEvaluateInput (scope, this, overallTarget, topLevelTerm); - } - }; - - class SymbolTerm : public Term - { - public: - explicit SymbolTerm (const String& symbol_) : symbol (symbol_) {} - - TermPtr resolve (const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - return getTermFor (scope.getSymbolValue (symbol))->resolve (scope, recursionDepth + 1); - } - - Type getType() const noexcept { return symbolType; } - Term* clone() const { return new SymbolTerm (symbol); } - String toString() const { return symbol; } - String getName() const { return symbol; } - - void visitAllSymbols (SymbolVisitor& visitor, const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - visitor.useSymbol (Symbol (scope.getScopeUID(), symbol)); - getTermFor (scope.getSymbolValue (symbol))->visitAllSymbols (visitor, scope, recursionDepth + 1); - } - - void renameSymbol (const Symbol& oldSymbol, const String& newName, const Scope& scope, int /*recursionDepth*/) - { - if (oldSymbol.symbolName == symbol && scope.getScopeUID() == oldSymbol.scopeUID) - symbol = newName; - } - - String symbol; - }; - - class Function : public Term - { - public: - explicit Function (const String& functionName_) : functionName (functionName_) {} - - Function (const String& functionName_, const Array& parameters_) - : functionName (functionName_), parameters (parameters_) - {} - - Type getType() const noexcept { return functionType; } - Term* clone() const { return new Function (functionName, parameters); } - int getNumInputs() const { return parameters.size(); } - Term* getInput (int i) const { return getTermFor (parameters [i]); } - String getName() const { return functionName; } - - TermPtr resolve (const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - double result = 0; - const int numParams = parameters.size(); - if (numParams > 0) - { - HeapBlock params (numParams); - for (int i = 0; i < numParams; ++i) - params[i] = getTermFor (parameters.getReference(i))->resolve (scope, recursionDepth + 1)->toDouble(); - - result = scope.evaluateFunction (functionName, params, numParams); - } - else - { - result = scope.evaluateFunction (functionName, nullptr, 0); - } - - return new Constant (result, false); - } - - int getInputIndexFor (const Term* possibleInput) const - { - for (int i = 0; i < parameters.size(); ++i) - if (getTermFor (parameters.getReference(i)) == possibleInput) - return i; - - return -1; - } - - String toString() const - { - if (parameters.size() == 0) - return functionName + "()"; - - String s (functionName + " ("); - - for (int i = 0; i < parameters.size(); ++i) - { - s << getTermFor (parameters.getReference(i))->toString(); - - if (i < parameters.size() - 1) - s << ", "; - } - - s << ')'; - return s; - } - - const String functionName; - Array parameters; - }; - - class DotOperator : public BinaryTerm - { - public: - DotOperator (SymbolTerm* const left_, Term* const right_) : BinaryTerm (left_, right_) {} - - TermPtr resolve (const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - - EvaluationVisitor visitor (right, recursionDepth + 1); - scope.visitRelativeScope (getSymbol()->symbol, visitor); - return visitor.output; - } - - Term* clone() const { return new DotOperator (getSymbol(), right); } - String getName() const { return "."; } - int getOperatorPrecedence() const { return 1; } - void writeOperator (String& dest) const { dest << '.'; } - double performFunction (double, double) const { return 0.0; } - - void visitAllSymbols (SymbolVisitor& visitor, const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - visitor.useSymbol (Symbol (scope.getScopeUID(), getSymbol()->symbol)); - - SymbolVisitingVisitor v (right, visitor, recursionDepth + 1); - - try - { - scope.visitRelativeScope (getSymbol()->symbol, v); - } - catch (...) {} - } - - void renameSymbol (const Symbol& oldSymbol, const String& newName, const Scope& scope, int recursionDepth) - { - checkRecursionDepth (recursionDepth); - getSymbol()->renameSymbol (oldSymbol, newName, scope, recursionDepth); - - SymbolRenamingVisitor visitor (right, oldSymbol, newName, recursionDepth + 1); - - try - { - scope.visitRelativeScope (getSymbol()->symbol, visitor); - } - catch (...) {} - } - - private: - - class EvaluationVisitor : public Scope::Visitor - { - public: - EvaluationVisitor (const TermPtr& input_, const int recursionCount_) - : input (input_), output (input_), recursionCount (recursionCount_) {} - - void visit (const Scope& scope) { output = input->resolve (scope, recursionCount); } - - const TermPtr input; - TermPtr output; - const int recursionCount; - - private: - JUCE_DECLARE_NON_COPYABLE (EvaluationVisitor); - }; - - class SymbolVisitingVisitor : public Scope::Visitor - { - public: - SymbolVisitingVisitor (const TermPtr& input_, SymbolVisitor& visitor_, const int recursionCount_) - : input (input_), visitor (visitor_), recursionCount (recursionCount_) {} - - void visit (const Scope& scope) { input->visitAllSymbols (visitor, scope, recursionCount); } - - private: - const TermPtr input; - SymbolVisitor& visitor; - const int recursionCount; - - JUCE_DECLARE_NON_COPYABLE (SymbolVisitingVisitor); - }; - - class SymbolRenamingVisitor : public Scope::Visitor - { - public: - SymbolRenamingVisitor (const TermPtr& input_, const Expression::Symbol& symbol_, const String& newName_, const int recursionCount_) - : input (input_), symbol (symbol_), newName (newName_), recursionCount (recursionCount_) {} - - void visit (const Scope& scope) { input->renameSymbol (symbol, newName, scope, recursionCount); } - - private: - const TermPtr input; - const Symbol& symbol; - const String newName; - const int recursionCount; - - JUCE_DECLARE_NON_COPYABLE (SymbolRenamingVisitor); - }; - - SymbolTerm* getSymbol() const { return static_cast (left.getObject()); } - - JUCE_DECLARE_NON_COPYABLE (DotOperator); - }; - - class Negate : public Term - { - public: - explicit Negate (const TermPtr& input_) : input (input_) - { - jassert (input_ != nullptr); - } - - Type getType() const noexcept { return operatorType; } - int getInputIndexFor (const Term* possibleInput) const { return possibleInput == input ? 0 : -1; } - int getNumInputs() const { return 1; } - Term* getInput (int index) const { return index == 0 ? input.getObject() : nullptr; } - Term* clone() const { return new Negate (input->clone()); } - - TermPtr resolve (const Scope& scope, int recursionDepth) - { - return new Constant (-input->resolve (scope, recursionDepth)->toDouble(), false); - } - - String getName() const { return "-"; } - TermPtr negated() { return input; } - - TermPtr createTermToEvaluateInput (const Scope& scope, const Term* input_, double overallTarget, Term* topLevelTerm) const - { - (void) input_; - jassert (input_ == input); - - const Term* const dest = findDestinationFor (topLevelTerm, this); - - return new Negate (dest == nullptr ? new Constant (overallTarget, false) - : dest->createTermToEvaluateInput (scope, this, overallTarget, topLevelTerm)); - } - - String toString() const - { - if (input->getOperatorPrecedence() > 0) - return "-(" + input->toString() + ")"; - else - return "-" + input->toString(); - } - - private: - const TermPtr input; - }; - - class Add : public BinaryTerm - { - public: - Add (Term* const left_, Term* const right_) : BinaryTerm (left_, right_) {} - - Term* clone() const { return new Add (left->clone(), right->clone()); } - double performFunction (double lhs, double rhs) const { return lhs + rhs; } - int getOperatorPrecedence() const { return 3; } - String getName() const { return "+"; } - void writeOperator (String& dest) const { dest << " + "; } - - TermPtr createTermToEvaluateInput (const Scope& scope, const Term* input, double overallTarget, Term* topLevelTerm) const - { - const TermPtr newDest (createDestinationTerm (scope, input, overallTarget, topLevelTerm)); - if (newDest == nullptr) - return nullptr; - - return new Subtract (newDest, (input == left ? right : left)->clone()); - } - - private: - JUCE_DECLARE_NON_COPYABLE (Add); - }; - - class Subtract : public BinaryTerm - { - public: - Subtract (Term* const left_, Term* const right_) : BinaryTerm (left_, right_) {} - - Term* clone() const { return new Subtract (left->clone(), right->clone()); } - double performFunction (double lhs, double rhs) const { return lhs - rhs; } - int getOperatorPrecedence() const { return 3; } - String getName() const { return "-"; } - void writeOperator (String& dest) const { dest << " - "; } - - TermPtr createTermToEvaluateInput (const Scope& scope, const Term* input, double overallTarget, Term* topLevelTerm) const - { - const TermPtr newDest (createDestinationTerm (scope, input, overallTarget, topLevelTerm)); - if (newDest == nullptr) - return nullptr; - - if (input == left) - return new Add (newDest, right->clone()); - else - return new Subtract (left->clone(), newDest); - } - - private: - JUCE_DECLARE_NON_COPYABLE (Subtract); - }; - - class Multiply : public BinaryTerm - { - public: - Multiply (Term* const left_, Term* const right_) : BinaryTerm (left_, right_) {} - - Term* clone() const { return new Multiply (left->clone(), right->clone()); } - double performFunction (double lhs, double rhs) const { return lhs * rhs; } - String getName() const { return "*"; } - void writeOperator (String& dest) const { dest << " * "; } - int getOperatorPrecedence() const { return 2; } - - TermPtr createTermToEvaluateInput (const Scope& scope, const Term* input, double overallTarget, Term* topLevelTerm) const - { - const TermPtr newDest (createDestinationTerm (scope, input, overallTarget, topLevelTerm)); - if (newDest == nullptr) - return nullptr; - - return new Divide (newDest, (input == left ? right : left)->clone()); - } - - private: - JUCE_DECLARE_NON_COPYABLE (Multiply); - }; - - class Divide : public BinaryTerm - { - public: - Divide (Term* const left_, Term* const right_) : BinaryTerm (left_, right_) {} - - Term* clone() const { return new Divide (left->clone(), right->clone()); } - double performFunction (double lhs, double rhs) const { return lhs / rhs; } - String getName() const { return "/"; } - void writeOperator (String& dest) const { dest << " / "; } - int getOperatorPrecedence() const { return 2; } - - TermPtr createTermToEvaluateInput (const Scope& scope, const Term* input, double overallTarget, Term* topLevelTerm) const - { - const TermPtr newDest (createDestinationTerm (scope, input, overallTarget, topLevelTerm)); - if (newDest == nullptr) - return nullptr; - - if (input == left) - return new Multiply (newDest, right->clone()); - else - return new Divide (left->clone(), newDest); - } - - private: - JUCE_DECLARE_NON_COPYABLE (Divide); - }; - - static Term* findDestinationFor (Term* const topLevel, const Term* const inputTerm) - { - const int inputIndex = topLevel->getInputIndexFor (inputTerm); - if (inputIndex >= 0) - return topLevel; - - for (int i = topLevel->getNumInputs(); --i >= 0;) - { - Term* const t = findDestinationFor (topLevel->getInput (i), inputTerm); - - if (t != nullptr) - return t; - } - - return nullptr; - } - - static Constant* findTermToAdjust (Term* const term, const bool mustBeFlagged) - { - { - Constant* const c = dynamic_cast (term); - if (c != nullptr && (c->isResolutionTarget || ! mustBeFlagged)) - return c; - } - - if (dynamic_cast (term) != nullptr) - return nullptr; - - int i; - const int numIns = term->getNumInputs(); - for (i = 0; i < numIns; ++i) - { - Constant* const c = dynamic_cast (term->getInput (i)); - if (c != nullptr && (c->isResolutionTarget || ! mustBeFlagged)) - return c; - } - - for (i = 0; i < numIns; ++i) - { - Constant* const c = findTermToAdjust (term->getInput (i), mustBeFlagged); - if (c != nullptr) - return c; - } - - return nullptr; - } - - static bool containsAnySymbols (const Term* const t) - { - if (t->getType() == Expression::symbolType) - return true; - - for (int i = t->getNumInputs(); --i >= 0;) - if (containsAnySymbols (t->getInput (i))) - return true; - - return false; - } - - class SymbolCheckVisitor : public Term::SymbolVisitor - { - public: - SymbolCheckVisitor (const Symbol& symbol_) : wasFound (false), symbol (symbol_) {} - void useSymbol (const Symbol& s) { wasFound = wasFound || s == symbol; } - - bool wasFound; - - private: - const Symbol& symbol; - - JUCE_DECLARE_NON_COPYABLE (SymbolCheckVisitor); - }; - - class SymbolListVisitor : public Term::SymbolVisitor - { - public: - SymbolListVisitor (Array& list_) : list (list_) {} - void useSymbol (const Symbol& s) { list.addIfNotAlreadyThere (s); } - - private: - Array& list; - - JUCE_DECLARE_NON_COPYABLE (SymbolListVisitor); - }; - - class Parser - { - public: - - Parser (String::CharPointerType& stringToParse) - : text (stringToParse) - { - } - - TermPtr readUpToComma() - { - if (text.isEmpty()) - return new Constant (0.0, false); - - const TermPtr e (readExpression()); - - if (e == nullptr || ((! readOperator (",")) && ! text.isEmpty())) - throw ParseError ("Syntax error: \"" + String (text) + "\""); - - return e; - } - - private: - String::CharPointerType& text; - - static inline bool isDecimalDigit (const juce_wchar c) noexcept - { - return c >= '0' && c <= '9'; - } - - bool readChar (const juce_wchar required) noexcept - { - if (*text == required) - { - ++text; - return true; - } - - return false; - } - - bool readOperator (const char* ops, char* const opType = nullptr) noexcept - { - text = text.findEndOfWhitespace(); - - while (*ops != 0) - { - if (readChar (*ops)) - { - if (opType != nullptr) - *opType = *ops; - - return true; - } - - ++ops; - } - - return false; - } - - bool readIdentifier (String& identifier) noexcept - { - text = text.findEndOfWhitespace(); - String::CharPointerType t (text); - int numChars = 0; - - if (t.isLetter() || *t == '_') - { - ++t; - ++numChars; - - while (t.isLetterOrDigit() || *t == '_') - { - ++t; - ++numChars; - } - } - - if (numChars > 0) - { - identifier = String (text, numChars); - text = t; - return true; - } - - return false; - } - - Term* readNumber() noexcept - { - text = text.findEndOfWhitespace(); - String::CharPointerType t (text); - - const bool isResolutionTarget = (*t == '@'); - if (isResolutionTarget) - { - ++t; - t = t.findEndOfWhitespace(); - text = t; - } - - if (*t == '-') - { - ++t; - t = t.findEndOfWhitespace(); - } - - if (isDecimalDigit (*t) || (*t == '.' && isDecimalDigit (t[1]))) - return new Constant (CharacterFunctions::readDoubleValue (text), isResolutionTarget); - - return nullptr; - } - - TermPtr readExpression() - { - TermPtr lhs (readMultiplyOrDivideExpression()); - - char opType; - while (lhs != nullptr && readOperator ("+-", &opType)) - { - TermPtr rhs (readMultiplyOrDivideExpression()); - - if (rhs == nullptr) - throw ParseError ("Expected expression after \"" + String::charToString (opType) + "\""); - - if (opType == '+') - lhs = new Add (lhs, rhs); - else - lhs = new Subtract (lhs, rhs); - } - - return lhs; - } - - TermPtr readMultiplyOrDivideExpression() - { - TermPtr lhs (readUnaryExpression()); - - char opType; - while (lhs != nullptr && readOperator ("*/", &opType)) - { - TermPtr rhs (readUnaryExpression()); - - if (rhs == nullptr) - throw ParseError ("Expected expression after \"" + String::charToString (opType) + "\""); - - if (opType == '*') - lhs = new Multiply (lhs, rhs); - else - lhs = new Divide (lhs, rhs); - } - - return lhs; - } - - TermPtr readUnaryExpression() - { - char opType; - if (readOperator ("+-", &opType)) - { - TermPtr term (readUnaryExpression()); - - if (term == nullptr) - throw ParseError ("Expected expression after \"" + String::charToString (opType) + "\""); - - if (opType == '-') - term = term->negated(); - - return term; - } - - return readPrimaryExpression(); - } - - TermPtr readPrimaryExpression() - { - TermPtr e (readParenthesisedExpression()); - if (e != nullptr) - return e; - - e = readNumber(); - if (e != nullptr) - return e; - - return readSymbolOrFunction(); - } - - TermPtr readSymbolOrFunction() - { - String identifier; - if (readIdentifier (identifier)) - { - if (readOperator ("(")) // method call... - { - Function* const f = new Function (identifier); - ScopedPointer func (f); // (can't use ScopedPointer in MSVC) - - TermPtr param (readExpression()); - - if (param == nullptr) - { - if (readOperator (")")) - return func.release(); - - throw ParseError ("Expected parameters after \"" + identifier + " (\""); - } - - f->parameters.add (Expression (param)); - - while (readOperator (",")) - { - param = readExpression(); - - if (param == nullptr) - throw ParseError ("Expected expression after \",\""); - - f->parameters.add (Expression (param)); - } - - if (readOperator (")")) - return func.release(); - - throw ParseError ("Expected \")\""); - } - else if (readOperator (".")) - { - TermPtr rhs (readSymbolOrFunction()); - - if (rhs == nullptr) - throw ParseError ("Expected symbol or function after \".\""); - - if (identifier == "this") - return rhs; - - return new DotOperator (new SymbolTerm (identifier), rhs); - } - else // just a symbol.. - { - jassert (identifier.trim() == identifier); - return new SymbolTerm (identifier); - } - } - - return nullptr; - } - - TermPtr readParenthesisedExpression() - { - if (! readOperator ("(")) - return nullptr; - - const TermPtr e (readExpression()); - if (e == nullptr || ! readOperator (")")) - return nullptr; - - return e; - } - - JUCE_DECLARE_NON_COPYABLE (Parser); - }; -}; - -Expression::Expression() - : term (new Expression::Helpers::Constant (0, false)) -{ -} - -Expression::~Expression() -{ -} - -Expression::Expression (Term* const term_) - : term (term_) -{ - jassert (term != nullptr); -} - -Expression::Expression (const double constant) - : term (new Expression::Helpers::Constant (constant, false)) -{ -} - -Expression::Expression (const Expression& other) - : term (other.term) -{ -} - -Expression& Expression::operator= (const Expression& other) -{ - term = other.term; - return *this; -} - -Expression::Expression (const String& stringToParse) -{ - String::CharPointerType text (stringToParse.getCharPointer()); - Helpers::Parser parser (text); - term = parser.readUpToComma(); -} - -Expression Expression::parse (String::CharPointerType& stringToParse) -{ - Helpers::Parser parser (stringToParse); - return Expression (parser.readUpToComma()); -} - -double Expression::evaluate() const -{ - return evaluate (Expression::Scope()); -} - -double Expression::evaluate (const Expression::Scope& scope) const -{ - try - { - return term->resolve (scope, 0)->toDouble(); - } - catch (Helpers::EvaluationError&) - {} - - return 0; -} - -double Expression::evaluate (const Scope& scope, String& evaluationError) const -{ - try - { - return term->resolve (scope, 0)->toDouble(); - } - catch (Helpers::EvaluationError& e) - { - evaluationError = e.description; - } - - return 0; -} - -Expression Expression::operator+ (const Expression& other) const { return Expression (new Helpers::Add (term, other.term)); } -Expression Expression::operator- (const Expression& other) const { return Expression (new Helpers::Subtract (term, other.term)); } -Expression Expression::operator* (const Expression& other) const { return Expression (new Helpers::Multiply (term, other.term)); } -Expression Expression::operator/ (const Expression& other) const { return Expression (new Helpers::Divide (term, other.term)); } -Expression Expression::operator-() const { return Expression (term->negated()); } -Expression Expression::symbol (const String& symbol) { return Expression (new Helpers::SymbolTerm (symbol)); } - -Expression Expression::function (const String& functionName, const Array& parameters) -{ - return Expression (new Helpers::Function (functionName, parameters)); -} - -Expression Expression::adjustedToGiveNewResult (const double targetValue, const Expression::Scope& scope) const -{ - ScopedPointer newTerm (term->clone()); - - Helpers::Constant* termToAdjust = Helpers::findTermToAdjust (newTerm, true); - - if (termToAdjust == nullptr) - termToAdjust = Helpers::findTermToAdjust (newTerm, false); - - if (termToAdjust == nullptr) - { - newTerm = new Helpers::Add (newTerm.release(), new Helpers::Constant (0, false)); - termToAdjust = Helpers::findTermToAdjust (newTerm, false); - } - - jassert (termToAdjust != nullptr); - - const Term* const parent = Helpers::findDestinationFor (newTerm, termToAdjust); - - if (parent == nullptr) - { - termToAdjust->value = targetValue; - } - else - { - const Helpers::TermPtr reverseTerm (parent->createTermToEvaluateInput (scope, termToAdjust, targetValue, newTerm)); - - if (reverseTerm == nullptr) - return Expression (targetValue); - - termToAdjust->value = reverseTerm->resolve (scope, 0)->toDouble(); - } - - return Expression (newTerm.release()); -} - -Expression Expression::withRenamedSymbol (const Expression::Symbol& oldSymbol, const String& newName, const Scope& scope) const -{ - jassert (newName.toLowerCase().containsOnly ("abcdefghijklmnopqrstuvwxyz0123456789_")); - - if (oldSymbol.symbolName == newName) - return *this; - - Expression e (term->clone()); - e.term->renameSymbol (oldSymbol, newName, scope, 0); - return e; -} - -bool Expression::referencesSymbol (const Expression::Symbol& symbolToCheck, const Scope& scope) const -{ - Helpers::SymbolCheckVisitor visitor (symbolToCheck); - - try - { - term->visitAllSymbols (visitor, scope, 0); - } - catch (Helpers::EvaluationError&) - {} - - return visitor.wasFound; -} - -void Expression::findReferencedSymbols (Array& results, const Scope& scope) const -{ - try - { - Helpers::SymbolListVisitor visitor (results); - term->visitAllSymbols (visitor, scope, 0); - } - catch (Helpers::EvaluationError&) - {} -} - -String Expression::toString() const { return term->toString(); } -bool Expression::usesAnySymbols() const { return Helpers::containsAnySymbols (term); } -Expression::Type Expression::getType() const noexcept { return term->getType(); } -String Expression::getSymbolOrFunction() const { return term->getName(); } -int Expression::getNumInputs() const { return term->getNumInputs(); } -Expression Expression::getInput (int index) const { return Expression (term->getInput (index)); } - -ReferenceCountedObjectPtr Expression::Term::negated() -{ - return new Helpers::Negate (this); -} - -Expression::ParseError::ParseError (const String& message) - : description (message) -{ - DBG ("Expression::ParseError: " + message); -} - -Expression::Symbol::Symbol (const String& scopeUID_, const String& symbolName_) - : scopeUID (scopeUID_), symbolName (symbolName_) -{ -} - -bool Expression::Symbol::operator== (const Symbol& other) const noexcept -{ - return symbolName == other.symbolName && scopeUID == other.scopeUID; -} - -bool Expression::Symbol::operator!= (const Symbol& other) const noexcept -{ - return ! operator== (other); -} - -Expression::Scope::Scope() {} -Expression::Scope::~Scope() {} - -Expression Expression::Scope::getSymbolValue (const String& symbol) const -{ - throw Helpers::EvaluationError ("Unknown symbol: " + symbol); -} - -double Expression::Scope::evaluateFunction (const String& functionName, const double* parameters, int numParams) const -{ - if (numParams > 0) - { - if (functionName == "min") - { - double v = parameters[0]; - for (int i = 1; i < numParams; ++i) - v = jmin (v, parameters[i]); - - return v; - } - else if (functionName == "max") - { - double v = parameters[0]; - for (int i = 1; i < numParams; ++i) - v = jmax (v, parameters[i]); - - return v; - } - else if (numParams == 1) - { - if (functionName == "sin") return sin (parameters[0]); - else if (functionName == "cos") return cos (parameters[0]); - else if (functionName == "tan") return tan (parameters[0]); - else if (functionName == "abs") return std::abs (parameters[0]); - } - } - - throw Helpers::EvaluationError ("Unknown function: \"" + functionName + "\""); -} - -void Expression::Scope::visitRelativeScope (const String& scopeName, Visitor&) const -{ - throw Helpers::EvaluationError ("Unknown symbol: " + scopeName); -} - -String Expression::Scope::getScopeUID() const -{ - return String::empty; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Expression.cpp ***/ - - -/*** Start of inlined file: juce_BlowFish.cpp ***/ -BEGIN_JUCE_NAMESPACE - -BlowFish::BlowFish (const void* const keyData, const int keyBytes) -{ - jassert (keyData != nullptr); - jassert (keyBytes > 0); - - static const uint32 initialPValues [18] = - { - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b - }; - - static const uint32 initialSValues [4 * 256] = - { - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 - }; - - memcpy (p, initialPValues, sizeof (p)); - - int i, j = 0; - for (i = 4; --i >= 0;) - { - s[i].malloc (256); - memcpy (s[i], initialSValues + i * 256, 256 * sizeof (uint32)); - } - - for (i = 0; i < 18; ++i) - { - uint32 d = 0; - - for (int k = 0; k < 4; ++k) - { - d = (d << 8) | static_cast (keyData)[j]; - - if (++j >= keyBytes) - j = 0; - } - - p[i] = initialPValues[i] ^ d; - } - - uint32 l = 0, r = 0; - - for (i = 0; i < 18; i += 2) - { - encrypt (l, r); - - p[i] = l; - p[i + 1] = r; - } - - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 256; j += 2) - { - encrypt (l, r); - - s[i][j] = l; - s[i][j + 1] = r; - } - } -} - -BlowFish::BlowFish (const BlowFish& other) -{ - for (int i = 4; --i >= 0;) - s[i].malloc (256); - - operator= (other); -} - -BlowFish& BlowFish::operator= (const BlowFish& other) -{ - memcpy (p, other.p, sizeof (p)); - - for (int i = 4; --i >= 0;) - memcpy (s[i], other.s[i], 256 * sizeof (uint32)); - - return *this; -} - -BlowFish::~BlowFish() -{ -} - -uint32 BlowFish::F (const uint32 x) const noexcept -{ - return ((s[0][(x >> 24) & 0xff] + s[1][(x >> 16) & 0xff]) - ^ s[2][(x >> 8) & 0xff]) + s[3][x & 0xff]; -} - -void BlowFish::encrypt (uint32& data1, uint32& data2) const noexcept -{ - uint32 l = data1; - uint32 r = data2; - - for (int i = 0; i < 16; ++i) - { - l ^= p[i]; - r ^= F(l); - std::swap (l, r); - } - - data1 = r ^ p[17]; - data2 = l ^ p[16]; -} - -void BlowFish::decrypt (uint32& data1, uint32& data2) const noexcept -{ - uint32 l = data1; - uint32 r = data2; - - for (int i = 17; i > 1; --i) - { - l ^= p[i]; - r ^= F(l); - std::swap (l, r); - } - - data1 = r ^ p[0]; - data2 = l ^ p[1]; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_BlowFish.cpp ***/ - - -/*** Start of inlined file: juce_MD5.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MD5::MD5() -{ - zerostruct (result); -} - -MD5::MD5 (const MD5& other) -{ - memcpy (result, other.result, sizeof (result)); -} - -MD5& MD5::operator= (const MD5& other) -{ - memcpy (result, other.result, sizeof (result)); - return *this; -} - -MD5::MD5 (const MemoryBlock& data) -{ - ProcessContext context; - context.processBlock (data.getData(), data.getSize()); - context.finish (result); -} - -MD5::MD5 (const void* data, const size_t numBytes) -{ - ProcessContext context; - context.processBlock (data, numBytes); - context.finish (result); -} - -MD5::MD5 (const String& text) -{ - ProcessContext context; - String::CharPointerType t (text.getCharPointer()); - - while (! t.isEmpty()) - { - // force the string into integer-sized unicode characters, to try to make it - // get the same results on all platforms + compilers. - uint32 unicodeChar = ByteOrder::swapIfBigEndian ((uint32) t.getAndAdvance()); - - context.processBlock (&unicodeChar, sizeof (unicodeChar)); - } - - context.finish (result); -} - -void MD5::processStream (InputStream& input, int64 numBytesToRead) -{ - ProcessContext context; - - if (numBytesToRead < 0) - numBytesToRead = std::numeric_limits::max(); - - while (numBytesToRead > 0) - { - uint8 tempBuffer [512]; - const int bytesRead = input.read (tempBuffer, (int) jmin (numBytesToRead, (int64) sizeof (tempBuffer))); - - if (bytesRead <= 0) - break; - - numBytesToRead -= bytesRead; - - context.processBlock (tempBuffer, bytesRead); - } - - context.finish (result); -} - -MD5::MD5 (InputStream& input, int64 numBytesToRead) -{ - processStream (input, numBytesToRead); -} - -MD5::MD5 (const File& file) -{ - FileInputStream fin (file); - - if (fin.getStatus().wasOk()) - processStream (fin, -1); - else - zerostruct (result); -} - -MD5::~MD5() -{ -} - -namespace MD5Functions -{ - void encode (void* const output, const void* const input, const int numBytes) noexcept - { - for (int i = 0; i < (numBytes >> 2); ++i) - static_cast (output)[i] = ByteOrder::swapIfBigEndian (static_cast (input) [i]); - } - - inline uint32 rotateLeft (const uint32 x, const uint32 n) noexcept { return (x << n) | (x >> (32 - n)); } - - inline uint32 F (const uint32 x, const uint32 y, const uint32 z) noexcept { return (x & y) | (~x & z); } - inline uint32 G (const uint32 x, const uint32 y, const uint32 z) noexcept { return (x & z) | (y & ~z); } - inline uint32 H (const uint32 x, const uint32 y, const uint32 z) noexcept { return x ^ y ^ z; } - inline uint32 I (const uint32 x, const uint32 y, const uint32 z) noexcept { return y ^ (x | ~z); } - - void FF (uint32& a, const uint32 b, const uint32 c, const uint32 d, const uint32 x, const uint32 s, const uint32 ac) noexcept - { - a += F (b, c, d) + x + ac; - a = rotateLeft (a, s) + b; - } - - void GG (uint32& a, const uint32 b, const uint32 c, const uint32 d, const uint32 x, const uint32 s, const uint32 ac) noexcept - { - a += G (b, c, d) + x + ac; - a = rotateLeft (a, s) + b; - } - - void HH (uint32& a, const uint32 b, const uint32 c, const uint32 d, const uint32 x, const uint32 s, const uint32 ac) noexcept - { - a += H (b, c, d) + x + ac; - a = rotateLeft (a, s) + b; - } - - void II (uint32& a, const uint32 b, const uint32 c, const uint32 d, const uint32 x, const uint32 s, const uint32 ac) noexcept - { - a += I (b, c, d) + x + ac; - a = rotateLeft (a, s) + b; - } -} - -MD5::ProcessContext::ProcessContext() -{ - state[0] = 0x67452301; - state[1] = 0xefcdab89; - state[2] = 0x98badcfe; - state[3] = 0x10325476; - - count[0] = 0; - count[1] = 0; -} - -void MD5::ProcessContext::processBlock (const void* const data, const size_t dataSize) -{ - int bufferPos = ((count[0] >> 3) & 0x3F); - - count[0] += (uint32) (dataSize << 3); - - if (count[0] < ((uint32) dataSize << 3)) - count[1]++; - - count[1] += (uint32) (dataSize >> 29); - - const size_t spaceLeft = 64 - bufferPos; - size_t i = 0; - - if (dataSize >= spaceLeft) - { - memcpy (buffer + bufferPos, data, spaceLeft); - transform (buffer); - - for (i = spaceLeft; i + 64 <= dataSize; i += 64) - transform (static_cast (data) + i); - - bufferPos = 0; - } - - memcpy (buffer + bufferPos, static_cast (data) + i, dataSize - i); -} - -void MD5::ProcessContext::finish (void* const result) -{ - unsigned char encodedLength[8]; - MD5Functions::encode (encodedLength, count, 8); - - // Pad out to 56 mod 64. - const int index = (uint32) ((count[0] >> 3) & 0x3f); - - const int paddingLength = (index < 56) ? (56 - index) - : (120 - index); - - uint8 paddingBuffer[64] = { 0x80 }; // first byte is 0x80, remaining bytes are zero. - processBlock (paddingBuffer, paddingLength); - - processBlock (encodedLength, 8); - - MD5Functions::encode (result, state, 16); - zerostruct (buffer); -} - -void MD5::ProcessContext::transform (const void* const bufferToTransform) -{ - using namespace MD5Functions; - - uint32 a = state[0]; - uint32 b = state[1]; - uint32 c = state[2]; - uint32 d = state[3]; - uint32 x[16]; - - encode (x, bufferToTransform, 64); - - enum Constants - { - S11 = 7, S12 = 12, S13 = 17, S14 = 22, S21 = 5, S22 = 9, S23 = 14, S24 = 20, - S31 = 4, S32 = 11, S33 = 16, S34 = 23, S41 = 6, S42 = 10, S43 = 15, S44 = 21 - }; - - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); - FF (c, d, a, b, x[ 2], S13, 0x242070db); FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); FF (d, a, b, c, x[ 5], S12, 0x4787c62a); - FF (c, d, a, b, x[ 6], S13, 0xa8304613); FF (b, c, d, a, x[ 7], S14, 0xfd469501); - FF (a, b, c, d, x[ 8], S11, 0x698098d8); FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); - FF (c, d, a, b, x[10], S13, 0xffff5bb1); FF (b, c, d, a, x[11], S14, 0x895cd7be); - FF (a, b, c, d, x[12], S11, 0x6b901122); FF (d, a, b, c, x[13], S12, 0xfd987193); - FF (c, d, a, b, x[14], S13, 0xa679438e); FF (b, c, d, a, x[15], S14, 0x49b40821); - - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); GG (d, a, b, c, x[ 6], S22, 0xc040b340); - GG (c, d, a, b, x[11], S23, 0x265e5a51); GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); GG (d, a, b, c, x[10], S22, 0x02441453); - GG (c, d, a, b, x[15], S23, 0xd8a1e681); GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); GG (d, a, b, c, x[14], S22, 0xc33707d6); - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); GG (b, c, d, a, x[ 8], S24, 0x455a14ed); - GG (a, b, c, d, x[13], S21, 0xa9e3e905); GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); - - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); HH (d, a, b, c, x[ 8], S32, 0x8771f681); - HH (c, d, a, b, x[11], S33, 0x6d9d6122); HH (b, c, d, a, x[14], S34, 0xfde5380c); - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); HH (b, c, d, a, x[10], S34, 0xbebfbc70); - HH (a, b, c, d, x[13], S31, 0x289b7ec6); HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); HH (b, c, d, a, x[ 6], S34, 0x04881d05); - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); HH (d, a, b, c, x[12], S32, 0xe6db99e5); - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); - - II (a, b, c, d, x[ 0], S41, 0xf4292244); II (d, a, b, c, x[ 7], S42, 0x432aff97); - II (c, d, a, b, x[14], S43, 0xab9423a7); II (b, c, d, a, x[ 5], S44, 0xfc93a039); - II (a, b, c, d, x[12], S41, 0x655b59c3); II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); - II (c, d, a, b, x[10], S43, 0xffeff47d); II (b, c, d, a, x[ 1], S44, 0x85845dd1); - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); II (d, a, b, c, x[15], S42, 0xfe2ce6e0); - II (c, d, a, b, x[ 6], S43, 0xa3014314); II (b, c, d, a, x[13], S44, 0x4e0811a1); - II (a, b, c, d, x[ 4], S41, 0xf7537e82); II (d, a, b, c, x[11], S42, 0xbd3af235); - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); II (b, c, d, a, x[ 9], S44, 0xeb86d391); - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - zerostruct (x); -} - -MemoryBlock MD5::getRawChecksumData() const -{ - return MemoryBlock (result, sizeof (result)); -} - -String MD5::toHexString() const -{ - return String::toHexString (result, sizeof (result), 0); -} - -bool MD5::operator== (const MD5& other) const -{ - return memcmp (result, other.result, sizeof (result)) == 0; -} - -bool MD5::operator!= (const MD5& other) const -{ - return ! operator== (other); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MD5.cpp ***/ - - -/*** Start of inlined file: juce_SHA256.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class SHA256Processor -{ -public: - SHA256Processor() noexcept - : length (0) - { - state[0] = 0x6a09e667; - state[1] = 0xbb67ae85; - state[2] = 0x3c6ef372; - state[3] = 0xa54ff53a; - state[4] = 0x510e527f; - state[5] = 0x9b05688c; - state[6] = 0x1f83d9ab; - state[7] = 0x5be0cd19; - } - - // expects 64 bytes of data - void processFullBlock (const void* const data) noexcept - { - const uint32 constants[] = - { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - }; - - uint32 block[16], s[8]; - memcpy (s, state, sizeof (s)); - - for (uint32 j = 0; j < 64; j += 16) - { - #define JUCE_SHA256(i) s[(7 - i) & 7] += S1 (s[(4 - i) & 7]) + ch (s[(4 - i) & 7], s[(5 - i) & 7], s[(6 - i) & 7]) + constants[i + j] \ - + (j != 0 ? (block[i & 15] += s1 (block[(i - 2) & 15]) + block[(i - 7) & 15] + s0 (block[(i - 15) & 15])) \ - : (block[i] = ByteOrder::bigEndianInt (addBytesToPointer (data, i * 4)))); \ - s[(3 - i) & 7] += s[(7 - i) & 7]; \ - s[(7 - i) & 7] += S0 (s[(0 - i) & 7]) + maj (s[(0 - i) & 7], s[(1 - i) & 7], s[(2 - i) & 7]) - - JUCE_SHA256(0); JUCE_SHA256(1); JUCE_SHA256(2); JUCE_SHA256(3); JUCE_SHA256(4); JUCE_SHA256(5); JUCE_SHA256(6); JUCE_SHA256(7); - JUCE_SHA256(8); JUCE_SHA256(9); JUCE_SHA256(10); JUCE_SHA256(11); JUCE_SHA256(12); JUCE_SHA256(13); JUCE_SHA256(14); JUCE_SHA256(15); - #undef JUCE_SHA256 - } - - for (int i = 0; i < 8; ++i) - state[i] += s[i]; - - length += 64; - } - - void processFinalBlock (const void* const data, int numBytes) noexcept - { - jassert (numBytes < 64); - - length += numBytes; - length *= 8; // (the length is stored as a count of bits, not bytes) - - uint8 finalBlocks[128]; - - memcpy (finalBlocks, data, numBytes); - finalBlocks [numBytes++] = 128; // append a '1' bit - - while (numBytes != 56 && numBytes < 64 + 56) - finalBlocks [numBytes++] = 0; // pad with zeros.. - - for (int i = 8; --i >= 0;) - finalBlocks [numBytes++] = (uint8) (length >> (i * 8)); // append the length. - - jassert (numBytes == 64 || numBytes == 128); - - processFullBlock (finalBlocks); - - if (numBytes > 64) - processFullBlock (finalBlocks + 64); - } - - void copyResult (uint8* result) const noexcept - { - for (int i = 0; i < 8; ++i) - { - *result++ = (uint8) (state[i] >> 24); - *result++ = (uint8) (state[i] >> 16); - *result++ = (uint8) (state[i] >> 8); - *result++ = (uint8) state[i]; - } - } - - void processStream (InputStream& input, int64 numBytesToRead, uint8* const result) - { - if (numBytesToRead < 0) - numBytesToRead = std::numeric_limits::max(); - - for (;;) - { - uint8 buffer [64]; - const int bytesRead = input.read (buffer, (int) jmin (numBytesToRead, (int64) sizeof (buffer))); - - if (bytesRead < sizeof (buffer)) - { - processFinalBlock (buffer, bytesRead); - break; - } - - numBytesToRead -= sizeof (buffer); - processFullBlock (buffer); - } - - copyResult (result); - } - -private: - uint32 state[8]; - uint64 length; - - static inline uint32 rotate (const uint32 x, const uint32 y) noexcept { return (x >> y) | (x << (32 - y)); } - static inline uint32 ch (const uint32 x, const uint32 y, const uint32 z) noexcept { return z ^ ((y ^ z) & x); } - static inline uint32 maj (const uint32 x, const uint32 y, const uint32 z) noexcept { return y ^ ((y ^ z) & (x ^ y)); } - - static inline uint32 s0 (const uint32 x) noexcept { return rotate (x, 7) ^ rotate (x, 18) ^ (x >> 3); } - static inline uint32 s1 (const uint32 x) noexcept { return rotate (x, 17) ^ rotate (x, 19) ^ (x >> 10); } - static inline uint32 S0 (const uint32 x) noexcept { return rotate (x, 2) ^ rotate (x, 13) ^ rotate (x, 22); } - static inline uint32 S1 (const uint32 x) noexcept { return rotate (x, 6) ^ rotate (x, 11) ^ rotate (x, 25); } - - JUCE_DECLARE_NON_COPYABLE (SHA256Processor); -}; - -SHA256::SHA256() -{ - zerostruct (result); -} - -SHA256::~SHA256() {} - -SHA256::SHA256 (const SHA256& other) -{ - memcpy (result, other.result, sizeof (result)); -} - -SHA256& SHA256::operator= (const SHA256& other) -{ - memcpy (result, other.result, sizeof (result)); - return *this; -} - -SHA256::SHA256 (const MemoryBlock& data) -{ - MemoryInputStream m (data, false); - SHA256Processor processor; - processor.processStream (m, -1, result); -} - -SHA256::SHA256 (const void* const data, const size_t numBytes) -{ - MemoryInputStream m (data, numBytes, false); - SHA256Processor processor; - processor.processStream (m, -1, result); -} - -SHA256::SHA256 (InputStream& input, const int64 numBytesToRead) -{ - SHA256Processor processor; - processor.processStream (input, numBytesToRead, result); -} - -SHA256::SHA256 (const File& file) -{ - FileInputStream fin (file); - - if (fin.getStatus().wasOk()) - { - SHA256Processor processor; - processor.processStream (fin, -1, result); - } - else - { - zerostruct (result); - } -} - -MemoryBlock SHA256::getRawData() const -{ - return MemoryBlock (result, sizeof (result)); -} - -String SHA256::toHexString() const -{ - return String::toHexString (result, sizeof (result), 0); -} - -bool SHA256::operator== (const SHA256& other) const noexcept { return memcmp (result, other.result, sizeof (result)) == 0; } -bool SHA256::operator!= (const SHA256& other) const noexcept { return ! operator== (other); } - -#if JUCE_UNIT_TESTS - -class SHA256Tests : public UnitTest -{ -public: - SHA256Tests() : UnitTest ("SHA-256") {} - - void runTest() - { - beginTest ("SHA-256"); - - { - char n[] = ""; - SHA256 sha (n, 0); - expectEquals (sha.toHexString(), String ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")); - } - - { - const char n[] = "The quick brown fox jumps over the lazy dog"; - SHA256 sha (n, sizeof (n) - 1); - expectEquals (sha.toHexString(), String ("d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592")); - } - - { - const char n[] = "The quick brown fox jumps over the lazy dog."; - SHA256 sha (n, sizeof (n) - 1); - expectEquals (sha.toHexString(), String ("ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c")); - } - } -}; - -static SHA256Tests sha256UnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_SHA256.cpp ***/ - - -/*** Start of inlined file: juce_Primes.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace PrimesHelpers -{ - void createSmallSieve (const int numBits, BigInteger& result) - { - result.setBit (numBits); - result.clearBit (numBits); // to enlarge the array - - result.setBit (0); - int n = 2; - - do - { - for (int i = n + n; i < numBits; i += n) - result.setBit (i); - - n = result.findNextClearBit (n + 1); - } - while (n <= (numBits >> 1)); - } - - void bigSieve (const BigInteger& base, const int numBits, BigInteger& result, - const BigInteger& smallSieve, const int smallSieveSize) - { - jassert (! base[0]); // must be even! - - result.setBit (numBits); - result.clearBit (numBits); // to enlarge the array - - int index = smallSieve.findNextClearBit (0); - - do - { - const int prime = (index << 1) + 1; - - BigInteger r (base), remainder; - r.divideBy (prime, remainder); - - int i = prime - remainder.getBitRangeAsInt (0, 32); - - if (r.isZero()) - i += prime; - - if ((i & 1) == 0) - i += prime; - - i = (i - 1) >> 1; - - while (i < numBits) - { - result.setBit (i); - i += prime; - } - - index = smallSieve.findNextClearBit (index + 1); - } - while (index < smallSieveSize); - } - - bool findCandidate (const BigInteger& base, const BigInteger& sieve, - const int numBits, BigInteger& result, const int certainty) - { - for (int i = 0; i < numBits; ++i) - { - if (! sieve[i]) - { - result = base + (unsigned int) ((i << 1) + 1); - - if (Primes::isProbablyPrime (result, certainty)) - return true; - } - } - - return false; - } - - bool passesMillerRabin (const BigInteger& n, int iterations) - { - const BigInteger one (1), two (2); - const BigInteger nMinusOne (n - one); - - BigInteger d (nMinusOne); - const int s = d.findNextSetBit (0); - d >>= s; - - BigInteger smallPrimes; - int numBitsInSmallPrimes = 0; - - for (;;) - { - numBitsInSmallPrimes += 256; - createSmallSieve (numBitsInSmallPrimes, smallPrimes); - - const int numPrimesFound = numBitsInSmallPrimes - smallPrimes.countNumberOfSetBits(); - - if (numPrimesFound > iterations + 1) - break; - } - - int smallPrime = 2; - - while (--iterations >= 0) - { - smallPrime = smallPrimes.findNextClearBit (smallPrime + 1); - - BigInteger r (smallPrime); - r.exponentModulo (d, n); - - if (r != one && r != nMinusOne) - { - for (int j = 0; j < s; ++j) - { - r.exponentModulo (two, n); - - if (r == nMinusOne) - break; - } - - if (r != nMinusOne) - return false; - } - } - - return true; - } -} - -BigInteger Primes::createProbablePrime (const int bitLength, - const int certainty, - const int* randomSeeds, - int numRandomSeeds) -{ - using namespace PrimesHelpers; - int defaultSeeds [16]; - - if (numRandomSeeds <= 0) - { - randomSeeds = defaultSeeds; - numRandomSeeds = numElementsInArray (defaultSeeds); - Random r1, r2; - - for (int j = 10; --j >= 0;) - { - r1.setSeedRandomly(); - - for (int i = numRandomSeeds; --i >= 0;) - defaultSeeds[i] ^= r1.nextInt() ^ r2.nextInt(); - } - } - - BigInteger smallSieve; - const int smallSieveSize = 15000; - createSmallSieve (smallSieveSize, smallSieve); - - BigInteger p; - - for (int i = numRandomSeeds; --i >= 0;) - { - BigInteger p2; - - Random r (randomSeeds[i]); - r.fillBitsRandomly (p2, 0, bitLength); - - p ^= p2; - } - - p.setBit (bitLength - 1); - p.clearBit (0); - - const int searchLen = jmax (1024, (bitLength / 20) * 64); - - while (p.getHighestBit() < bitLength) - { - p += 2 * searchLen; - - BigInteger sieve; - bigSieve (p, searchLen, sieve, - smallSieve, smallSieveSize); - - BigInteger candidate; - - if (findCandidate (p, sieve, searchLen, candidate, certainty)) - return candidate; - } - - jassertfalse; - return BigInteger(); -} - -bool Primes::isProbablyPrime (const BigInteger& number, const int certainty) -{ - using namespace PrimesHelpers; - - if (! number[0]) - return false; - - if (number.getHighestBit() <= 10) - { - const int num = number.getBitRangeAsInt (0, 10); - - for (int i = num / 2; --i > 1;) - if (num % i == 0) - return false; - - return true; - } - else - { - if (number.findGreatestCommonDivisor (2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23) != 1) - return false; - - return passesMillerRabin (number, certainty); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Primes.cpp ***/ - - -/*** Start of inlined file: juce_RSAKey.cpp ***/ -BEGIN_JUCE_NAMESPACE - -RSAKey::RSAKey() -{ -} - -RSAKey::RSAKey (const String& s) -{ - if (s.containsChar (',')) - { - part1.parseString (s.upToFirstOccurrenceOf (",", false, false), 16); - part2.parseString (s.fromFirstOccurrenceOf (",", false, false), 16); - } - else - { - // the string needs to be two hex numbers, comma-separated.. - jassertfalse; - } -} - -RSAKey::~RSAKey() -{ -} - -bool RSAKey::operator== (const RSAKey& other) const noexcept -{ - return part1 == other.part1 && part2 == other.part2; -} - -bool RSAKey::operator!= (const RSAKey& other) const noexcept -{ - return ! operator== (other); -} - -String RSAKey::toString() const -{ - return part1.toString (16) + "," + part2.toString (16); -} - -bool RSAKey::applyToValue (BigInteger& value) const -{ - if (part1.isZero() || part2.isZero() || value <= 0) - { - jassertfalse; // using an uninitialised key - value.clear(); - return false; - } - - BigInteger result; - - while (! value.isZero()) - { - result *= part2; - - BigInteger remainder; - value.divideBy (part2, remainder); - - remainder.exponentModulo (part1, part2); - - result += remainder; - } - - value.swapWith (result); - return true; -} - -BigInteger RSAKey::findBestCommonDivisor (const BigInteger& p, const BigInteger& q) -{ - // try 3, 5, 9, 17, etc first because these only contain 2 bits and so - // are fast to divide + multiply - for (int i = 2; i <= 65536; i *= 2) - { - const BigInteger e (1 + i); - - if (e.findGreatestCommonDivisor (p).isOne() && e.findGreatestCommonDivisor (q).isOne()) - return e; - } - - BigInteger e (4); - - while (! (e.findGreatestCommonDivisor (p).isOne() && e.findGreatestCommonDivisor (q).isOne())) - ++e; - - return e; -} - -void RSAKey::createKeyPair (RSAKey& publicKey, RSAKey& privateKey, - const int numBits, const int* randomSeeds, const int numRandomSeeds) -{ - jassert (numBits > 16); // not much point using less than this.. - jassert (numRandomSeeds == 0 || numRandomSeeds >= 2); // you need to provide plenty of seeds here! - - BigInteger p (Primes::createProbablePrime (numBits / 2, 30, randomSeeds, numRandomSeeds / 2)); - BigInteger q (Primes::createProbablePrime (numBits - numBits / 2, 30, randomSeeds == nullptr ? 0 : (randomSeeds + numRandomSeeds / 2), numRandomSeeds - numRandomSeeds / 2)); - - const BigInteger n (p * q); - const BigInteger m (--p * --q); - const BigInteger e (findBestCommonDivisor (p, q)); - - BigInteger d (e); - d.inverseModulo (m); - - publicKey.part1 = e; - publicKey.part2 = n; - - privateKey.part1 = d; - privateKey.part2 = n; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_RSAKey.cpp ***/ - - -/*** Start of inlined file: juce_InputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -char InputStream::readByte() -{ - char temp = 0; - read (&temp, 1); - return temp; -} - -bool InputStream::readBool() -{ - return readByte() != 0; -} - -short InputStream::readShort() -{ - char temp[2]; - - if (read (temp, 2) == 2) - return (short) ByteOrder::littleEndianShort (temp); - - return 0; -} - -short InputStream::readShortBigEndian() -{ - char temp[2]; - - if (read (temp, 2) == 2) - return (short) ByteOrder::bigEndianShort (temp); - - return 0; -} - -int InputStream::readInt() -{ - char temp[4]; - - if (read (temp, 4) == 4) - return (int) ByteOrder::littleEndianInt (temp); - - return 0; -} - -int InputStream::readIntBigEndian() -{ - char temp[4]; - - if (read (temp, 4) == 4) - return (int) ByteOrder::bigEndianInt (temp); - - return 0; -} - -int InputStream::readCompressedInt() -{ - const unsigned char sizeByte = readByte(); - if (sizeByte == 0) - return 0; - - const int numBytes = (sizeByte & 0x7f); - if (numBytes > 4) - { - jassertfalse; // trying to read corrupt data - this method must only be used - // to read data that was written by OutputStream::writeCompressedInt() - return 0; - } - - char bytes[4] = { 0, 0, 0, 0 }; - if (read (bytes, numBytes) != numBytes) - return 0; - - const int num = (int) ByteOrder::littleEndianInt (bytes); - return (sizeByte >> 7) ? -num : num; -} - -int64 InputStream::readInt64() -{ - union { uint8 asBytes[8]; uint64 asInt64; } n; - - if (read (n.asBytes, 8) == 8) - return (int64) ByteOrder::swapIfBigEndian (n.asInt64); - - return 0; -} - -int64 InputStream::readInt64BigEndian() -{ - union { uint8 asBytes[8]; uint64 asInt64; } n; - - if (read (n.asBytes, 8) == 8) - return (int64) ByteOrder::swapIfLittleEndian (n.asInt64); - - return 0; -} - -float InputStream::readFloat() -{ - // the union below relies on these types being the same size... - static_jassert (sizeof (int32) == sizeof (float)); - union { int32 asInt; float asFloat; } n; - n.asInt = (int32) readInt(); - return n.asFloat; -} - -float InputStream::readFloatBigEndian() -{ - union { int32 asInt; float asFloat; } n; - n.asInt = (int32) readIntBigEndian(); - return n.asFloat; -} - -double InputStream::readDouble() -{ - union { int64 asInt; double asDouble; } n; - n.asInt = readInt64(); - return n.asDouble; -} - -double InputStream::readDoubleBigEndian() -{ - union { int64 asInt; double asDouble; } n; - n.asInt = readInt64BigEndian(); - return n.asDouble; -} - -String InputStream::readString() -{ - MemoryBlock buffer (256); - char* data = static_cast (buffer.getData()); - size_t i = 0; - - while ((data[i] = readByte()) != 0) - { - if (++i >= buffer.getSize()) - { - buffer.setSize (buffer.getSize() + 512); - data = static_cast (buffer.getData()); - } - } - - return String::fromUTF8 (data, (int) i); -} - -String InputStream::readNextLine() -{ - MemoryBlock buffer (256); - char* data = static_cast (buffer.getData()); - size_t i = 0; - - while ((data[i] = readByte()) != 0) - { - if (data[i] == '\n') - break; - - if (data[i] == '\r') - { - const int64 lastPos = getPosition(); - - if (readByte() != '\n') - setPosition (lastPos); - - break; - } - - if (++i >= buffer.getSize()) - { - buffer.setSize (buffer.getSize() + 512); - data = static_cast (buffer.getData()); - } - } - - return String::fromUTF8 (data, (int) i); -} - -int InputStream::readIntoMemoryBlock (MemoryBlock& block, int numBytes) -{ - MemoryOutputStream mo (block, true); - return mo.writeFromInputStream (*this, numBytes); -} - -String InputStream::readEntireStreamAsString() -{ - MemoryOutputStream mo; - mo.writeFromInputStream (*this, -1); - return mo.toString(); -} - -void InputStream::skipNextBytes (int64 numBytesToSkip) -{ - if (numBytesToSkip > 0) - { - const int skipBufferSize = (int) jmin (numBytesToSkip, (int64) 16384); - HeapBlock temp (skipBufferSize); - - while (numBytesToSkip > 0 && ! isExhausted()) - numBytesToSkip -= read (temp, (int) jmin (numBytesToSkip, (int64) skipBufferSize)); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_InputStream.cpp ***/ - - -/*** Start of inlined file: juce_OutputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -#if JUCE_DEBUG - -struct DanglingStreamChecker -{ - DanglingStreamChecker() {} - - ~DanglingStreamChecker() - { - /* - It's always a bad idea to leak any object, but if you're leaking output - streams, then there's a good chance that you're failing to flush a file - to disk properly, which could result in corrupted data and other similar - nastiness.. - */ - jassert (activeStreams.size() == 0); - } - - Array activeStreams; -}; - -static DanglingStreamChecker danglingStreamChecker; -#endif - -OutputStream::OutputStream() - : newLineString (NewLine::getDefault()) -{ - #if JUCE_DEBUG - danglingStreamChecker.activeStreams.add (this); - #endif -} - -OutputStream::~OutputStream() -{ - #if JUCE_DEBUG - danglingStreamChecker.activeStreams.removeValue (this); - #endif -} - -void OutputStream::writeBool (const bool b) -{ - writeByte (b ? (char) 1 - : (char) 0); -} - -void OutputStream::writeByte (char byte) -{ - write (&byte, 1); -} - -void OutputStream::writeRepeatedByte (uint8 byte, int numTimesToRepeat) -{ - while (--numTimesToRepeat >= 0) - writeByte (byte); -} - -void OutputStream::writeShort (short value) -{ - const unsigned short v = ByteOrder::swapIfBigEndian ((unsigned short) value); - write (&v, 2); -} - -void OutputStream::writeShortBigEndian (short value) -{ - const unsigned short v = ByteOrder::swapIfLittleEndian ((unsigned short) value); - write (&v, 2); -} - -void OutputStream::writeInt (int value) -{ - const unsigned int v = ByteOrder::swapIfBigEndian ((unsigned int) value); - write (&v, 4); -} - -void OutputStream::writeIntBigEndian (int value) -{ - const unsigned int v = ByteOrder::swapIfLittleEndian ((unsigned int) value); - write (&v, 4); -} - -void OutputStream::writeCompressedInt (int value) -{ - unsigned int un = (value < 0) ? (unsigned int) -value - : (unsigned int) value; - - uint8 data[5]; - int num = 0; - - while (un > 0) - { - data[++num] = (uint8) un; - un >>= 8; - } - - data[0] = (uint8) num; - - if (value < 0) - data[0] |= 0x80; - - write (data, num + 1); -} - -void OutputStream::writeInt64 (int64 value) -{ - const uint64 v = ByteOrder::swapIfBigEndian ((uint64) value); - write (&v, 8); -} - -void OutputStream::writeInt64BigEndian (int64 value) -{ - const uint64 v = ByteOrder::swapIfLittleEndian ((uint64) value); - write (&v, 8); -} - -void OutputStream::writeFloat (float value) -{ - union { int asInt; float asFloat; } n; - n.asFloat = value; - writeInt (n.asInt); -} - -void OutputStream::writeFloatBigEndian (float value) -{ - union { int asInt; float asFloat; } n; - n.asFloat = value; - writeIntBigEndian (n.asInt); -} - -void OutputStream::writeDouble (double value) -{ - union { int64 asInt; double asDouble; } n; - n.asDouble = value; - writeInt64 (n.asInt); -} - -void OutputStream::writeDoubleBigEndian (double value) -{ - union { int64 asInt; double asDouble; } n; - n.asDouble = value; - writeInt64BigEndian (n.asInt); -} - -void OutputStream::writeString (const String& text) -{ - // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind - // if lots of large, persistent strings were to be written to streams). - const int numBytes = text.getNumBytesAsUTF8() + 1; - HeapBlock temp (numBytes); - text.copyToUTF8 (temp, numBytes); - write (temp, numBytes); -} - -void OutputStream::writeText (const String& text, const bool asUTF16, - const bool writeUTF16ByteOrderMark) -{ - if (asUTF16) - { - if (writeUTF16ByteOrderMark) - write ("\x0ff\x0fe", 2); - - String::CharPointerType src (text.getCharPointer()); - bool lastCharWasReturn = false; - - for (;;) - { - const juce_wchar c = src.getAndAdvance(); - - if (c == 0) - break; - - if (c == '\n' && ! lastCharWasReturn) - writeShort ((short) '\r'); - - lastCharWasReturn = (c == L'\r'); - writeShort ((short) c); - } - } - else - { - const char* src = text.toUTF8(); - const char* t = src; - - for (;;) - { - if (*t == '\n') - { - if (t > src) - write (src, (int) (t - src)); - - write ("\r\n", 2); - src = t + 1; - } - else if (*t == '\r') - { - if (t[1] == '\n') - ++t; - } - else if (*t == 0) - { - if (t > src) - write (src, (int) (t - src)); - - break; - } - - ++t; - } - } -} - -int OutputStream::writeFromInputStream (InputStream& source, int64 numBytesToWrite) -{ - if (numBytesToWrite < 0) - numBytesToWrite = std::numeric_limits::max(); - - int numWritten = 0; - - while (numBytesToWrite > 0 && ! source.isExhausted()) - { - char buffer [8192]; - const int num = source.read (buffer, (int) jmin (numBytesToWrite, (int64) sizeof (buffer))); - - if (num <= 0) - break; - - write (buffer, num); - - numBytesToWrite -= num; - numWritten += num; - } - - return numWritten; -} - -void OutputStream::setNewLineString (const String& newLineString_) -{ - newLineString = newLineString_; -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const int number) -{ - return stream << String (number); -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const double number) -{ - return stream << String (number); -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const char character) -{ - stream.writeByte (character); - return stream; -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const char* const text) -{ - stream.write (text, (int) strlen (text)); - return stream; -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const MemoryBlock& data) -{ - stream.write (data.getData(), (int) data.getSize()); - return stream; -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const File& fileToRead) -{ - const ScopedPointer in (fileToRead.createInputStream()); - - if (in != nullptr) - stream.writeFromInputStream (*in, -1); - - return stream; -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const NewLine&) -{ - return stream << stream.getNewLineString(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_OutputStream.cpp ***/ - - -/*** Start of inlined file: juce_DirectoryIterator.cpp ***/ -BEGIN_JUCE_NAMESPACE - -DirectoryIterator::DirectoryIterator (const File& directory, - bool isRecursive_, - const String& wildCard_, - const int whatToLookFor_) - : fileFinder (directory, isRecursive_ ? "*" : wildCard_), - wildCard (wildCard_), - path (File::addTrailingSeparator (directory.getFullPathName())), - index (-1), - totalNumFiles (-1), - whatToLookFor (whatToLookFor_), - isRecursive (isRecursive_), - hasBeenAdvanced (false) -{ - // you have to specify the type of files you're looking for! - jassert ((whatToLookFor_ & (File::findFiles | File::findDirectories)) != 0); - jassert (whatToLookFor_ > 0 && whatToLookFor_ <= 7); -} - -DirectoryIterator::~DirectoryIterator() -{ -} - -bool DirectoryIterator::next() -{ - return next (nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); -} - -bool DirectoryIterator::next (bool* const isDirResult, bool* const isHiddenResult, int64* const fileSize, - Time* const modTime, Time* const creationTime, bool* const isReadOnly) -{ - hasBeenAdvanced = true; - - if (subIterator != nullptr) - { - if (subIterator->next (isDirResult, isHiddenResult, fileSize, modTime, creationTime, isReadOnly)) - return true; - - subIterator = nullptr; - } - - String filename; - bool isDirectory, isHidden; - while (fileFinder.next (filename, &isDirectory, &isHidden, fileSize, modTime, creationTime, isReadOnly)) - { - ++index; - - if (! filename.containsOnly (".")) - { - const File fileFound (path + filename, 0); - bool matches = false; - - if (isDirectory) - { - if (isRecursive && ((whatToLookFor & File::ignoreHiddenFiles) == 0 || ! isHidden)) - subIterator = new DirectoryIterator (fileFound, true, wildCard, whatToLookFor); - - matches = (whatToLookFor & File::findDirectories) != 0; - } - else - { - matches = (whatToLookFor & File::findFiles) != 0; - } - - // if recursive, we're not relying on the OS iterator to do the wildcard match, so do it now.. - if (matches && isRecursive) - matches = filename.matchesWildcard (wildCard, ! File::areFileNamesCaseSensitive()); - - if (matches && (whatToLookFor & File::ignoreHiddenFiles) != 0) - matches = ! isHidden; - - if (matches) - { - currentFile = fileFound; - if (isHiddenResult != nullptr) *isHiddenResult = isHidden; - if (isDirResult != nullptr) *isDirResult = isDirectory; - - return true; - } - else if (subIterator != nullptr) - { - return next(); - } - } - } - - return false; -} - -const File& DirectoryIterator::getFile() const -{ - if (subIterator != nullptr && subIterator->hasBeenAdvanced) - return subIterator->getFile(); - - // You need to call DirectoryIterator::next() before asking it for the file that it found! - jassert (hasBeenAdvanced); - - return currentFile; -} - -float DirectoryIterator::getEstimatedProgress() const -{ - if (totalNumFiles < 0) - totalNumFiles = File (path).getNumberOfChildFiles (File::findFilesAndDirectories); - - if (totalNumFiles <= 0) - return 0.0f; - - const float detailedIndex = (subIterator != nullptr) ? index + subIterator->getEstimatedProgress() - : (float) index; - - return detailedIndex / totalNumFiles; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_DirectoryIterator.cpp ***/ - - -/*** Start of inlined file: juce_File.cpp ***/ -#if ! JUCE_WINDOWS - #include -#endif - -BEGIN_JUCE_NAMESPACE - -File::File (const String& fullPathName) - : fullPath (parseAbsolutePath (fullPathName)) -{ -} - -File::File (const String& path, int) - : fullPath (path) -{ -} - -File File::createFileWithoutCheckingPath (const String& path) -{ - return File (path, 0); -} - -File::File (const File& other) - : fullPath (other.fullPath) -{ -} - -File& File::operator= (const String& newPath) -{ - fullPath = parseAbsolutePath (newPath); - return *this; -} - -File& File::operator= (const File& other) -{ - fullPath = other.fullPath; - return *this; -} - -const File File::nonexistent; - -String File::parseAbsolutePath (const String& p) -{ - if (p.isEmpty()) - return String::empty; - -#if JUCE_WINDOWS - // Windows.. - String path (p.replaceCharacter ('/', '\\')); - - if (path.startsWithChar (File::separator)) - { - if (path[1] != File::separator) - { - /* When you supply a raw string to the File object constructor, it must be an absolute path. - If you're trying to parse a string that may be either a relative path or an absolute path, - you MUST provide a context against which the partial path can be evaluated - you can do - this by simply using File::getChildFile() instead of the File constructor. E.g. saying - "File::getCurrentWorkingDirectory().getChildFile (myUnknownPath)" would return an absolute - path if that's what was supplied, or would evaluate a partial path relative to the CWD. - */ - jassertfalse; - - path = File::getCurrentWorkingDirectory().getFullPathName().substring (0, 2) + path; - } - } - else if (! path.containsChar (':')) - { - /* When you supply a raw string to the File object constructor, it must be an absolute path. - If you're trying to parse a string that may be either a relative path or an absolute path, - you MUST provide a context against which the partial path can be evaluated - you can do - this by simply using File::getChildFile() instead of the File constructor. E.g. saying - "File::getCurrentWorkingDirectory().getChildFile (myUnknownPath)" would return an absolute - path if that's what was supplied, or would evaluate a partial path relative to the CWD. - */ - jassertfalse; - - return File::getCurrentWorkingDirectory().getChildFile (path).getFullPathName(); - } -#else - // Mac or Linux.. - - // Yes, I know it's legal for a unix pathname to contain a backslash, but this assertion is here - // to catch anyone who's trying to run code that was written on Windows with hard-coded path names. - // If that's why you've ended up here, use File::getChildFile() to build your paths instead. - jassert ((! p.containsChar ('\\')) || (p.indexOfChar ('/') >= 0 && p.indexOfChar ('/') < p.indexOfChar ('\\'))); - - String path (p); - - if (path.startsWithChar ('~')) - { - if (path[1] == File::separator || path[1] == 0) - { - // expand a name of the form "~/abc" - path = File::getSpecialLocation (File::userHomeDirectory).getFullPathName() - + path.substring (1); - } - else - { - // expand a name of type "~dave/abc" - const String userName (path.substring (1).upToFirstOccurrenceOf ("/", false, false)); - - struct passwd* const pw = getpwnam (userName.toUTF8()); - if (pw != nullptr) - path = addTrailingSeparator (pw->pw_dir) + path.fromFirstOccurrenceOf ("/", false, false); - } - } - else if (! path.startsWithChar (File::separator)) - { - /* When you supply a raw string to the File object constructor, it must be an absolute path. - If you're trying to parse a string that may be either a relative path or an absolute path, - you MUST provide a context against which the partial path can be evaluated - you can do - this by simply using File::getChildFile() instead of the File constructor. E.g. saying - "File::getCurrentWorkingDirectory().getChildFile (myUnknownPath)" would return an absolute - path if that's what was supplied, or would evaluate a partial path relative to the CWD. - */ - jassert (path.startsWith ("./") || path.startsWith ("../")); // (assume that a path "./xyz" is deliberately intended to be relative to the CWD) - - return File::getCurrentWorkingDirectory().getChildFile (path).getFullPathName(); - } -#endif - - while (path.endsWithChar (separator) && path != separatorString) // careful not to turn a single "/" into an empty string. - path = path.dropLastCharacters (1); - - return path; -} - -String File::addTrailingSeparator (const String& path) -{ - return path.endsWithChar (File::separator) ? path - : path + File::separator; -} - -#if JUCE_LINUX - #define NAMES_ARE_CASE_SENSITIVE 1 -#endif - -bool File::areFileNamesCaseSensitive() -{ - #if NAMES_ARE_CASE_SENSITIVE - return true; - #else - return false; - #endif -} - -bool File::operator== (const File& other) const -{ - #if NAMES_ARE_CASE_SENSITIVE - return fullPath == other.fullPath; - #else - return fullPath.equalsIgnoreCase (other.fullPath); - #endif -} - -bool File::operator!= (const File& other) const -{ - return ! operator== (other); -} - -bool File::operator< (const File& other) const -{ - #if NAMES_ARE_CASE_SENSITIVE - return fullPath < other.fullPath; - #else - return fullPath.compareIgnoreCase (other.fullPath) < 0; - #endif -} - -bool File::operator> (const File& other) const -{ - #if NAMES_ARE_CASE_SENSITIVE - return fullPath > other.fullPath; - #else - return fullPath.compareIgnoreCase (other.fullPath) > 0; - #endif -} - -bool File::setReadOnly (const bool shouldBeReadOnly, - const bool applyRecursively) const -{ - bool worked = true; - - if (applyRecursively && isDirectory()) - { - Array subFiles; - findChildFiles (subFiles, File::findFilesAndDirectories, false); - - for (int i = subFiles.size(); --i >= 0;) - worked = subFiles.getReference(i).setReadOnly (shouldBeReadOnly, true) && worked; - } - - return setFileReadOnlyInternal (shouldBeReadOnly) && worked; -} - -bool File::deleteRecursively() const -{ - bool worked = true; - - if (isDirectory()) - { - Array subFiles; - findChildFiles (subFiles, File::findFilesAndDirectories, false); - - for (int i = subFiles.size(); --i >= 0;) - worked = subFiles.getReference(i).deleteRecursively() && worked; - } - - return deleteFile() && worked; -} - -bool File::moveFileTo (const File& newFile) const -{ - if (newFile.fullPath == fullPath) - return true; - - #if ! NAMES_ARE_CASE_SENSITIVE - if (*this != newFile) - #endif - if (! newFile.deleteFile()) - return false; - - return moveInternal (newFile); -} - -bool File::copyFileTo (const File& newFile) const -{ - return (*this == newFile) - || (exists() && newFile.deleteFile() && copyInternal (newFile)); -} - -bool File::copyDirectoryTo (const File& newDirectory) const -{ - if (isDirectory() && newDirectory.createDirectory()) - { - Array subFiles; - findChildFiles (subFiles, File::findFiles, false); - - int i; - for (i = 0; i < subFiles.size(); ++i) - if (! subFiles.getReference(i).copyFileTo (newDirectory.getChildFile (subFiles.getReference(i).getFileName()))) - return false; - - subFiles.clear(); - findChildFiles (subFiles, File::findDirectories, false); - - for (i = 0; i < subFiles.size(); ++i) - if (! subFiles.getReference(i).copyDirectoryTo (newDirectory.getChildFile (subFiles.getReference(i).getFileName()))) - return false; - - return true; - } - - return false; -} - -String File::getPathUpToLastSlash() const -{ - const int lastSlash = fullPath.lastIndexOfChar (separator); - - if (lastSlash > 0) - return fullPath.substring (0, lastSlash); - else if (lastSlash == 0) - return separatorString; - else - return fullPath; -} - -File File::getParentDirectory() const -{ - return File (getPathUpToLastSlash(), (int) 0); -} - -String File::getFileName() const -{ - return fullPath.substring (fullPath.lastIndexOfChar (separator) + 1); -} - -int File::hashCode() const -{ - return fullPath.hashCode(); -} - -int64 File::hashCode64() const -{ - return fullPath.hashCode64(); -} - -String File::getFileNameWithoutExtension() const -{ - const int lastSlash = fullPath.lastIndexOfChar (separator) + 1; - const int lastDot = fullPath.lastIndexOfChar ('.'); - - if (lastDot > lastSlash) - return fullPath.substring (lastSlash, lastDot); - else - return fullPath.substring (lastSlash); -} - -bool File::isAChildOf (const File& potentialParent) const -{ - if (potentialParent == File::nonexistent) - return false; - - const String ourPath (getPathUpToLastSlash()); - - #if NAMES_ARE_CASE_SENSITIVE - if (potentialParent.fullPath == ourPath) - #else - if (potentialParent.fullPath.equalsIgnoreCase (ourPath)) - #endif - { - return true; - } - else if (potentialParent.fullPath.length() >= ourPath.length()) - { - return false; - } - else - { - return getParentDirectory().isAChildOf (potentialParent); - } -} - -bool File::isAbsolutePath (const String& path) -{ - return path.startsWithChar (separator) - #if JUCE_WINDOWS - || (path.isNotEmpty() && path[1] == ':'); - #else - || path.startsWithChar ('~'); - #endif -} - -File File::getChildFile (String relativePath) const -{ - if (isAbsolutePath (relativePath)) - return File (relativePath); - - String path (fullPath); - - // It's relative, so remove any ../ or ./ bits at the start.. - if (relativePath[0] == '.') - { - #if JUCE_WINDOWS - relativePath = relativePath.replaceCharacter ('/', '\\').trimStart(); - #else - relativePath = relativePath.trimStart(); - #endif - - while (relativePath[0] == '.') - { - if (relativePath[1] == '.') - { - if (relativePath [2] == 0 || relativePath[2] == separator) - { - const int lastSlash = path.lastIndexOfChar (separator); - if (lastSlash >= 0) - path = path.substring (0, lastSlash); - - relativePath = relativePath.substring (3); - } - else - { - break; - } - } - else if (relativePath[1] == separator) - { - relativePath = relativePath.substring (2); - } - else - { - break; - } - } - } - - return File (addTrailingSeparator (path) + relativePath); -} - -File File::getSiblingFile (const String& fileName) const -{ - return getParentDirectory().getChildFile (fileName); -} - -String File::descriptionOfSizeInBytes (const int64 bytes) -{ - if (bytes == 1) return "1 byte"; - else if (bytes < 1024) return String (bytes) + " bytes"; - else if (bytes < 1024 * 1024) return String (bytes / 1024.0, 1) + " KB"; - else if (bytes < 1024 * 1024 * 1024) return String (bytes / (1024.0 * 1024.0), 1) + " MB"; - else return String (bytes / (1024.0 * 1024.0 * 1024.0), 1) + " GB"; -} - -Result File::create() const -{ - if (exists()) - return Result::ok(); - - const File parentDir (getParentDirectory()); - - if (parentDir == *this) - return Result::fail ("Cannot create parent directory"); - - Result r (parentDir.createDirectory()); - - if (r.wasOk()) - { - FileOutputStream fo (*this, 8); - - r = fo.getStatus(); - } - - return r; -} - -Result File::createDirectory() const -{ - if (isDirectory()) - return Result::ok(); - - const File parentDir (getParentDirectory()); - - if (parentDir == *this) - return Result::fail ("Cannot create parent directory"); - - Result r (parentDir.createDirectory()); - - if (r.wasOk()) - r = createDirectoryInternal (fullPath.trimCharactersAtEnd (separatorString)); - - return r; -} - -Time File::getLastModificationTime() const { int64 m, a, c; getFileTimesInternal (m, a, c); return Time (m); } -Time File::getLastAccessTime() const { int64 m, a, c; getFileTimesInternal (m, a, c); return Time (a); } -Time File::getCreationTime() const { int64 m, a, c; getFileTimesInternal (m, a, c); return Time (c); } - -bool File::setLastModificationTime (const Time& t) const { return setFileTimesInternal (t.toMilliseconds(), 0, 0); } -bool File::setLastAccessTime (const Time& t) const { return setFileTimesInternal (0, t.toMilliseconds(), 0); } -bool File::setCreationTime (const Time& t) const { return setFileTimesInternal (0, 0, t.toMilliseconds()); } - -bool File::loadFileAsData (MemoryBlock& destBlock) const -{ - if (! existsAsFile()) - return false; - - FileInputStream in (*this); - return getSize() == in.readIntoMemoryBlock (destBlock); -} - -String File::loadFileAsString() const -{ - if (! existsAsFile()) - return String::empty; - - FileInputStream in (*this); - return in.readEntireStreamAsString(); -} - -void File::readLines (StringArray& destLines) const -{ - destLines.addLines (loadFileAsString()); -} - -int File::findChildFiles (Array& results, - const int whatToLookFor, - const bool searchRecursively, - const String& wildCardPattern) const -{ - DirectoryIterator di (*this, searchRecursively, wildCardPattern, whatToLookFor); - - int total = 0; - while (di.next()) - { - results.add (di.getFile()); - ++total; - } - - return total; -} - -int File::getNumberOfChildFiles (const int whatToLookFor, const String& wildCardPattern) const -{ - DirectoryIterator di (*this, false, wildCardPattern, whatToLookFor); - - int total = 0; - while (di.next()) - ++total; - - return total; -} - -bool File::containsSubDirectories() const -{ - if (isDirectory()) - { - DirectoryIterator di (*this, false, "*", findDirectories); - return di.next(); - } - - return false; -} - -File File::getNonexistentChildFile (const String& prefix_, - const String& suffix, - bool putNumbersInBrackets) const -{ - File f (getChildFile (prefix_ + suffix)); - - if (f.exists()) - { - int num = 2; - String prefix (prefix_); - - // remove any bracketed numbers that may already be on the end.. - if (prefix.trim().endsWithChar (')')) - { - putNumbersInBrackets = true; - - const int openBracks = prefix.lastIndexOfChar ('('); - const int closeBracks = prefix.lastIndexOfChar (')'); - - if (openBracks > 0 - && closeBracks > openBracks - && prefix.substring (openBracks + 1, closeBracks).containsOnly ("0123456789")) - { - num = prefix.substring (openBracks + 1, closeBracks).getIntValue() + 1; - prefix = prefix.substring (0, openBracks); - } - } - - // also use brackets if it ends in a digit. - putNumbersInBrackets = putNumbersInBrackets - || CharacterFunctions::isDigit (prefix.getLastCharacter()); - - do - { - String newName (prefix); - - if (putNumbersInBrackets) - newName << '(' << num++ << ')'; - else - newName << num++; - - f = getChildFile (newName + suffix); - - } while (f.exists()); - } - - return f; -} - -File File::getNonexistentSibling (const bool putNumbersInBrackets) const -{ - if (exists()) - return getParentDirectory() - .getNonexistentChildFile (getFileNameWithoutExtension(), - getFileExtension(), - putNumbersInBrackets); - return *this; -} - -String File::getFileExtension() const -{ - const int indexOfDot = fullPath.lastIndexOfChar ('.'); - - if (indexOfDot > fullPath.lastIndexOfChar (separator)) - return fullPath.substring (indexOfDot); - - return String::empty; -} - -bool File::hasFileExtension (const String& possibleSuffix) const -{ - if (possibleSuffix.isEmpty()) - return fullPath.lastIndexOfChar ('.') <= fullPath.lastIndexOfChar (separator); - - const int semicolon = possibleSuffix.indexOfChar (0, ';'); - - if (semicolon >= 0) - { - return hasFileExtension (possibleSuffix.substring (0, semicolon).trimEnd()) - || hasFileExtension (possibleSuffix.substring (semicolon + 1).trimStart()); - } - else - { - if (fullPath.endsWithIgnoreCase (possibleSuffix)) - { - if (possibleSuffix.startsWithChar ('.')) - return true; - - const int dotPos = fullPath.length() - possibleSuffix.length() - 1; - - if (dotPos >= 0) - return fullPath [dotPos] == '.'; - } - } - - return false; -} - -File File::withFileExtension (const String& newExtension) const -{ - if (fullPath.isEmpty()) - return File::nonexistent; - - String filePart (getFileName()); - - int i = filePart.lastIndexOfChar ('.'); - if (i >= 0) - filePart = filePart.substring (0, i); - - if (newExtension.isNotEmpty() && ! newExtension.startsWithChar ('.')) - filePart << '.'; - - return getSiblingFile (filePart + newExtension); -} - -bool File::startAsProcess (const String& parameters) const -{ - return exists() && Process::openDocument (fullPath, parameters); -} - -FileInputStream* File::createInputStream() const -{ - if (existsAsFile()) - return new FileInputStream (*this); - - return nullptr; -} - -FileOutputStream* File::createOutputStream (const int bufferSize) const -{ - ScopedPointer out (new FileOutputStream (*this, bufferSize)); - - if (out->failedToOpen()) - return nullptr; - - return out.release(); -} - -bool File::appendData (const void* const dataToAppend, - const int numberOfBytes) const -{ - if (numberOfBytes > 0) - { - const ScopedPointer out (createOutputStream()); - - if (out == 0) - return false; - - out->write (dataToAppend, numberOfBytes); - } - - return true; -} - -bool File::replaceWithData (const void* const dataToWrite, - const int numberOfBytes) const -{ - jassert (numberOfBytes >= 0); // a negative number of bytes?? - - if (numberOfBytes <= 0) - return deleteFile(); - - TemporaryFile tempFile (*this, TemporaryFile::useHiddenFile); - tempFile.getFile().appendData (dataToWrite, numberOfBytes); - return tempFile.overwriteTargetFileWithTemporary(); -} - -bool File::appendText (const String& text, - const bool asUnicode, - const bool writeUnicodeHeaderBytes) const -{ - const ScopedPointer out (createOutputStream()); - - if (out != nullptr) - { - out->writeText (text, asUnicode, writeUnicodeHeaderBytes); - return true; - } - - return false; -} - -bool File::replaceWithText (const String& textToWrite, - const bool asUnicode, - const bool writeUnicodeHeaderBytes) const -{ - TemporaryFile tempFile (*this, TemporaryFile::useHiddenFile); - tempFile.getFile().appendText (textToWrite, asUnicode, writeUnicodeHeaderBytes); - return tempFile.overwriteTargetFileWithTemporary(); -} - -bool File::hasIdenticalContentTo (const File& other) const -{ - if (other == *this) - return true; - - if (getSize() == other.getSize() && existsAsFile() && other.existsAsFile()) - { - FileInputStream in1 (*this), in2 (other); - - const int bufferSize = 4096; - HeapBlock buffer1 (bufferSize), buffer2 (bufferSize); - - for (;;) - { - const int num1 = in1.read (buffer1, bufferSize); - const int num2 = in2.read (buffer2, bufferSize); - - if (num1 != num2) - break; - - if (num1 <= 0) - return true; - - if (memcmp (buffer1, buffer2, num1) != 0) - break; - } - } - - return false; -} - -String File::createLegalPathName (const String& original) -{ - String s (original); - String start; - - if (s[1] == ':') - { - start = s.substring (0, 2); - s = s.substring (2); - } - - return start + s.removeCharacters ("\"#@,;:<>*^|?") - .substring (0, 1024); -} - -String File::createLegalFileName (const String& original) -{ - String s (original.removeCharacters ("\"#@,;:<>*^|?\\/")); - - const int maxLength = 128; // only the length of the filename, not the whole path - const int len = s.length(); - - if (len > maxLength) - { - const int lastDot = s.lastIndexOfChar ('.'); - - if (lastDot > jmax (0, len - 12)) - { - s = s.substring (0, maxLength - (len - lastDot)) - + s.substring (lastDot); - } - else - { - s = s.substring (0, maxLength); - } - } - - return s; -} - -String File::getRelativePathFrom (const File& dir) const -{ - String thisPath (fullPath); - - while (thisPath.endsWithChar (separator)) - thisPath = thisPath.dropLastCharacters (1); - - String dirPath (addTrailingSeparator (dir.existsAsFile() ? dir.getParentDirectory().getFullPathName() - : dir.fullPath)); - - const int len = jmin (thisPath.length(), dirPath.length()); - int commonBitLength = 0; - - { - String::CharPointerType thisPathIter (thisPath.getCharPointer()); - String::CharPointerType dirPathIter (dirPath.getCharPointer()); - - for (int i = 0; i < len; ++i) - { - const juce_wchar c1 = thisPathIter.getAndAdvance(); - const juce_wchar c2 = dirPathIter.getAndAdvance(); - - #if NAMES_ARE_CASE_SENSITIVE - if (c1 != c2) - #else - if (c1 != c2 && CharacterFunctions::toLowerCase (c1) != CharacterFunctions::toLowerCase (c2)) - #endif - break; - - ++commonBitLength; - } - } - - while (commonBitLength > 0 && thisPath [commonBitLength - 1] != File::separator) - --commonBitLength; - - // if the only common bit is the root, then just return the full path.. - if (commonBitLength <= 0 - || (commonBitLength == 1 && thisPath [1] == File::separator)) - return fullPath; - - thisPath = thisPath.substring (commonBitLength); - dirPath = dirPath.substring (commonBitLength); - - while (dirPath.isNotEmpty()) - { - #if JUCE_WINDOWS - thisPath = "..\\" + thisPath; - #else - thisPath = "../" + thisPath; - #endif - - const int sep = dirPath.indexOfChar (separator); - - if (sep >= 0) - dirPath = dirPath.substring (sep + 1); - else - dirPath = String::empty; - } - - return thisPath; -} - -File File::createTempFile (const String& fileNameEnding) -{ - const File tempFile (getSpecialLocation (tempDirectory) - .getChildFile ("temp_" + String::toHexString (Random::getSystemRandom().nextInt())) - .withFileExtension (fileNameEnding)); - - if (tempFile.exists()) - return createTempFile (fileNameEnding); - - return tempFile; -} - -#if JUCE_UNIT_TESTS - -class FileTests : public UnitTest -{ -public: - FileTests() : UnitTest ("Files") {} - - void runTest() - { - beginTest ("Reading"); - - const File home (File::getSpecialLocation (File::userHomeDirectory)); - const File temp (File::getSpecialLocation (File::tempDirectory)); - - expect (! File::nonexistent.exists()); - expect (home.isDirectory()); - expect (home.exists()); - expect (! home.existsAsFile()); - expect (File::getSpecialLocation (File::userDocumentsDirectory).isDirectory()); - expect (File::getSpecialLocation (File::userApplicationDataDirectory).isDirectory()); - expect (File::getSpecialLocation (File::currentExecutableFile).exists()); - expect (File::getSpecialLocation (File::currentApplicationFile).exists()); - expect (File::getSpecialLocation (File::invokedExecutableFile).exists()); - expect (home.getVolumeTotalSize() > 1024 * 1024); - expect (home.getBytesFreeOnVolume() > 0); - expect (! home.isHidden()); - expect (home.isOnHardDisk()); - expect (! home.isOnCDRomDrive()); - expect (File::getCurrentWorkingDirectory().exists()); - expect (home.setAsCurrentWorkingDirectory()); - expect (File::getCurrentWorkingDirectory() == home); - - { - Array roots; - File::findFileSystemRoots (roots); - expect (roots.size() > 0); - - int numRootsExisting = 0; - for (int i = 0; i < roots.size(); ++i) - if (roots[i].exists()) - ++numRootsExisting; - - // (on windows, some of the drives may not contain media, so as long as at least one is ok..) - expect (numRootsExisting > 0); - } - - beginTest ("Writing"); - - File demoFolder (temp.getChildFile ("Juce UnitTests Temp Folder.folder")); - expect (demoFolder.deleteRecursively()); - expect (demoFolder.createDirectory()); - expect (demoFolder.isDirectory()); - expect (demoFolder.getParentDirectory() == temp); - expect (temp.isDirectory()); - - { - Array files; - temp.findChildFiles (files, File::findFilesAndDirectories, false, "*"); - expect (files.contains (demoFolder)); - } - - { - Array files; - temp.findChildFiles (files, File::findDirectories, true, "*.folder"); - expect (files.contains (demoFolder)); - } - - File tempFile (demoFolder.getNonexistentChildFile ("test", ".txt", false)); - - expect (tempFile.getFileExtension() == ".txt"); - expect (tempFile.hasFileExtension (".txt")); - expect (tempFile.hasFileExtension ("txt")); - expect (tempFile.withFileExtension ("xyz").hasFileExtension (".xyz")); - expect (tempFile.withFileExtension ("xyz").hasFileExtension ("abc;xyz;foo")); - expect (tempFile.withFileExtension ("xyz").hasFileExtension ("xyz;foo")); - expect (! tempFile.withFileExtension ("h").hasFileExtension ("bar;foo;xx")); - expect (tempFile.getSiblingFile ("foo").isAChildOf (temp)); - expect (tempFile.hasWriteAccess()); - - { - FileOutputStream fo (tempFile); - fo.write ("0123456789", 10); - } - - expect (tempFile.exists()); - expect (tempFile.getSize() == 10); - expect (std::abs ((int) (tempFile.getLastModificationTime().toMilliseconds() - Time::getCurrentTime().toMilliseconds())) < 3000); - expectEquals (tempFile.loadFileAsString(), String ("0123456789")); - expect (! demoFolder.containsSubDirectories()); - - expectEquals (tempFile.getRelativePathFrom (demoFolder.getParentDirectory()), demoFolder.getFileName() + File::separatorString + tempFile.getFileName()); - expectEquals (demoFolder.getParentDirectory().getRelativePathFrom (tempFile), ".." + File::separatorString + ".." + File::separatorString + demoFolder.getParentDirectory().getFileName()); - - expect (demoFolder.getNumberOfChildFiles (File::findFiles) == 1); - expect (demoFolder.getNumberOfChildFiles (File::findFilesAndDirectories) == 1); - expect (demoFolder.getNumberOfChildFiles (File::findDirectories) == 0); - demoFolder.getNonexistentChildFile ("tempFolder", "", false).createDirectory(); - expect (demoFolder.getNumberOfChildFiles (File::findDirectories) == 1); - expect (demoFolder.getNumberOfChildFiles (File::findFilesAndDirectories) == 2); - expect (demoFolder.containsSubDirectories()); - - expect (tempFile.hasWriteAccess()); - tempFile.setReadOnly (true); - expect (! tempFile.hasWriteAccess()); - tempFile.setReadOnly (false); - expect (tempFile.hasWriteAccess()); - - Time t (Time::getCurrentTime()); - tempFile.setLastModificationTime (t); - Time t2 = tempFile.getLastModificationTime(); - expect (std::abs ((int) (t2.toMilliseconds() - t.toMilliseconds())) <= 1000); - - { - MemoryBlock mb; - tempFile.loadFileAsData (mb); - expect (mb.getSize() == 10); - expect (mb[0] == '0'); - } - - beginTest ("Memory-mapped files"); - - { - MemoryMappedFile mmf (tempFile, MemoryMappedFile::readOnly); - expect (mmf.getSize() == 10); - expect (mmf.getData() != nullptr); - expect (memcmp (mmf.getData(), "0123456789", 10) == 0); - } - - { - const File tempFile2 (tempFile.getNonexistentSibling (false)); - expect (tempFile2.create()); - expect (tempFile2.appendData ("xxxxxxxxxx", 10)); - - { - MemoryMappedFile mmf (tempFile2, MemoryMappedFile::readWrite); - expect (mmf.getSize() == 10); - expect (mmf.getData() != nullptr); - memcpy (mmf.getData(), "abcdefghij", 10); - } - - { - MemoryMappedFile mmf (tempFile2, MemoryMappedFile::readWrite); - expect (mmf.getSize() == 10); - expect (mmf.getData() != nullptr); - expect (memcmp (mmf.getData(), "abcdefghij", 10) == 0); - } - - expect (tempFile2.deleteFile()); - } - - beginTest ("More writing"); - - expect (tempFile.appendData ("abcdefghij", 10)); - expect (tempFile.getSize() == 20); - expect (tempFile.replaceWithData ("abcdefghij", 10)); - expect (tempFile.getSize() == 10); - - File tempFile2 (tempFile.getNonexistentSibling (false)); - expect (tempFile.copyFileTo (tempFile2)); - expect (tempFile2.exists()); - expect (tempFile2.hasIdenticalContentTo (tempFile)); - expect (tempFile.deleteFile()); - expect (! tempFile.exists()); - expect (tempFile2.moveFileTo (tempFile)); - expect (tempFile.exists()); - expect (! tempFile2.exists()); - - expect (demoFolder.deleteRecursively()); - expect (! demoFolder.exists()); - } -}; - -static FileTests fileUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_File.cpp ***/ - - -/*** Start of inlined file: juce_FileInputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -int64 juce_fileSetPosition (void* handle, int64 pos); - -FileInputStream::FileInputStream (const File& f) - : file (f), - fileHandle (nullptr), - currentPosition (0), - totalSize (0), - status (Result::ok()), - needToSeek (true) -{ - openHandle(); -} - -FileInputStream::~FileInputStream() -{ - closeHandle(); -} - -int64 FileInputStream::getTotalLength() -{ - return totalSize; -} - -int FileInputStream::read (void* buffer, int bytesToRead) -{ - if (needToSeek) - { - if (juce_fileSetPosition (fileHandle, currentPosition) < 0) - return 0; - - needToSeek = false; - } - - const size_t num = readInternal (buffer, bytesToRead); - currentPosition += num; - - return (int) num; -} - -bool FileInputStream::isExhausted() -{ - return currentPosition >= totalSize; -} - -int64 FileInputStream::getPosition() -{ - return currentPosition; -} - -bool FileInputStream::setPosition (int64 pos) -{ - pos = jlimit ((int64) 0, totalSize, pos); - - needToSeek |= (currentPosition != pos); - currentPosition = pos; - - return true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileInputStream.cpp ***/ - - -/*** Start of inlined file: juce_FileOutputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -int64 juce_fileSetPosition (void* handle, int64 pos); - -FileOutputStream::FileOutputStream (const File& f, const int bufferSize_) - : file (f), - fileHandle (nullptr), - status (Result::ok()), - currentPosition (0), - bufferSize (bufferSize_), - bytesInBuffer (0), - buffer (jmax (bufferSize_, 16)) -{ - openHandle(); -} - -FileOutputStream::~FileOutputStream() -{ - flushBuffer(); - flushInternal(); - closeHandle(); -} - -int64 FileOutputStream::getPosition() -{ - return currentPosition; -} - -bool FileOutputStream::setPosition (int64 newPosition) -{ - if (newPosition != currentPosition) - { - flushBuffer(); - currentPosition = juce_fileSetPosition (fileHandle, newPosition); - } - - return newPosition == currentPosition; -} - -bool FileOutputStream::flushBuffer() -{ - bool ok = true; - - if (bytesInBuffer > 0) - { - ok = (writeInternal (buffer, bytesInBuffer) == bytesInBuffer); - bytesInBuffer = 0; - } - - return ok; -} - -void FileOutputStream::flush() -{ - flushBuffer(); - flushInternal(); -} - -bool FileOutputStream::write (const void* const src, const int numBytes) -{ - if (bytesInBuffer + numBytes < bufferSize) - { - memcpy (buffer + bytesInBuffer, src, numBytes); - bytesInBuffer += numBytes; - currentPosition += numBytes; - } - else - { - if (! flushBuffer()) - return false; - - if (numBytes < bufferSize) - { - memcpy (buffer + bytesInBuffer, src, numBytes); - bytesInBuffer += numBytes; - currentPosition += numBytes; - } - else - { - const int bytesWritten = writeInternal (src, numBytes); - - if (bytesWritten < 0) - return false; - - currentPosition += bytesWritten; - return bytesWritten == numBytes; - } - } - - return true; -} - -void FileOutputStream::writeRepeatedByte (uint8 byte, int numBytes) -{ - if (bytesInBuffer + numBytes < bufferSize) - { - memset (buffer + bytesInBuffer, byte, numBytes); - bytesInBuffer += numBytes; - currentPosition += numBytes; - } - else - { - OutputStream::writeRepeatedByte (byte, numBytes); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileOutputStream.cpp ***/ - - -/*** Start of inlined file: juce_FileSearchPath.cpp ***/ -BEGIN_JUCE_NAMESPACE - -FileSearchPath::FileSearchPath() -{ -} - -FileSearchPath::FileSearchPath (const String& path) -{ - init (path); -} - -FileSearchPath::FileSearchPath (const FileSearchPath& other) - : directories (other.directories) -{ -} - -FileSearchPath::~FileSearchPath() -{ -} - -FileSearchPath& FileSearchPath::operator= (const String& path) -{ - init (path); - return *this; -} - -void FileSearchPath::init (const String& path) -{ - directories.clear(); - directories.addTokens (path, ";", "\""); - directories.trim(); - directories.removeEmptyStrings(); - - for (int i = directories.size(); --i >= 0;) - directories.set (i, directories[i].unquoted()); -} - -int FileSearchPath::getNumPaths() const -{ - return directories.size(); -} - -File FileSearchPath::operator[] (const int index) const -{ - return File (directories [index]); -} - -String FileSearchPath::toString() const -{ - StringArray directories2 (directories); - for (int i = directories2.size(); --i >= 0;) - if (directories2[i].containsChar (';')) - directories2.set (i, directories2[i].quoted()); - - return directories2.joinIntoString (";"); -} - -void FileSearchPath::add (const File& dir, const int insertIndex) -{ - directories.insert (insertIndex, dir.getFullPathName()); -} - -void FileSearchPath::addIfNotAlreadyThere (const File& dir) -{ - for (int i = 0; i < directories.size(); ++i) - if (File (directories[i]) == dir) - return; - - add (dir); -} - -void FileSearchPath::remove (const int index) -{ - directories.remove (index); -} - -void FileSearchPath::addPath (const FileSearchPath& other) -{ - for (int i = 0; i < other.getNumPaths(); ++i) - addIfNotAlreadyThere (other[i]); -} - -void FileSearchPath::removeRedundantPaths() -{ - for (int i = directories.size(); --i >= 0;) - { - const File d1 (directories[i]); - - for (int j = directories.size(); --j >= 0;) - { - const File d2 (directories[j]); - - if ((i != j) && (d1.isAChildOf (d2) || d1 == d2)) - { - directories.remove (i); - break; - } - } - } -} - -void FileSearchPath::removeNonExistentPaths() -{ - for (int i = directories.size(); --i >= 0;) - if (! File (directories[i]).isDirectory()) - directories.remove (i); -} - -int FileSearchPath::findChildFiles (Array& results, - const int whatToLookFor, - const bool searchRecursively, - const String& wildCardPattern) const -{ - int total = 0; - - for (int i = 0; i < directories.size(); ++i) - total += operator[] (i).findChildFiles (results, - whatToLookFor, - searchRecursively, - wildCardPattern); - - return total; -} - -bool FileSearchPath::isFileInPath (const File& fileToCheck, - const bool checkRecursively) const -{ - for (int i = directories.size(); --i >= 0;) - { - const File d (directories[i]); - - if (checkRecursively) - { - if (fileToCheck.isAChildOf (d)) - return true; - } - else - { - if (fileToCheck.getParentDirectory() == d) - return true; - } - } - - return false; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileSearchPath.cpp ***/ - - -/*** Start of inlined file: juce_NamedPipe.cpp ***/ -BEGIN_JUCE_NAMESPACE - -NamedPipe::NamedPipe() - : internal (nullptr) -{ -} - -NamedPipe::~NamedPipe() -{ - close(); -} - -bool NamedPipe::openExisting (const String& pipeName) -{ - currentPipeName = pipeName; - return openInternal (pipeName, false); -} - -bool NamedPipe::createNewPipe (const String& pipeName) -{ - currentPipeName = pipeName; - return openInternal (pipeName, true); -} - -bool NamedPipe::isOpen() const -{ - return internal != nullptr; -} - -String NamedPipe::getName() const -{ - return currentPipeName; -} - -// other methods for this class are implemented in the platform-specific files - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_NamedPipe.cpp ***/ - - -/*** Start of inlined file: juce_TemporaryFile.cpp ***/ -BEGIN_JUCE_NAMESPACE - -TemporaryFile::TemporaryFile (const String& suffix, const int optionFlags) -{ - createTempFile (File::getSpecialLocation (File::tempDirectory), - "temp_" + String::toHexString (Random::getSystemRandom().nextInt()), - suffix, - optionFlags); -} - -TemporaryFile::TemporaryFile (const File& targetFile_, const int optionFlags) - : targetFile (targetFile_) -{ - // If you use this constructor, you need to give it a valid target file! - jassert (targetFile != File::nonexistent); - - createTempFile (targetFile.getParentDirectory(), - targetFile.getFileNameWithoutExtension() - + "_temp" + String::toHexString (Random::getSystemRandom().nextInt()), - targetFile.getFileExtension(), - optionFlags); -} - -void TemporaryFile::createTempFile (const File& parentDirectory, String name, - const String& suffix, const int optionFlags) -{ - if ((optionFlags & useHiddenFile) != 0) - name = "." + name; - - temporaryFile = parentDirectory.getNonexistentChildFile (name, suffix, (optionFlags & putNumbersInBrackets) != 0); -} - -TemporaryFile::~TemporaryFile() -{ - if (! deleteTemporaryFile()) - { - /* Failed to delete our temporary file! The most likely reason for this would be - that you've not closed an output stream that was being used to write to file. - - If you find that something beyond your control is changing permissions on - your temporary files and preventing them from being deleted, you may want to - call TemporaryFile::deleteTemporaryFile() to detect those error cases and - handle them appropriately. - */ - jassertfalse; - } -} - -bool TemporaryFile::overwriteTargetFileWithTemporary() const -{ - // This method only works if you created this object with the constructor - // that takes a target file! - jassert (targetFile != File::nonexistent); - - if (temporaryFile.exists()) - { - // Have a few attempts at overwriting the file before giving up.. - for (int i = 5; --i >= 0;) - { - if (temporaryFile.moveFileTo (targetFile)) - return true; - - Thread::sleep (100); - } - } - else - { - // There's no temporary file to use. If your write failed, you should - // probably check, and not bother calling this method. - jassertfalse; - } - - return false; -} - -bool TemporaryFile::deleteTemporaryFile() const -{ - // Have a few attempts at deleting the file before giving up.. - for (int i = 5; --i >= 0;) - { - if (temporaryFile.deleteFile()) - return true; - - Thread::sleep (50); - } - - return false; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_TemporaryFile.cpp ***/ - - -/*** Start of inlined file: juce_Socket.cpp ***/ -#if JUCE_WINDOWS - #include - #include - - #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable : 4127 4389 4018) - #endif - -#else - #if JUCE_LINUX || JUCE_ANDROID - #include - #include - #include - #include - #include - #endif - - #include - #include - #include - #include -#endif - -#ifndef AI_NUMERICSERV // (missing in older Mac SDKs) - #define AI_NUMERICSERV 0x1000 -#endif - -BEGIN_JUCE_NAMESPACE - -#if JUCE_WINDOWS - typedef int juce_socklen_t; -#else - typedef socklen_t juce_socklen_t; -#endif - -namespace SocketHelpers -{ - void initSockets() - { - #if JUCE_WINDOWS - static bool socketsStarted = false; - - if (! socketsStarted) - { - socketsStarted = true; - - WSADATA wsaData; - const WORD wVersionRequested = MAKEWORD (1, 1); - WSAStartup (wVersionRequested, &wsaData); - } - #endif - } - - bool resetSocketOptions (const int handle, const bool isDatagram, const bool allowBroadcast) noexcept - { - const int sndBufSize = 65536; - const int rcvBufSize = 65536; - const int one = 1; - - return handle > 0 - && setsockopt (handle, SOL_SOCKET, SO_RCVBUF, (const char*) &rcvBufSize, sizeof (rcvBufSize)) == 0 - && setsockopt (handle, SOL_SOCKET, SO_SNDBUF, (const char*) &sndBufSize, sizeof (sndBufSize)) == 0 - && (isDatagram ? ((! allowBroadcast) || setsockopt (handle, SOL_SOCKET, SO_BROADCAST, (const char*) &one, sizeof (one)) == 0) - : (setsockopt (handle, IPPROTO_TCP, TCP_NODELAY, (const char*) &one, sizeof (one)) == 0)); - } - - bool bindSocketToPort (const int handle, const int port) noexcept - { - if (handle <= 0 || port <= 0) - return false; - - struct sockaddr_in servTmpAddr = { 0 }; - servTmpAddr.sin_family = PF_INET; - servTmpAddr.sin_addr.s_addr = htonl (INADDR_ANY); - servTmpAddr.sin_port = htons ((uint16) port); - - return bind (handle, (struct sockaddr*) &servTmpAddr, sizeof (struct sockaddr_in)) >= 0; - } - - int readSocket (const int handle, - void* const destBuffer, const int maxBytesToRead, - bool volatile& connected, - const bool blockUntilSpecifiedAmountHasArrived) noexcept - { - int bytesRead = 0; - - while (bytesRead < maxBytesToRead) - { - int bytesThisTime; - - #if JUCE_WINDOWS - bytesThisTime = recv (handle, static_cast (destBuffer) + bytesRead, maxBytesToRead - bytesRead, 0); - #else - while ((bytesThisTime = (int) ::read (handle, addBytesToPointer (destBuffer, bytesRead), maxBytesToRead - bytesRead)) < 0 - && errno == EINTR - && connected) - { - } - #endif - - if (bytesThisTime <= 0 || ! connected) - { - if (bytesRead == 0) - bytesRead = -1; - - break; - } - - bytesRead += bytesThisTime; - - if (! blockUntilSpecifiedAmountHasArrived) - break; - } - - return bytesRead; - } - - int waitForReadiness (const int handle, const bool forReading, const int timeoutMsecs) noexcept - { - struct timeval timeout; - struct timeval* timeoutp; - - if (timeoutMsecs >= 0) - { - timeout.tv_sec = timeoutMsecs / 1000; - timeout.tv_usec = (timeoutMsecs % 1000) * 1000; - timeoutp = &timeout; - } - else - { - timeoutp = 0; - } - - fd_set rset, wset; - FD_ZERO (&rset); - FD_SET (handle, &rset); - FD_ZERO (&wset); - FD_SET (handle, &wset); - - fd_set* const prset = forReading ? &rset : nullptr; - fd_set* const pwset = forReading ? nullptr : &wset; - - #if JUCE_WINDOWS - if (select (handle + 1, prset, pwset, 0, timeoutp) < 0) - return -1; - #else - { - int result; - while ((result = select (handle + 1, prset, pwset, 0, timeoutp)) < 0 - && errno == EINTR) - { - } - - if (result < 0) - return -1; - } - #endif - - { - int opt; - juce_socklen_t len = sizeof (opt); - - if (getsockopt (handle, SOL_SOCKET, SO_ERROR, (char*) &opt, &len) < 0 - || opt != 0) - return -1; - } - - return FD_ISSET (handle, forReading ? &rset : &wset) ? 1 : 0; - } - - bool setSocketBlockingState (const int handle, const bool shouldBlock) noexcept - { - #if JUCE_WINDOWS - u_long nonBlocking = shouldBlock ? 0 : 1; - return ioctlsocket (handle, FIONBIO, &nonBlocking) == 0; - #else - int socketFlags = fcntl (handle, F_GETFL, 0); - - if (socketFlags == -1) - return false; - - if (shouldBlock) - socketFlags &= ~O_NONBLOCK; - else - socketFlags |= O_NONBLOCK; - - return fcntl (handle, F_SETFL, socketFlags) == 0; - #endif - } - - bool connectSocket (int volatile& handle, - const bool isDatagram, - void** serverAddress, - const String& hostName, - const int portNumber, - const int timeOutMillisecs) noexcept - { - struct addrinfo hints = { 0 }; - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = isDatagram ? SOCK_DGRAM : SOCK_STREAM; - hints.ai_flags = AI_NUMERICSERV; - - struct addrinfo* info = nullptr; - if (getaddrinfo (hostName.toUTF8(), String (portNumber).toUTF8(), &hints, &info) != 0 || info == 0) - return false; - - if (handle < 0) - handle = (int) socket (info->ai_family, info->ai_socktype, 0); - - if (handle < 0) - { - freeaddrinfo (info); - return false; - } - - if (isDatagram) - { - struct sockaddr* s = new struct sockaddr(); - *s = *(info->ai_addr); - *serverAddress = s; - - freeaddrinfo (info); - return true; - } - - setSocketBlockingState (handle, false); - const int result = ::connect (handle, info->ai_addr, (int) info->ai_addrlen); - freeaddrinfo (info); - - if (result < 0) - { - #if JUCE_WINDOWS - if (result == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK) - #else - if (errno == EINPROGRESS) - #endif - { - if (waitForReadiness (handle, false, timeOutMillisecs) != 1) - { - setSocketBlockingState (handle, true); - return false; - } - } - } - - setSocketBlockingState (handle, true); - resetSocketOptions (handle, false, false); - - return true; - } -} - -StreamingSocket::StreamingSocket() - : portNumber (0), - handle (-1), - connected (false), - isListener (false) -{ - SocketHelpers::initSockets(); -} - -StreamingSocket::StreamingSocket (const String& hostName_, - const int portNumber_, - const int handle_) - : hostName (hostName_), - portNumber (portNumber_), - handle (handle_), - connected (true), - isListener (false) -{ - SocketHelpers::initSockets(); - SocketHelpers::resetSocketOptions (handle_, false, false); -} - -StreamingSocket::~StreamingSocket() -{ - close(); -} - -int StreamingSocket::read (void* destBuffer, const int maxBytesToRead, const bool blockUntilSpecifiedAmountHasArrived) -{ - return (connected && ! isListener) ? SocketHelpers::readSocket (handle, destBuffer, maxBytesToRead, connected, blockUntilSpecifiedAmountHasArrived) - : -1; -} - -int StreamingSocket::write (const void* sourceBuffer, const int numBytesToWrite) -{ - if (isListener || ! connected) - return -1; - - #if JUCE_WINDOWS - return send (handle, (const char*) sourceBuffer, numBytesToWrite, 0); - #else - int result; - - while ((result = (int) ::write (handle, sourceBuffer, numBytesToWrite)) < 0 - && errno == EINTR) - { - } - - return result; - #endif -} - -int StreamingSocket::waitUntilReady (const bool readyForReading, - const int timeoutMsecs) const -{ - return connected ? SocketHelpers::waitForReadiness (handle, readyForReading, timeoutMsecs) - : -1; -} - -bool StreamingSocket::bindToPort (const int port) -{ - return SocketHelpers::bindSocketToPort (handle, port); -} - -bool StreamingSocket::connect (const String& remoteHostName, - const int remotePortNumber, - const int timeOutMillisecs) -{ - if (isListener) - { - jassertfalse; // a listener socket can't connect to another one! - return false; - } - - if (connected) - close(); - - hostName = remoteHostName; - portNumber = remotePortNumber; - isListener = false; - - connected = SocketHelpers::connectSocket (handle, false, 0, remoteHostName, - remotePortNumber, timeOutMillisecs); - - if (! (connected && SocketHelpers::resetSocketOptions (handle, false, false))) - { - close(); - return false; - } - - return true; -} - -void StreamingSocket::close() -{ - #if JUCE_WINDOWS - if (handle != SOCKET_ERROR || connected) - closesocket (handle); - - connected = false; - #else - if (connected) - { - connected = false; - - if (isListener) - { - // need to do this to interrupt the accept() function.. - StreamingSocket temp; - temp.connect ("localhost", portNumber, 1000); - } - } - - if (handle != -1) - ::close (handle); - #endif - - hostName = String::empty; - portNumber = 0; - handle = -1; - isListener = false; -} - -bool StreamingSocket::createListener (const int newPortNumber, const String& localHostName) -{ - if (connected) - close(); - - hostName = "listener"; - portNumber = newPortNumber; - isListener = true; - - struct sockaddr_in servTmpAddr = { 0 }; - servTmpAddr.sin_family = PF_INET; - servTmpAddr.sin_addr.s_addr = htonl (INADDR_ANY); - - if (localHostName.isNotEmpty()) - servTmpAddr.sin_addr.s_addr = ::inet_addr (localHostName.toUTF8()); - - servTmpAddr.sin_port = htons ((uint16) portNumber); - - handle = (int) socket (AF_INET, SOCK_STREAM, 0); - - if (handle < 0) - return false; - - const int reuse = 1; - setsockopt (handle, SOL_SOCKET, SO_REUSEADDR, (const char*) &reuse, sizeof (reuse)); - - if (bind (handle, (struct sockaddr*) &servTmpAddr, sizeof (struct sockaddr_in)) < 0 - || listen (handle, SOMAXCONN) < 0) - { - close(); - return false; - } - - connected = true; - return true; -} - -StreamingSocket* StreamingSocket::waitForNextConnection() const -{ - jassert (isListener || ! connected); // to call this method, you first have to use createListener() to - // prepare this socket as a listener. - - if (connected && isListener) - { - struct sockaddr address; - juce_socklen_t len = sizeof (sockaddr); - const int newSocket = (int) accept (handle, &address, &len); - - if (newSocket >= 0 && connected) - return new StreamingSocket (inet_ntoa (((struct sockaddr_in*) &address)->sin_addr), - portNumber, newSocket); - } - - return nullptr; -} - -bool StreamingSocket::isLocal() const noexcept -{ - return hostName == "127.0.0.1"; -} - -DatagramSocket::DatagramSocket (const int localPortNumber, const bool allowBroadcast_) - : portNumber (0), - handle (-1), - connected (true), - allowBroadcast (allowBroadcast_), - serverAddress (0) -{ - SocketHelpers::initSockets(); - - handle = (int) socket (AF_INET, SOCK_DGRAM, 0); - bindToPort (localPortNumber); -} - -DatagramSocket::DatagramSocket (const String& hostName_, const int portNumber_, - const int handle_, const int localPortNumber) - : hostName (hostName_), - portNumber (portNumber_), - handle (handle_), - connected (true), - allowBroadcast (false), - serverAddress (0) -{ - SocketHelpers::initSockets(); - - SocketHelpers::resetSocketOptions (handle_, true, allowBroadcast); - bindToPort (localPortNumber); -} - -DatagramSocket::~DatagramSocket() -{ - close(); - - delete static_cast (serverAddress); - serverAddress = 0; -} - -void DatagramSocket::close() -{ - #if JUCE_WINDOWS - closesocket (handle); - connected = false; - #else - connected = false; - ::close (handle); - #endif - - hostName = String::empty; - portNumber = 0; - handle = -1; -} - -bool DatagramSocket::bindToPort (const int port) -{ - return SocketHelpers::bindSocketToPort (handle, port); -} - -bool DatagramSocket::connect (const String& remoteHostName, - const int remotePortNumber, - const int timeOutMillisecs) -{ - if (connected) - close(); - - hostName = remoteHostName; - portNumber = remotePortNumber; - - connected = SocketHelpers::connectSocket (handle, true, &serverAddress, - remoteHostName, remotePortNumber, - timeOutMillisecs); - - if (! (connected && SocketHelpers::resetSocketOptions (handle, true, allowBroadcast))) - { - close(); - return false; - } - - return true; -} - -DatagramSocket* DatagramSocket::waitForNextConnection() const -{ - struct sockaddr address; - juce_socklen_t len = sizeof (sockaddr); - - while (waitUntilReady (true, -1) == 1) - { - char buf[1]; - - if (recvfrom (handle, buf, 0, 0, &address, &len) > 0) - { - return new DatagramSocket (inet_ntoa (((struct sockaddr_in*) &address)->sin_addr), - ntohs (((struct sockaddr_in*) &address)->sin_port), - -1, -1); - } - } - - return nullptr; -} - -int DatagramSocket::waitUntilReady (const bool readyForReading, - const int timeoutMsecs) const -{ - return connected ? SocketHelpers::waitForReadiness (handle, readyForReading, timeoutMsecs) - : -1; -} - -int DatagramSocket::read (void* destBuffer, const int maxBytesToRead, const bool blockUntilSpecifiedAmountHasArrived) -{ - return connected ? SocketHelpers::readSocket (handle, destBuffer, maxBytesToRead, connected, blockUntilSpecifiedAmountHasArrived) - : -1; -} - -int DatagramSocket::write (const void* sourceBuffer, const int numBytesToWrite) -{ - // You need to call connect() first to set the server address.. - jassert (serverAddress != 0 && connected); - - return connected ? (int) sendto (handle, (const char*) sourceBuffer, - numBytesToWrite, 0, - (const struct sockaddr*) serverAddress, - sizeof (struct sockaddr_in)) - : -1; -} - -bool DatagramSocket::isLocal() const noexcept -{ - return hostName == "127.0.0.1"; -} - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Socket.cpp ***/ - - -/*** Start of inlined file: juce_URL.cpp ***/ -BEGIN_JUCE_NAMESPACE - -URL::URL() -{ -} - -URL::URL (const String& url_) - : url (url_) -{ - int i = url.indexOfChar ('?'); - - if (i >= 0) - { - do - { - const int nextAmp = url.indexOfChar (i + 1, '&'); - const int equalsPos = url.indexOfChar (i + 1, '='); - - if (equalsPos > i + 1) - { - if (nextAmp < 0) - { - parameters.set (removeEscapeChars (url.substring (i + 1, equalsPos)), - removeEscapeChars (url.substring (equalsPos + 1))); - } - else if (nextAmp > 0 && equalsPos < nextAmp) - { - parameters.set (removeEscapeChars (url.substring (i + 1, equalsPos)), - removeEscapeChars (url.substring (equalsPos + 1, nextAmp))); - } - } - - i = nextAmp; - } - while (i >= 0); - - url = url.upToFirstOccurrenceOf ("?", false, false); - } -} - -URL::URL (const URL& other) - : url (other.url), - postData (other.postData), - parameters (other.parameters), - filesToUpload (other.filesToUpload), - mimeTypes (other.mimeTypes) -{ -} - -URL& URL::operator= (const URL& other) -{ - url = other.url; - postData = other.postData; - parameters = other.parameters; - filesToUpload = other.filesToUpload; - mimeTypes = other.mimeTypes; - - return *this; -} - -URL::~URL() -{ -} - -namespace URLHelpers -{ - String getMangledParameters (const StringPairArray& parameters) - { - String p; - - for (int i = 0; i < parameters.size(); ++i) - { - if (i > 0) - p << '&'; - - p << URL::addEscapeChars (parameters.getAllKeys() [i], true) - << '=' - << URL::addEscapeChars (parameters.getAllValues() [i], true); - } - - return p; - } - - int findStartOfDomain (const String& url) - { - int i = 0; - - while (CharacterFunctions::isLetterOrDigit (url[i]) - || url[i] == '+' || url[i] == '-' || url[i] == '.') - ++i; - - return url[i] == ':' ? i + 1 : 0; - } - - void createHeadersAndPostData (const URL& url, String& headers, MemoryBlock& postData) - { - MemoryOutputStream data (postData, false); - - if (url.getFilesToUpload().size() > 0) - { - // need to upload some files, so do it as multi-part... - const String boundary (String::toHexString (Random::getSystemRandom().nextInt64())); - - headers << "Content-Type: multipart/form-data; boundary=" << boundary << "\r\n"; - - data << "--" << boundary; - - int i; - for (i = 0; i < url.getParameters().size(); ++i) - { - data << "\r\nContent-Disposition: form-data; name=\"" - << url.getParameters().getAllKeys() [i] - << "\"\r\n\r\n" - << url.getParameters().getAllValues() [i] - << "\r\n--" - << boundary; - } - - for (i = 0; i < url.getFilesToUpload().size(); ++i) - { - const File file (url.getFilesToUpload().getAllValues() [i]); - const String paramName (url.getFilesToUpload().getAllKeys() [i]); - - data << "\r\nContent-Disposition: form-data; name=\"" << paramName - << "\"; filename=\"" << file.getFileName() << "\"\r\n"; - - const String mimeType (url.getMimeTypesOfUploadFiles() - .getValue (paramName, String::empty)); - - if (mimeType.isNotEmpty()) - data << "Content-Type: " << mimeType << "\r\n"; - - data << "Content-Transfer-Encoding: binary\r\n\r\n" - << file << "\r\n--" << boundary; - } - - data << "--\r\n"; - data.flush(); - } - else - { - data << getMangledParameters (url.getParameters()) << url.getPostData(); - data.flush(); - - // just a short text attachment, so use simple url encoding.. - headers << "Content-Type: application/x-www-form-urlencoded\r\nContent-length: " - << (int) postData.getSize() << "\r\n"; - } - } -} - -String URL::toString (const bool includeGetParameters) const -{ - if (includeGetParameters && parameters.size() > 0) - return url + "?" + URLHelpers::getMangledParameters (parameters); - else - return url; -} - -bool URL::isWellFormed() const -{ - //xxx TODO - return url.isNotEmpty(); -} - -String URL::getDomain() const -{ - int start = URLHelpers::findStartOfDomain (url); - while (url[start] == '/') - ++start; - - const int end1 = url.indexOfChar (start, '/'); - const int end2 = url.indexOfChar (start, ':'); - - const int end = (end1 < 0 || end2 < 0) ? jmax (end1, end2) - : jmin (end1, end2); - - return url.substring (start, end); -} - -String URL::getSubPath() const -{ - int start = URLHelpers::findStartOfDomain (url); - while (url[start] == '/') - ++start; - - const int startOfPath = url.indexOfChar (start, '/') + 1; - - return startOfPath <= 0 ? String::empty - : url.substring (startOfPath); -} - -String URL::getScheme() const -{ - return url.substring (0, URLHelpers::findStartOfDomain (url) - 1); -} - -const URL URL::withNewSubPath (const String& newPath) const -{ - int start = URLHelpers::findStartOfDomain (url); - while (url[start] == '/') - ++start; - - const int startOfPath = url.indexOfChar (start, '/') + 1; - - URL u (*this); - - if (startOfPath > 0) - u.url = url.substring (0, startOfPath); - - if (! u.url.endsWithChar ('/')) - u.url << '/'; - - if (newPath.startsWithChar ('/')) - u.url << newPath.substring (1); - else - u.url << newPath; - - return u; -} - -bool URL::isProbablyAWebsiteURL (const String& possibleURL) -{ - const char* validProtocols[] = { "http:", "ftp:", "https:" }; - - for (int i = 0; i < numElementsInArray (validProtocols); ++i) - if (possibleURL.startsWithIgnoreCase (validProtocols[i])) - return true; - - if (possibleURL.containsChar ('@') - || possibleURL.containsChar (' ')) - return false; - - const String topLevelDomain (possibleURL.upToFirstOccurrenceOf ("/", false, false) - .fromLastOccurrenceOf (".", false, false)); - - return topLevelDomain.isNotEmpty() && topLevelDomain.length() <= 3; -} - -bool URL::isProbablyAnEmailAddress (const String& possibleEmailAddress) -{ - const int atSign = possibleEmailAddress.indexOfChar ('@'); - - return atSign > 0 - && possibleEmailAddress.lastIndexOfChar ('.') > (atSign + 1) - && (! possibleEmailAddress.endsWithChar ('.')); -} - -InputStream* URL::createInputStream (const bool usePostCommand, - OpenStreamProgressCallback* const progressCallback, - void* const progressCallbackContext, - const String& extraHeaders, - const int timeOutMs, - StringPairArray* const responseHeaders) const -{ - String headers; - MemoryBlock headersAndPostData; - - if (usePostCommand) - URLHelpers::createHeadersAndPostData (*this, headers, headersAndPostData); - - headers += extraHeaders; - - if (! headers.endsWithChar ('\n')) - headers << "\r\n"; - - return createNativeStream (toString (! usePostCommand), usePostCommand, headersAndPostData, - progressCallback, progressCallbackContext, - headers, timeOutMs, responseHeaders); -} - -bool URL::readEntireBinaryStream (MemoryBlock& destData, - const bool usePostCommand) const -{ - const ScopedPointer in (createInputStream (usePostCommand)); - - if (in != nullptr) - { - in->readIntoMemoryBlock (destData); - return true; - } - - return false; -} - -String URL::readEntireTextStream (const bool usePostCommand) const -{ - const ScopedPointer in (createInputStream (usePostCommand)); - - if (in != nullptr) - return in->readEntireStreamAsString(); - - return String::empty; -} - -XmlElement* URL::readEntireXmlStream (const bool usePostCommand) const -{ - return XmlDocument::parse (readEntireTextStream (usePostCommand)); -} - -const URL URL::withParameter (const String& parameterName, - const String& parameterValue) const -{ - URL u (*this); - u.parameters.set (parameterName, parameterValue); - return u; -} - -const URL URL::withFileToUpload (const String& parameterName, - const File& fileToUpload, - const String& mimeType) const -{ - jassert (mimeType.isNotEmpty()); // You need to supply a mime type! - - URL u (*this); - u.filesToUpload.set (parameterName, fileToUpload.getFullPathName()); - u.mimeTypes.set (parameterName, mimeType); - return u; -} - -const URL URL::withPOSTData (const String& postData_) const -{ - URL u (*this); - u.postData = postData_; - return u; -} - -const StringPairArray& URL::getParameters() const -{ - return parameters; -} - -const StringPairArray& URL::getFilesToUpload() const -{ - return filesToUpload; -} - -const StringPairArray& URL::getMimeTypesOfUploadFiles() const -{ - return mimeTypes; -} - -String URL::removeEscapeChars (const String& s) -{ - String result (s.replaceCharacter ('+', ' ')); - - if (! result.containsChar ('%')) - return result; - - // We need to operate on the string as raw UTF8 chars, and then recombine them into unicode - // after all the replacements have been made, so that multi-byte chars are handled. - Array utf8 (result.toUTF8().getAddress(), result.getNumBytesAsUTF8()); - - for (int i = 0; i < utf8.size(); ++i) - { - if (utf8.getUnchecked(i) == '%') - { - const int hexDigit1 = CharacterFunctions::getHexDigitValue (utf8 [i + 1]); - const int hexDigit2 = CharacterFunctions::getHexDigitValue (utf8 [i + 2]); - - if (hexDigit1 >= 0 && hexDigit2 >= 0) - { - utf8.set (i, (char) ((hexDigit1 << 4) + hexDigit2)); - utf8.removeRange (i + 1, 2); - } - } - } - - return String::fromUTF8 (utf8.getRawDataPointer(), utf8.size()); -} - -String URL::addEscapeChars (const String& s, const bool isParameter) -{ - const CharPointer_UTF8 legalChars (isParameter ? "_-.*!'()" - : ",$_-.*!'()"); - - Array utf8 (s.toUTF8().getAddress(), s.getNumBytesAsUTF8()); - - for (int i = 0; i < utf8.size(); ++i) - { - const char c = utf8.getUnchecked(i); - - if (! (CharacterFunctions::isLetterOrDigit (c) - || legalChars.indexOf ((juce_wchar) c) >= 0)) - { - if (c == ' ') - { - utf8.set (i, '+'); - } - else - { - static const char* const hexDigits = "0123456789abcdef"; - - utf8.set (i, '%'); - utf8.insert (++i, hexDigits [((uint8) c) >> 4]); - utf8.insert (++i, hexDigits [c & 15]); - } - } - } - - return String::fromUTF8 (utf8.getRawDataPointer(), utf8.size()); -} - -bool URL::launchInDefaultBrowser() const -{ - String u (toString (true)); - - if (u.containsChar ('@') && ! u.containsChar (':')) - u = "mailto:" + u; - - return Process::openDocument (u, String::empty); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_URL.cpp ***/ - - -/*** Start of inlined file: juce_MACAddress.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MACAddress::MACAddress() - : asInt64 (0) -{ -} - -MACAddress::MACAddress (const MACAddress& other) - : asInt64 (other.asInt64) -{ -} - -MACAddress& MACAddress::operator= (const MACAddress& other) -{ - asInt64 = other.asInt64; - return *this; -} - -MACAddress::MACAddress (const uint8 bytes[6]) - : asInt64 (0) -{ - memcpy (asBytes, bytes, sizeof (asBytes)); -} - -String MACAddress::toString() const -{ - String s; - - for (int i = 0; i < numElementsInArray (asBytes); ++i) - { - s << String::toHexString ((int) asBytes[i]).paddedLeft ('0', 2); - - if (i < numElementsInArray (asBytes) - 1) - s << '-'; - } - - return s; -} - -int64 MACAddress::toInt64() const noexcept -{ - int64 n = 0; - - for (int i = numElementsInArray (asBytes); --i >= 0;) - n = (n << 8) | asBytes[i]; - - return n; -} - -bool MACAddress::isNull() const noexcept { return asInt64 == 0; } - -bool MACAddress::operator== (const MACAddress& other) const noexcept { return asInt64 == other.asInt64; } -bool MACAddress::operator!= (const MACAddress& other) const noexcept { return asInt64 != other.asInt64; } - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MACAddress.cpp ***/ - - -/*** Start of inlined file: juce_BufferedInputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace -{ - int calcBufferStreamBufferSize (int requestedSize, InputStream* const source) noexcept - { - // You need to supply a real stream when creating a BufferedInputStream - jassert (source != nullptr); - - requestedSize = jmax (256, requestedSize); - - const int64 sourceSize = source->getTotalLength(); - if (sourceSize >= 0 && sourceSize < requestedSize) - requestedSize = jmax (32, (int) sourceSize); - - return requestedSize; - } -} - -BufferedInputStream::BufferedInputStream (InputStream* const sourceStream, const int bufferSize_, - const bool deleteSourceWhenDestroyed) - : source (sourceStream, deleteSourceWhenDestroyed), - bufferSize (calcBufferStreamBufferSize (bufferSize_, sourceStream)), - position (sourceStream->getPosition()), - lastReadPos (0), - bufferStart (position), - bufferOverlap (128) -{ - buffer.malloc (bufferSize); -} - -BufferedInputStream::BufferedInputStream (InputStream& sourceStream, const int bufferSize_) - : source (&sourceStream, false), - bufferSize (calcBufferStreamBufferSize (bufferSize_, &sourceStream)), - position (sourceStream.getPosition()), - lastReadPos (0), - bufferStart (position), - bufferOverlap (128) -{ - buffer.malloc (bufferSize); -} - -BufferedInputStream::~BufferedInputStream() -{ -} - -int64 BufferedInputStream::getTotalLength() -{ - return source->getTotalLength(); -} - -int64 BufferedInputStream::getPosition() -{ - return position; -} - -bool BufferedInputStream::setPosition (int64 newPosition) -{ - position = jmax ((int64) 0, newPosition); - return true; -} - -bool BufferedInputStream::isExhausted() -{ - return (position >= lastReadPos) - && source->isExhausted(); -} - -void BufferedInputStream::ensureBuffered() -{ - const int64 bufferEndOverlap = lastReadPos - bufferOverlap; - - if (position < bufferStart || position >= bufferEndOverlap) - { - int bytesRead; - - if (position < lastReadPos - && position >= bufferEndOverlap - && position >= bufferStart) - { - const int bytesToKeep = (int) (lastReadPos - position); - memmove (buffer, buffer + (int) (position - bufferStart), bytesToKeep); - - bufferStart = position; - - bytesRead = source->read (buffer + bytesToKeep, - bufferSize - bytesToKeep); - - lastReadPos += bytesRead; - bytesRead += bytesToKeep; - } - else - { - bufferStart = position; - source->setPosition (bufferStart); - bytesRead = source->read (buffer, bufferSize); - lastReadPos = bufferStart + bytesRead; - } - - while (bytesRead < bufferSize) - buffer [bytesRead++] = 0; - } -} - -int BufferedInputStream::read (void* destBuffer, int maxBytesToRead) -{ - if (position >= bufferStart - && position + maxBytesToRead <= lastReadPos) - { - memcpy (destBuffer, buffer + (int) (position - bufferStart), maxBytesToRead); - position += maxBytesToRead; - - return maxBytesToRead; - } - else - { - if (position < bufferStart || position >= lastReadPos) - ensureBuffered(); - - int bytesRead = 0; - - while (maxBytesToRead > 0) - { - const int bytesAvailable = jmin (maxBytesToRead, (int) (lastReadPos - position)); - - if (bytesAvailable > 0) - { - memcpy (destBuffer, buffer + (int) (position - bufferStart), bytesAvailable); - maxBytesToRead -= bytesAvailable; - bytesRead += bytesAvailable; - position += bytesAvailable; - destBuffer = static_cast (destBuffer) + bytesAvailable; - } - - const int64 oldLastReadPos = lastReadPos; - ensureBuffered(); - - if (oldLastReadPos == lastReadPos) - break; // if ensureBuffered() failed to read any more data, bail out - - if (isExhausted()) - break; - } - - return bytesRead; - } -} - -String BufferedInputStream::readString() -{ - if (position >= bufferStart - && position < lastReadPos) - { - const int maxChars = (int) (lastReadPos - position); - - const char* const src = buffer + (int) (position - bufferStart); - - for (int i = 0; i < maxChars; ++i) - { - if (src[i] == 0) - { - position += i + 1; - return String::fromUTF8 (src, i); - } - } - } - - return InputStream::readString(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_BufferedInputStream.cpp ***/ - - -/*** Start of inlined file: juce_FileInputSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -FileInputSource::FileInputSource (const File& file_, bool useFileTimeInHashGeneration_) - : file (file_), useFileTimeInHashGeneration (useFileTimeInHashGeneration_) -{ -} - -FileInputSource::~FileInputSource() -{ -} - -InputStream* FileInputSource::createInputStream() -{ - return file.createInputStream(); -} - -InputStream* FileInputSource::createInputStreamFor (const String& relatedItemPath) -{ - return file.getSiblingFile (relatedItemPath).createInputStream(); -} - -int64 FileInputSource::hashCode() const -{ - int64 h = file.hashCode(); - - if (useFileTimeInHashGeneration) - h ^= file.getLastModificationTime().toMilliseconds(); - - return h; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileInputSource.cpp ***/ - - -/*** Start of inlined file: juce_MemoryInputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MemoryInputStream::MemoryInputStream (const void* const sourceData, - const size_t sourceDataSize, - const bool keepInternalCopy) - : data (static_cast (sourceData)), - dataSize (sourceDataSize), - position (0) -{ - if (keepInternalCopy) - createInternalCopy(); -} - -MemoryInputStream::MemoryInputStream (const MemoryBlock& sourceData, - const bool keepInternalCopy) - : data (static_cast (sourceData.getData())), - dataSize (sourceData.getSize()), - position (0) -{ - if (keepInternalCopy) - createInternalCopy(); -} - -void MemoryInputStream::createInternalCopy() -{ - internalCopy.malloc (dataSize); - memcpy (internalCopy, data, dataSize); - data = internalCopy; -} - -MemoryInputStream::~MemoryInputStream() -{ -} - -int64 MemoryInputStream::getTotalLength() -{ - return dataSize; -} - -int MemoryInputStream::read (void* const buffer, const int howMany) -{ - jassert (howMany >= 0); - const int num = jmin (howMany, (int) (dataSize - position)); - if (num <= 0) - return 0; - - memcpy (buffer, data + position, num); - position += num; - return (int) num; -} - -bool MemoryInputStream::isExhausted() -{ - return position >= dataSize; -} - -bool MemoryInputStream::setPosition (const int64 pos) -{ - position = (int) jlimit ((int64) 0, (int64) dataSize, pos); - return true; -} - -int64 MemoryInputStream::getPosition() -{ - return position; -} - -#if JUCE_UNIT_TESTS - -class MemoryStreamTests : public UnitTest -{ -public: - MemoryStreamTests() : UnitTest ("MemoryInputStream & MemoryOutputStream") {} - - void runTest() - { - beginTest ("Basics"); - Random r; - - int randomInt = r.nextInt(); - int64 randomInt64 = r.nextInt64(); - double randomDouble = r.nextDouble(); - String randomString (createRandomWideCharString()); - - MemoryOutputStream mo; - mo.writeInt (randomInt); - mo.writeIntBigEndian (randomInt); - mo.writeCompressedInt (randomInt); - mo.writeString (randomString); - mo.writeInt64 (randomInt64); - mo.writeInt64BigEndian (randomInt64); - mo.writeDouble (randomDouble); - mo.writeDoubleBigEndian (randomDouble); - - MemoryInputStream mi (mo.getData(), mo.getDataSize(), false); - expect (mi.readInt() == randomInt); - expect (mi.readIntBigEndian() == randomInt); - expect (mi.readCompressedInt() == randomInt); - expectEquals (mi.readString(), randomString); - expect (mi.readInt64() == randomInt64); - expect (mi.readInt64BigEndian() == randomInt64); - expect (mi.readDouble() == randomDouble); - expect (mi.readDoubleBigEndian() == randomDouble); - } - - static String createRandomWideCharString() - { - juce_wchar buffer [50] = { 0 }; - Random r; - - for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) - { - if (r.nextBool()) - { - do - { - buffer[i] = (juce_wchar) (1 + r.nextInt (0x10ffff - 1)); - } - while (! CharPointer_UTF16::canRepresent (buffer[i])); - } - else - buffer[i] = (juce_wchar) (1 + r.nextInt (0xff)); - } - - return CharPointer_UTF32 (buffer); - } -}; - -static MemoryStreamTests memoryInputStreamUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MemoryInputStream.cpp ***/ - - -/*** Start of inlined file: juce_MemoryOutputStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MemoryOutputStream::MemoryOutputStream (const size_t initialSize) - : data (internalBlock), - position (0), - size (0) -{ - internalBlock.setSize (initialSize, false); -} - -MemoryOutputStream::MemoryOutputStream (MemoryBlock& memoryBlockToWriteTo, - const bool appendToExistingBlockContent) - : data (memoryBlockToWriteTo), - position (0), - size (0) -{ - if (appendToExistingBlockContent) - position = size = memoryBlockToWriteTo.getSize(); -} - -MemoryOutputStream::~MemoryOutputStream() -{ - trimExternalBlockSize(); -} - -void MemoryOutputStream::flush() -{ - trimExternalBlockSize(); -} - -void MemoryOutputStream::trimExternalBlockSize() -{ - if (&data != &internalBlock) - data.setSize (size, false); -} - -void MemoryOutputStream::preallocate (const size_t bytesToPreallocate) -{ - data.ensureSize (bytesToPreallocate + 1); -} - -void MemoryOutputStream::reset() noexcept -{ - position = 0; - size = 0; -} - -void MemoryOutputStream::prepareToWrite (int numBytes) -{ - const size_t storageNeeded = position + numBytes; - - if (storageNeeded >= data.getSize()) - data.ensureSize ((storageNeeded + jmin ((int) (storageNeeded / 2), 1024 * 1024) + 32) & ~31); -} - -bool MemoryOutputStream::write (const void* const buffer, int howMany) -{ - if (howMany > 0) - { - prepareToWrite (howMany); - memcpy (static_cast (data.getData()) + position, buffer, howMany); - position += howMany; - size = jmax (size, position); - } - - return true; -} - -void MemoryOutputStream::writeRepeatedByte (uint8 byte, int howMany) -{ - if (howMany > 0) - { - prepareToWrite (howMany); - memset (static_cast (data.getData()) + position, byte, howMany); - position += howMany; - size = jmax (size, position); - } -} - -const void* MemoryOutputStream::getData() const noexcept -{ - void* const d = data.getData(); - - if (data.getSize() > size) - static_cast (d) [size] = 0; - - return d; -} - -bool MemoryOutputStream::setPosition (int64 newPosition) -{ - if (newPosition <= (int64) size) - { - // ok to seek backwards - position = jlimit ((size_t) 0, size, (size_t) newPosition); - return true; - } - else - { - // trying to make it bigger isn't a good thing to do.. - return false; - } -} - -int MemoryOutputStream::writeFromInputStream (InputStream& source, int64 maxNumBytesToWrite) -{ - // before writing from an input, see if we can preallocate to make it more efficient.. - int64 availableData = source.getTotalLength() - source.getPosition(); - - if (availableData > 0) - { - if (maxNumBytesToWrite > 0 && maxNumBytesToWrite < availableData) - availableData = maxNumBytesToWrite; - - preallocate (data.getSize() + (size_t) maxNumBytesToWrite); - } - - return OutputStream::writeFromInputStream (source, maxNumBytesToWrite); -} - -String MemoryOutputStream::toUTF8() const -{ - const char* const d = static_cast (getData()); - return String (CharPointer_UTF8 (d), CharPointer_UTF8 (d + getDataSize())); -} - -String MemoryOutputStream::toString() const -{ - return String::createStringFromData (getData(), (int) getDataSize()); -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const MemoryOutputStream& streamToRead) -{ - stream.write (streamToRead.getData(), (int) streamToRead.getDataSize()); - return stream; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MemoryOutputStream.cpp ***/ - - -/*** Start of inlined file: juce_SubregionStream.cpp ***/ -BEGIN_JUCE_NAMESPACE - -SubregionStream::SubregionStream (InputStream* const sourceStream, - const int64 startPositionInSourceStream_, - const int64 lengthOfSourceStream_, - const bool deleteSourceWhenDestroyed) - : source (sourceStream, deleteSourceWhenDestroyed), - startPositionInSourceStream (startPositionInSourceStream_), - lengthOfSourceStream (lengthOfSourceStream_) -{ - SubregionStream::setPosition (0); -} - -SubregionStream::~SubregionStream() -{ -} - -int64 SubregionStream::getTotalLength() -{ - const int64 srcLen = source->getTotalLength() - startPositionInSourceStream; - - return (lengthOfSourceStream >= 0) ? jmin (lengthOfSourceStream, srcLen) - : srcLen; -} - -int64 SubregionStream::getPosition() -{ - return source->getPosition() - startPositionInSourceStream; -} - -bool SubregionStream::setPosition (int64 newPosition) -{ - return source->setPosition (jmax ((int64) 0, newPosition + startPositionInSourceStream)); -} - -int SubregionStream::read (void* destBuffer, int maxBytesToRead) -{ - if (lengthOfSourceStream < 0) - { - return source->read (destBuffer, maxBytesToRead); - } - else - { - maxBytesToRead = (int) jmin ((int64) maxBytesToRead, lengthOfSourceStream - getPosition()); - - if (maxBytesToRead <= 0) - return 0; - - return source->read (destBuffer, maxBytesToRead); - } -} - -bool SubregionStream::isExhausted() -{ - if (lengthOfSourceStream >= 0) - return (getPosition() >= lengthOfSourceStream) || source->isExhausted(); - else - return source->isExhausted(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_SubregionStream.cpp ***/ - - -/*** Start of inlined file: juce_PerformanceCounter.cpp ***/ -BEGIN_JUCE_NAMESPACE - -PerformanceCounter::PerformanceCounter (const String& name_, - int runsPerPrintout, - const File& loggingFile) - : name (name_), - numRuns (0), - runsPerPrint (runsPerPrintout), - totalTime (0), - outputFile (loggingFile) -{ - if (outputFile != File::nonexistent) - { - String s ("**** Counter for \""); - s << name_ << "\" started at: " - << Time::getCurrentTime().toString (true, true) - << newLine; - - outputFile.appendText (s, false, false); - } -} - -PerformanceCounter::~PerformanceCounter() -{ - printStatistics(); -} - -void PerformanceCounter::start() -{ - started = Time::getHighResolutionTicks(); -} - -void PerformanceCounter::stop() -{ - const int64 now = Time::getHighResolutionTicks(); - - totalTime += 1000.0 * Time::highResolutionTicksToSeconds (now - started); - - if (++numRuns == runsPerPrint) - printStatistics(); -} - -void PerformanceCounter::printStatistics() -{ - if (numRuns > 0) - { - String s ("Performance count for \""); - s << name << "\" - average over " << numRuns << " run(s) = "; - - const int micros = (int) (totalTime * (1000.0 / numRuns)); - - if (micros > 10000) - s << (micros/1000) << " millisecs"; - else - s << micros << " microsecs"; - - s << ", total = " << String (totalTime / 1000, 5) << " seconds"; - - Logger::outputDebugString (s); - - s << newLine; - - if (outputFile != File::nonexistent) - outputFile.appendText (s, false, false); - - numRuns = 0; - totalTime = 0; - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PerformanceCounter.cpp ***/ - - -/*** Start of inlined file: juce_Uuid.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace -{ - int64 getRandomSeedFromMACAddresses() - { - Array result; - MACAddress::findAllAddresses (result); - - Random r; - for (int i = 0; i < result.size(); ++i) - r.combineSeed (result[i].toInt64()); - - return r.nextInt64(); - } -} - -Uuid::Uuid() -{ - // The normal random seeding is pretty good, but we'll throw some MAC addresses - // into the mix too, to make it very very unlikely that two UUIDs will ever be the same.. - - static Random r1 (getRandomSeedFromMACAddresses()); - - value.asInt64[0] = r1.nextInt64(); - value.asInt64[1] = r1.nextInt64(); - - Random r2; - - for (int i = 4; --i >= 0;) - value.asInt[i] ^= r2.nextInt(); -} - -Uuid::~Uuid() noexcept -{ -} - -Uuid::Uuid (const Uuid& other) - : value (other.value) -{ -} - -Uuid& Uuid::operator= (const Uuid& other) -{ - value = other.value; - return *this; -} - -bool Uuid::operator== (const Uuid& other) const -{ - return value.asInt64[0] == other.value.asInt64[0] - && value.asInt64[1] == other.value.asInt64[1]; -} - -bool Uuid::operator!= (const Uuid& other) const -{ - return ! operator== (other); -} - -bool Uuid::isNull() const noexcept -{ - return (value.asInt64 [0] == 0) && (value.asInt64 [1] == 0); -} - -String Uuid::toString() const -{ - return String::toHexString (value.asBytes, sizeof (value.asBytes), 0); -} - -Uuid::Uuid (const String& uuidString) -{ - operator= (uuidString); -} - -Uuid& Uuid::operator= (const String& uuidString) -{ - MemoryBlock mb; - mb.loadFromHexString (uuidString); - mb.ensureSize (sizeof (value.asBytes), true); - mb.copyTo (value.asBytes, 0, sizeof (value.asBytes)); - return *this; -} - -Uuid::Uuid (const uint8* const rawData) -{ - operator= (rawData); -} - -Uuid& Uuid::operator= (const uint8* const rawData) -{ - if (rawData != nullptr) - memcpy (value.asBytes, rawData, sizeof (value.asBytes)); - else - zeromem (value.asBytes, sizeof (value.asBytes)); - - return *this; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Uuid.cpp ***/ - - -/*** Start of inlined file: juce_ZipFile.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class ZipFile::ZipEntryInfo -{ -public: - ZipFile::ZipEntry entry; - int streamOffset; - int compressedSize; - bool compressed; -}; - -class ZipFile::ZipInputStream : public InputStream -{ -public: - - ZipInputStream (ZipFile& file_, ZipFile::ZipEntryInfo& zei) - : file (file_), - zipEntryInfo (zei), - pos (0), - headerSize (0), - inputStream (file_.inputStream) - { - if (file_.inputSource != nullptr) - { - inputStream = streamToDelete = file.inputSource->createInputStream(); - } - else - { - #if JUCE_DEBUG - file_.numOpenStreams++; - #endif - } - - char buffer [30]; - - if (inputStream != nullptr - && inputStream->setPosition (zei.streamOffset) - && inputStream->read (buffer, 30) == 30 - && ByteOrder::littleEndianInt (buffer) == 0x04034b50) - { - headerSize = 30 + ByteOrder::littleEndianShort (buffer + 26) - + ByteOrder::littleEndianShort (buffer + 28); - } - } - - ~ZipInputStream() - { - #if JUCE_DEBUG - if (inputStream != nullptr && inputStream == file.inputStream) - file.numOpenStreams--; - #endif - } - - int64 getTotalLength() - { - return zipEntryInfo.compressedSize; - } - - int read (void* buffer, int howMany) - { - if (headerSize <= 0) - return 0; - - howMany = (int) jmin ((int64) howMany, zipEntryInfo.compressedSize - pos); - - if (inputStream == nullptr) - return 0; - - int num; - - if (inputStream == file.inputStream) - { - const ScopedLock sl (file.lock); - inputStream->setPosition (pos + zipEntryInfo.streamOffset + headerSize); - num = inputStream->read (buffer, howMany); - } - else - { - inputStream->setPosition (pos + zipEntryInfo.streamOffset + headerSize); - num = inputStream->read (buffer, howMany); - } - - pos += num; - return num; - } - - bool isExhausted() - { - return headerSize <= 0 || pos >= zipEntryInfo.compressedSize; - } - - int64 getPosition() - { - return pos; - } - - bool setPosition (int64 newPos) - { - pos = jlimit ((int64) 0, (int64) zipEntryInfo.compressedSize, newPos); - return true; - } - -private: - - ZipFile& file; - ZipEntryInfo zipEntryInfo; - int64 pos; - int headerSize; - InputStream* inputStream; - ScopedPointer streamToDelete; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ZipInputStream); -}; - -ZipFile::ZipFile (InputStream* const source_, const bool deleteStreamWhenDestroyed) - : inputStream (source_) - #if JUCE_DEBUG - , numOpenStreams (0) - #endif -{ - if (deleteStreamWhenDestroyed) - streamToDelete = inputStream; - - init(); -} - -ZipFile::ZipFile (const File& file) - : inputStream (nullptr) - #if JUCE_DEBUG - , numOpenStreams (0) - #endif -{ - inputSource = new FileInputSource (file); - init(); -} - -ZipFile::ZipFile (InputSource* const inputSource_) - : inputStream (nullptr), - inputSource (inputSource_) - #if JUCE_DEBUG - , numOpenStreams (0) - #endif -{ - init(); -} - -ZipFile::~ZipFile() -{ - #if JUCE_DEBUG - entries.clear(); - - /* If you hit this assertion, it means you've created a stream to read one of the items in the - zipfile, but you've forgotten to delete that stream object before deleting the file.. - Streams can't be kept open after the file is deleted because they need to share the input - stream that the file uses to read itself. - */ - jassert (numOpenStreams == 0); - #endif -} - -int ZipFile::getNumEntries() const noexcept -{ - return entries.size(); -} - -const ZipFile::ZipEntry* ZipFile::getEntry (const int index) const noexcept -{ - ZipEntryInfo* const zei = entries [index]; - return zei != nullptr ? &(zei->entry) : nullptr; -} - -int ZipFile::getIndexOfFileName (const String& fileName) const noexcept -{ - for (int i = 0; i < entries.size(); ++i) - if (entries.getUnchecked (i)->entry.filename == fileName) - return i; - - return -1; -} - -const ZipFile::ZipEntry* ZipFile::getEntry (const String& fileName) const noexcept -{ - return getEntry (getIndexOfFileName (fileName)); -} - -InputStream* ZipFile::createStreamForEntry (const int index) -{ - ZipEntryInfo* const zei = entries[index]; - InputStream* stream = nullptr; - - if (zei != nullptr) - { - stream = new ZipInputStream (*this, *zei); - - if (zei->compressed) - { - stream = new GZIPDecompressorInputStream (stream, true, true, - zei->entry.uncompressedSize); - - // (much faster to unzip in big blocks using a buffer..) - stream = new BufferedInputStream (stream, 32768, true); - } - } - - return stream; -} - -class ZipFile::ZipFilenameComparator -{ -public: - int compareElements (const ZipFile::ZipEntryInfo* first, const ZipFile::ZipEntryInfo* second) - { - return first->entry.filename.compare (second->entry.filename); - } -}; - -void ZipFile::sortEntriesByFilename() -{ - ZipFilenameComparator sorter; - entries.sort (sorter); -} - -void ZipFile::init() -{ - ScopedPointer toDelete; - InputStream* in = inputStream; - - if (inputSource != nullptr) - { - in = inputSource->createInputStream(); - toDelete = in; - } - - if (in != nullptr) - { - int numEntries = 0; - int pos = findEndOfZipEntryTable (*in, numEntries); - - if (pos >= 0 && pos < in->getTotalLength()) - { - const int size = (int) (in->getTotalLength() - pos); - - in->setPosition (pos); - MemoryBlock headerData; - - if (in->readIntoMemoryBlock (headerData, size) == size) - { - pos = 0; - - for (int i = 0; i < numEntries; ++i) - { - if (pos + 46 > size) - break; - - const char* const buffer = static_cast (headerData.getData()) + pos; - - const int fileNameLen = ByteOrder::littleEndianShort (buffer + 28); - - if (pos + 46 + fileNameLen > size) - break; - - ZipEntryInfo* const zei = new ZipEntryInfo(); - zei->entry.filename = String::fromUTF8 (buffer + 46, fileNameLen); - - const int time = ByteOrder::littleEndianShort (buffer + 12); - const int date = ByteOrder::littleEndianShort (buffer + 14); - - const int year = 1980 + (date >> 9); - const int month = ((date >> 5) & 15) - 1; - const int day = date & 31; - const int hours = time >> 11; - const int minutes = (time >> 5) & 63; - const int seconds = (time & 31) << 1; - - zei->entry.fileTime = Time (year, month, day, hours, minutes, seconds); - - zei->compressed = ByteOrder::littleEndianShort (buffer + 10) != 0; - zei->compressedSize = ByteOrder::littleEndianInt (buffer + 20); - zei->entry.uncompressedSize = ByteOrder::littleEndianInt (buffer + 24); - - zei->streamOffset = ByteOrder::littleEndianInt (buffer + 42); - entries.add (zei); - - pos += 46 + fileNameLen - + ByteOrder::littleEndianShort (buffer + 30) - + ByteOrder::littleEndianShort (buffer + 32); - } - } - } - } -} - -int ZipFile::findEndOfZipEntryTable (InputStream& input, int& numEntries) -{ - BufferedInputStream in (input, 8192); - - in.setPosition (in.getTotalLength()); - int64 pos = in.getPosition(); - const int64 lowestPos = jmax ((int64) 0, pos - 1024); - - char buffer [32] = { 0 }; - - while (pos > lowestPos) - { - in.setPosition (pos - 22); - pos = in.getPosition(); - memcpy (buffer + 22, buffer, 4); - - if (in.read (buffer, 22) != 22) - return 0; - - for (int i = 0; i < 22; ++i) - { - if (ByteOrder::littleEndianInt (buffer + i) == 0x06054b50) - { - in.setPosition (pos + i); - in.read (buffer, 22); - numEntries = ByteOrder::littleEndianShort (buffer + 10); - - return ByteOrder::littleEndianInt (buffer + 16); - } - } - } - - return 0; -} - -bool ZipFile::uncompressTo (const File& targetDirectory, - const bool shouldOverwriteFiles) -{ - for (int i = 0; i < entries.size(); ++i) - if (! uncompressEntry (i, targetDirectory, shouldOverwriteFiles)) - return false; - - return true; -} - -bool ZipFile::uncompressEntry (const int index, - const File& targetDirectory, - bool shouldOverwriteFiles) -{ - const ZipEntryInfo* zei = entries [index]; - - if (zei != nullptr) - { - const File targetFile (targetDirectory.getChildFile (zei->entry.filename)); - - if (zei->entry.filename.endsWithChar ('/')) - { - return targetFile.createDirectory(); // (entry is a directory, not a file) - } - else - { - ScopedPointer in (createStreamForEntry (index)); - - if (in != nullptr) - { - if (shouldOverwriteFiles && ! targetFile.deleteFile()) - return false; - - if ((! targetFile.exists()) && targetFile.getParentDirectory().createDirectory()) - { - ScopedPointer out (targetFile.createOutputStream()); - - if (out != nullptr) - { - out->writeFromInputStream (*in, -1); - out = nullptr; - - targetFile.setCreationTime (zei->entry.fileTime); - targetFile.setLastModificationTime (zei->entry.fileTime); - targetFile.setLastAccessTime (zei->entry.fileTime); - - return true; - } - } - } - } - } - - return false; -} - -extern unsigned long juce_crc32 (unsigned long crc, const unsigned char* buf, unsigned len); - -class ZipFile::Builder::Item -{ -public: - Item (const File& file_, const int compressionLevel_, const String& storedPathName_) - : file (file_), - storedPathname (storedPathName_.isEmpty() ? file_.getFileName() : storedPathName_), - compressionLevel (compressionLevel_), - compressedSize (0), - headerStart (0) - { - } - - bool writeData (OutputStream& target, const int64 overallStartPosition) - { - MemoryOutputStream compressedData; - - if (compressionLevel > 0) - { - GZIPCompressorOutputStream compressor (&compressedData, compressionLevel, false, - GZIPCompressorOutputStream::windowBitsRaw); - if (! writeSource (compressor)) - return false; - } - else - { - if (! writeSource (compressedData)) - return false; - } - - compressedSize = (int) compressedData.getDataSize(); - headerStart = (int) (target.getPosition() - overallStartPosition); - - target.writeInt (0x04034b50); - writeFlagsAndSizes (target); - target << storedPathname - << compressedData; - - return true; - } - - bool writeDirectoryEntry (OutputStream& target) - { - target.writeInt (0x02014b50); - target.writeShort (20); // version written - writeFlagsAndSizes (target); - target.writeShort (0); // comment length - target.writeShort (0); // start disk num - target.writeShort (0); // internal attributes - target.writeInt (0); // external attributes - target.writeInt (headerStart); - target << storedPathname; - - return true; - } - -private: - const File file; - String storedPathname; - int compressionLevel, compressedSize, headerStart; - uint32 checksum; - - void writeTimeAndDate (OutputStream& target) const - { - const Time t (file.getLastModificationTime()); - target.writeShort ((short) (t.getSeconds() + (t.getMinutes() << 5) + (t.getHours() << 11))); - target.writeShort ((short) (t.getDayOfMonth() + ((t.getMonth() + 1) << 5) + ((t.getYear() - 1980) << 9))); - } - - bool writeSource (OutputStream& target) - { - checksum = 0; - ScopedPointer input (file.createInputStream()); - - if (input == nullptr) - return false; - - const int bufferSize = 2048; - HeapBlock buffer (bufferSize); - - while (! input->isExhausted()) - { - const int bytesRead = input->read (buffer, bufferSize); - - if (bytesRead < 0) - return false; - - checksum = juce_crc32 (checksum, buffer, bytesRead); - target.write (buffer, bytesRead); - } - - return true; - } - - void writeFlagsAndSizes (OutputStream& target) const - { - target.writeShort (10); // version needed - target.writeShort (0); // flags - target.writeShort (compressionLevel > 0 ? (short) 8 : (short) 0); - writeTimeAndDate (target); - target.writeInt (checksum); - target.writeInt (compressedSize); - target.writeInt ((int) file.getSize()); - target.writeShort ((short) storedPathname.toUTF8().sizeInBytes() - 1); - target.writeShort (0); // extra field length - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Item); -}; - -ZipFile::Builder::Builder() {} -ZipFile::Builder::~Builder() {} - -void ZipFile::Builder::addFile (const File& fileToAdd, const int compressionLevel, const String& storedPathName) -{ - items.add (new Item (fileToAdd, compressionLevel, storedPathName)); -} - -bool ZipFile::Builder::writeToStream (OutputStream& target) const -{ - const int64 fileStart = target.getPosition(); - - int i; - for (i = 0; i < items.size(); ++i) - if (! items.getUnchecked (i)->writeData (target, fileStart)) - return false; - - const int64 directoryStart = target.getPosition(); - - for (i = 0; i < items.size(); ++i) - if (! items.getUnchecked (i)->writeDirectoryEntry (target)) - return false; - - const int64 directoryEnd = target.getPosition(); - - target.writeInt (0x06054b50); - target.writeShort (0); - target.writeShort (0); - target.writeShort ((short) items.size()); - target.writeShort ((short) items.size()); - target.writeInt ((int) (directoryEnd - directoryStart)); - target.writeInt ((int) (directoryStart - fileStart)); - target.writeShort (0); - target.flush(); - - return true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ZipFile.cpp ***/ - - -/*** Start of inlined file: juce_CharacterFunctions.cpp ***/ -#if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4514 4996) -#endif - -#if ! JUCE_ANDROID - #include -#endif - -#include - -BEGIN_JUCE_NAMESPACE - -juce_wchar CharacterFunctions::toUpperCase (const juce_wchar character) noexcept -{ - return towupper ((wchar_t) character); -} - -juce_wchar CharacterFunctions::toLowerCase (const juce_wchar character) noexcept -{ - return towlower ((wchar_t) character); -} - -bool CharacterFunctions::isUpperCase (const juce_wchar character) noexcept -{ - #if JUCE_WINDOWS - return iswupper ((wchar_t) character) != 0; - #else - return toLowerCase (character) != character; - #endif -} - -bool CharacterFunctions::isLowerCase (const juce_wchar character) noexcept -{ - #if JUCE_WINDOWS - return iswlower ((wchar_t) character) != 0; - #else - return toUpperCase (character) != character; - #endif -} - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -bool CharacterFunctions::isWhitespace (const char character) noexcept -{ - return character == ' ' || (character <= 13 && character >= 9); -} - -bool CharacterFunctions::isWhitespace (const juce_wchar character) noexcept -{ - return iswspace ((wchar_t) character) != 0; -} - -bool CharacterFunctions::isDigit (const char character) noexcept -{ - return (character >= '0' && character <= '9'); -} - -bool CharacterFunctions::isDigit (const juce_wchar character) noexcept -{ - return iswdigit ((wchar_t) character) != 0; -} - -bool CharacterFunctions::isLetter (const char character) noexcept -{ - return (character >= 'a' && character <= 'z') - || (character >= 'A' && character <= 'Z'); -} - -bool CharacterFunctions::isLetter (const juce_wchar character) noexcept -{ - return iswalpha ((wchar_t) character) != 0; -} - -bool CharacterFunctions::isLetterOrDigit (const char character) noexcept -{ - return (character >= 'a' && character <= 'z') - || (character >= 'A' && character <= 'Z') - || (character >= '0' && character <= '9'); -} - -bool CharacterFunctions::isLetterOrDigit (const juce_wchar character) noexcept -{ - return iswalnum ((wchar_t) character) != 0; -} - -int CharacterFunctions::getHexDigitValue (const juce_wchar digit) noexcept -{ - unsigned int d = digit - '0'; - if (d < (unsigned int) 10) - return (int) d; - - d += (unsigned int) ('0' - 'a'); - if (d < (unsigned int) 6) - return (int) d + 10; - - d += (unsigned int) ('a' - 'A'); - if (d < (unsigned int) 6) - return (int) d + 10; - - return -1; -} - -double CharacterFunctions::mulexp10 (const double value, int exponent) noexcept -{ - if (exponent == 0) - return value; - - if (value == 0) - return 0; - - const bool negative = (exponent < 0); - if (negative) - exponent = -exponent; - - double result = 1.0, power = 10.0; - for (int bit = 1; exponent != 0; bit <<= 1) - { - if ((exponent & bit) != 0) - { - exponent ^= bit; - result *= power; - if (exponent == 0) - break; - } - power *= power; - } - - return negative ? (value / result) : (value * result); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_CharacterFunctions.cpp ***/ - - -/*** Start of inlined file: juce_LocalisedStrings.cpp ***/ -BEGIN_JUCE_NAMESPACE - -LocalisedStrings::LocalisedStrings (const String& fileContents) -{ - loadFromText (fileContents); -} - -LocalisedStrings::LocalisedStrings (const File& fileToLoad) -{ - loadFromText (fileToLoad.loadFileAsString()); -} - -LocalisedStrings::~LocalisedStrings() -{ -} - -String LocalisedStrings::translate (const String& text) const -{ - return translations.getValue (text, text); -} - -namespace -{ - #if JUCE_CHECK_MEMORY_LEAKS - // By using this object to force a LocalisedStrings object to be created - // before the currentMappings object, we can force the static order-of-destruction to - // delete the currentMappings object first, which avoids a bogus leak warning. - // (Oddly, just creating a LocalisedStrings on the stack doesn't work in gcc, it - // has to be created with 'new' for this to work..) - struct LeakAvoidanceTrick - { - LeakAvoidanceTrick() - { - const ScopedPointer dummy (new LocalisedStrings (String())); - } - }; - - LeakAvoidanceTrick leakAvoidanceTrick; - #endif - - SpinLock currentMappingsLock; - ScopedPointer currentMappings; - - int findCloseQuote (const String& text, int startPos) - { - juce_wchar lastChar = 0; - String::CharPointerType t (text.getCharPointer() + startPos); - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - - if (c == 0 || (c == '"' && lastChar != '\\')) - break; - - lastChar = c; - ++startPos; - } - - return startPos; - } - - String unescapeString (const String& s) - { - return s.replace ("\\\"", "\"") - .replace ("\\\'", "\'") - .replace ("\\t", "\t") - .replace ("\\r", "\r") - .replace ("\\n", "\n"); - } -} - -void LocalisedStrings::loadFromText (const String& fileContents) -{ - StringArray lines; - lines.addLines (fileContents); - - for (int i = 0; i < lines.size(); ++i) - { - String line (lines[i].trim()); - - if (line.startsWithChar ('"')) - { - int closeQuote = findCloseQuote (line, 1); - - const String originalText (unescapeString (line.substring (1, closeQuote))); - - if (originalText.isNotEmpty()) - { - const int openingQuote = findCloseQuote (line, closeQuote + 1); - closeQuote = findCloseQuote (line, openingQuote + 1); - - const String newText (unescapeString (line.substring (openingQuote + 1, closeQuote))); - - if (newText.isNotEmpty()) - translations.set (originalText, newText); - } - } - else if (line.startsWithIgnoreCase ("language:")) - { - languageName = line.substring (9).trim(); - } - else if (line.startsWithIgnoreCase ("countries:")) - { - countryCodes.addTokens (line.substring (10).trim(), true); - countryCodes.trim(); - countryCodes.removeEmptyStrings(); - } - } -} - -void LocalisedStrings::setIgnoresCase (const bool shouldIgnoreCase) -{ - translations.setIgnoresCase (shouldIgnoreCase); -} - -void LocalisedStrings::setCurrentMappings (LocalisedStrings* newTranslations) -{ - const SpinLock::ScopedLockType sl (currentMappingsLock); - currentMappings = newTranslations; -} - -LocalisedStrings* LocalisedStrings::getCurrentMappings() -{ - return currentMappings; -} - -String LocalisedStrings::translateWithCurrentMappings (const String& text) -{ - const SpinLock::ScopedLockType sl (currentMappingsLock); - - if (currentMappings != nullptr) - return currentMappings->translate (text); - - return text; -} - -String LocalisedStrings::translateWithCurrentMappings (const char* text) -{ - return translateWithCurrentMappings (String (text)); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_LocalisedStrings.cpp ***/ - - -/*** Start of inlined file: juce_String.cpp ***/ -#if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4514 4996) -#endif - -#include - -BEGIN_JUCE_NAMESPACE - -NewLine newLine; - -#if defined (JUCE_STRINGS_ARE_UNICODE) && ! JUCE_STRINGS_ARE_UNICODE - #error "JUCE_STRINGS_ARE_UNICODE is deprecated! All strings are now unicode by default." -#endif - -#if JUCE_NATIVE_WCHAR_IS_UTF8 - typedef CharPointer_UTF8 CharPointer_wchar_t; -#elif JUCE_NATIVE_WCHAR_IS_UTF16 - typedef CharPointer_UTF16 CharPointer_wchar_t; -#else - typedef CharPointer_UTF32 CharPointer_wchar_t; -#endif - -static inline CharPointer_wchar_t castToCharPointer_wchar_t (const void* t) noexcept -{ - return CharPointer_wchar_t (static_cast (t)); -} - -class StringHolder -{ -public: - StringHolder() - : refCount (0x3fffffff), allocatedNumBytes (sizeof (*text)) - { - text[0] = 0; - } - - typedef String::CharPointerType CharPointerType; - typedef String::CharPointerType::CharType CharType; - - static const CharPointerType createUninitialisedBytes (const size_t numBytes) - { - StringHolder* const s = reinterpret_cast (new char [sizeof (StringHolder) - sizeof (CharType) + numBytes]); - s->refCount.value = 0; - s->allocatedNumBytes = numBytes; - return CharPointerType (s->text); - } - - template - static const CharPointerType createFromCharPointer (const CharPointer& text) - { - if (text.getAddress() == nullptr || text.isEmpty()) - return getEmpty(); - - CharPointer t (text); - size_t bytesNeeded = sizeof (CharType); - - while (! t.isEmpty()) - bytesNeeded += CharPointerType::getBytesRequiredFor (t.getAndAdvance()); - - const CharPointerType dest (createUninitialisedBytes (bytesNeeded)); - CharPointerType (dest).writeAll (text); - return dest; - } - - template - static const CharPointerType createFromCharPointer (const CharPointer& text, size_t maxChars) - { - if (text.getAddress() == nullptr || text.isEmpty() || maxChars == 0) - return getEmpty(); - - CharPointer end (text); - size_t numChars = 0; - size_t bytesNeeded = sizeof (CharType); - - while (numChars < maxChars && ! end.isEmpty()) - { - bytesNeeded += CharPointerType::getBytesRequiredFor (end.getAndAdvance()); - ++numChars; - } - - const CharPointerType dest (createUninitialisedBytes (bytesNeeded)); - CharPointerType (dest).writeWithCharLimit (text, (int) numChars + 1); - return dest; - } - - template - static const CharPointerType createFromCharPointer (const CharPointer& start, const CharPointer& end) - { - if (start.getAddress() == nullptr || start.isEmpty()) - return getEmpty(); - - CharPointer e (start); - int numChars = 0; - size_t bytesNeeded = sizeof (CharType); - - while (e < end && ! e.isEmpty()) - { - bytesNeeded += CharPointerType::getBytesRequiredFor (e.getAndAdvance()); - ++numChars; - } - - const CharPointerType dest (createUninitialisedBytes (bytesNeeded)); - CharPointerType (dest).writeWithCharLimit (start, numChars + 1); - return dest; - } - - static const CharPointerType createFromFixedLength (const char* const src, const size_t numChars) - { - const CharPointerType dest (createUninitialisedBytes (numChars * sizeof (CharType) + sizeof (CharType))); - CharPointerType (dest).writeWithCharLimit (CharPointer_UTF8 (src), (int) (numChars + 1)); - return dest; - } - - static inline const CharPointerType getEmpty() noexcept - { - return CharPointerType (empty.text); - } - - static void retain (const CharPointerType& text) noexcept - { - ++(bufferFromText (text)->refCount); - } - - static inline void release (StringHolder* const b) noexcept - { - if (--(b->refCount) == -1 && b != &empty) - delete[] reinterpret_cast (b); - } - - static void release (const CharPointerType& text) noexcept - { - release (bufferFromText (text)); - } - - static CharPointerType makeUnique (const CharPointerType& text) - { - StringHolder* const b = bufferFromText (text); - - if (b->refCount.get() <= 0) - return text; - - CharPointerType newText (createUninitialisedBytes (b->allocatedNumBytes)); - memcpy (newText.getAddress(), text.getAddress(), b->allocatedNumBytes); - release (b); - - return newText; - } - - static CharPointerType makeUniqueWithByteSize (const CharPointerType& text, size_t numBytes) - { - StringHolder* const b = bufferFromText (text); - - if (b->refCount.get() <= 0 && b->allocatedNumBytes >= numBytes) - return text; - - CharPointerType newText (createUninitialisedBytes (jmax (b->allocatedNumBytes, numBytes))); - memcpy (newText.getAddress(), text.getAddress(), b->allocatedNumBytes); - release (b); - - return newText; - } - - static size_t getAllocatedNumBytes (const CharPointerType& text) noexcept - { - return bufferFromText (text)->allocatedNumBytes; - } - - Atomic refCount; - size_t allocatedNumBytes; - CharType text[1]; - - static StringHolder empty; - -private: - static inline StringHolder* bufferFromText (const CharPointerType& text) noexcept - { - // (Can't use offsetof() here because of warnings about this not being a POD) - return reinterpret_cast (reinterpret_cast (text.getAddress()) - - (reinterpret_cast (reinterpret_cast (1)->text) - 1)); - } - - void compileTimeChecks() - { - // Let me know if any of these assertions fail on your system! - #if JUCE_NATIVE_WCHAR_IS_UTF8 - static_jassert (sizeof (wchar_t) == 1); - #elif JUCE_NATIVE_WCHAR_IS_UTF16 - static_jassert (sizeof (wchar_t) == 2); - #elif JUCE_NATIVE_WCHAR_IS_UTF32 - static_jassert (sizeof (wchar_t) == 4); - #else - #error "native wchar_t size is unknown" - #endif - } -}; - -StringHolder StringHolder::empty; -const String String::empty; - -void String::preallocateBytes (const size_t numBytesNeeded) -{ - text = StringHolder::makeUniqueWithByteSize (text, numBytesNeeded + sizeof (CharPointerType::CharType)); -} - -String::String() noexcept - : text (StringHolder::getEmpty()) -{ -} - -String::~String() noexcept -{ - StringHolder::release (text); -} - -String::String (const String& other) noexcept - : text (other.text) -{ - StringHolder::retain (text); -} - -void String::swapWith (String& other) noexcept -{ - std::swap (text, other.text); -} - -String& String::operator= (const String& other) noexcept -{ - StringHolder::retain (other.text); - StringHolder::release (text.atomicSwap (other.text)); - return *this; -} - -inline String::PreallocationBytes::PreallocationBytes (const size_t numBytes_) : numBytes (numBytes_) {} - -String::String (const PreallocationBytes& preallocationSize) - : text (StringHolder::createUninitialisedBytes (preallocationSize.numBytes + sizeof (CharPointerType::CharType))) -{ -} - -String::String (const char* const t) - : text (StringHolder::createFromCharPointer (CharPointer_ASCII (t))) -{ - /* If you get an assertion here, then you're trying to create a string from 8-bit data - that contains values greater than 127. These can NOT be correctly converted to unicode - because there's no way for the String class to know what encoding was used to - create them. The source data could be UTF-8, ASCII or one of many local code-pages. - - To get around this problem, you must be more explicit when you pass an ambiguous 8-bit - string to the String class - so for example if your source data is actually UTF-8, - you'd call String (CharPointer_UTF8 ("my utf8 string..")), and it would be able to - correctly convert the multi-byte characters to unicode. It's *highly* recommended that - you use UTF-8 with escape characters in your source code to represent extended characters, - because there's no other way to represent these strings in a way that isn't dependent on - the compiler, source code editor and platform. - */ - jassert (t == nullptr || CharPointer_ASCII::isValidString (t, std::numeric_limits::max())); -} - -String::String (const char* const t, const size_t maxChars) - : text (StringHolder::createFromCharPointer (CharPointer_ASCII (t), maxChars)) -{ - /* If you get an assertion here, then you're trying to create a string from 8-bit data - that contains values greater than 127. These can NOT be correctly converted to unicode - because there's no way for the String class to know what encoding was used to - create them. The source data could be UTF-8, ASCII or one of many local code-pages. - - To get around this problem, you must be more explicit when you pass an ambiguous 8-bit - string to the String class - so for example if your source data is actually UTF-8, - you'd call String (CharPointer_UTF8 ("my utf8 string..")), and it would be able to - correctly convert the multi-byte characters to unicode. It's *highly* recommended that - you use UTF-8 with escape characters in your source code to represent extended characters, - because there's no other way to represent these strings in a way that isn't dependent on - the compiler, source code editor and platform. - */ - jassert (t == nullptr || CharPointer_ASCII::isValidString (t, (int) maxChars)); -} - -String::String (const wchar_t* const t) : text (StringHolder::createFromCharPointer (castToCharPointer_wchar_t (t))) {} -String::String (const CharPointer_UTF8& t) : text (StringHolder::createFromCharPointer (t)) {} -String::String (const CharPointer_UTF16& t) : text (StringHolder::createFromCharPointer (t)) {} -String::String (const CharPointer_UTF32& t) : text (StringHolder::createFromCharPointer (t)) {} -String::String (const CharPointer_ASCII& t) : text (StringHolder::createFromCharPointer (t)) {} - -String::String (const CharPointer_UTF8& t, const size_t maxChars) : text (StringHolder::createFromCharPointer (t, maxChars)) {} -String::String (const CharPointer_UTF16& t, const size_t maxChars) : text (StringHolder::createFromCharPointer (t, maxChars)) {} -String::String (const CharPointer_UTF32& t, const size_t maxChars) : text (StringHolder::createFromCharPointer (t, maxChars)) {} -String::String (const wchar_t* const t, size_t maxChars) : text (StringHolder::createFromCharPointer (castToCharPointer_wchar_t (t), maxChars)) {} - -String::String (const CharPointer_UTF8& start, const CharPointer_UTF8& end) : text (StringHolder::createFromCharPointer (start, end)) {} -String::String (const CharPointer_UTF16& start, const CharPointer_UTF16& end) : text (StringHolder::createFromCharPointer (start, end)) {} -String::String (const CharPointer_UTF32& start, const CharPointer_UTF32& end) : text (StringHolder::createFromCharPointer (start, end)) {} - -String String::charToString (const juce_wchar character) -{ - String result (PreallocationBytes (CharPointerType::getBytesRequiredFor (character))); - CharPointerType t (result.text); - t.write (character); - t.writeNull(); - return result; -} - -namespace NumberToStringConverters -{ - // pass in a pointer to the END of a buffer.. - char* numberToString (char* t, const int64 n) noexcept - { - *--t = 0; - int64 v = (n >= 0) ? n : -n; - - do - { - *--t = (char) ('0' + (int) (v % 10)); - v /= 10; - - } while (v > 0); - - if (n < 0) - *--t = '-'; - - return t; - } - - char* numberToString (char* t, uint64 v) noexcept - { - *--t = 0; - - do - { - *--t = (char) ('0' + (int) (v % 10)); - v /= 10; - - } while (v > 0); - - return t; - } - - char* numberToString (char* t, const int n) noexcept - { - if (n == (int) 0x80000000) // (would cause an overflow) - return numberToString (t, (int64) n); - - *--t = 0; - int v = abs (n); - - do - { - *--t = (char) ('0' + (v % 10)); - v /= 10; - - } while (v > 0); - - if (n < 0) - *--t = '-'; - - return t; - } - - char* numberToString (char* t, unsigned int v) noexcept - { - *--t = 0; - - do - { - *--t = (char) ('0' + (v % 10)); - v /= 10; - - } while (v > 0); - - return t; - } - - char getDecimalPoint() - { - static char dp = (char) - #if JUCE_VC7_OR_EARLIER - std::_USE (std::locale(), std::numpunct ).decimal_point(); - #else - std::use_facet > (std::locale()).decimal_point(); - #endif - - return dp; - } - - char* doubleToString (char* buffer, int numChars, double n, int numDecPlaces, size_t& len) noexcept - { - if (numDecPlaces > 0 && n > -1.0e20 && n < 1.0e20) - { - char* const end = buffer + numChars; - char* t = end; - int64 v = (int64) (pow (10.0, numDecPlaces) * std::abs (n) + 0.5); - *--t = (char) 0; - - while (numDecPlaces >= 0 || v > 0) - { - if (numDecPlaces == 0) - *--t = (char) getDecimalPoint(); - - *--t = (char) ('0' + (v % 10)); - - v /= 10; - --numDecPlaces; - } - - if (n < 0) - *--t = '-'; - - len = end - t - 1; - return t; - } - else - { - len = sprintf (buffer, "%.9g", n); - return buffer; - } - } - - template - const String::CharPointerType createFromInteger (const IntegerType number) - { - char buffer [32]; - char* const end = buffer + numElementsInArray (buffer); - char* const start = numberToString (end, number); - - return StringHolder::createFromFixedLength (start, end - start - 1); - } - - const String::CharPointerType createFromDouble (const double number, const int numberOfDecimalPlaces) - { - char buffer [48]; - size_t len; - char* const start = doubleToString (buffer, numElementsInArray (buffer), (double) number, numberOfDecimalPlaces, len); - return StringHolder::createFromFixedLength (start, len); - } -} - -String::String (const int number) : text (NumberToStringConverters::createFromInteger (number)) {} -String::String (const unsigned int number) : text (NumberToStringConverters::createFromInteger (number)) {} -String::String (const short number) : text (NumberToStringConverters::createFromInteger ((int) number)) {} -String::String (const unsigned short number) : text (NumberToStringConverters::createFromInteger ((unsigned int) number)) {} -String::String (const int64 number) : text (NumberToStringConverters::createFromInteger (number)) {} -String::String (const uint64 number) : text (NumberToStringConverters::createFromInteger (number)) {} - -String::String (const float number, const int numberOfDecimalPlaces) : text (NumberToStringConverters::createFromDouble ((double) number, numberOfDecimalPlaces)) {} -String::String (const double number, const int numberOfDecimalPlaces) : text (NumberToStringConverters::createFromDouble (number, numberOfDecimalPlaces)) {} - -int String::length() const noexcept -{ - return (int) text.length(); -} - -size_t String::getByteOffsetOfEnd() const noexcept -{ - return ((char*) text.findTerminatingNull().getAddress()) - (char*) text.getAddress(); -} - -const juce_wchar String::operator[] (int index) const noexcept -{ - jassert (index == 0 || (index > 0 && index <= (int) text.lengthUpTo (index + 1))); - return text [index]; -} - -int String::hashCode() const noexcept -{ - CharPointerType t (text); - int result = 0; - - while (! t.isEmpty()) - result = 31 * result + t.getAndAdvance(); - - return result; -} - -int64 String::hashCode64() const noexcept -{ - CharPointerType t (text); - int64 result = 0; - - while (! t.isEmpty()) - result = 101 * result + t.getAndAdvance(); - - return result; -} - -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const String& s2) noexcept { return s1.compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const char* const s2) noexcept { return s1.compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const wchar_t* const s2) noexcept { return s1.compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF8& s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF16& s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator== (const String& s1, const CharPointer_UTF32& s2) noexcept { return s1.getCharPointer().compare (s2) == 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const String& s2) noexcept { return s1.compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const char* const s2) noexcept { return s1.compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const wchar_t* const s2) noexcept { return s1.compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF8& s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF16& s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator!= (const String& s1, const CharPointer_UTF32& s2) noexcept { return s1.getCharPointer().compare (s2) != 0; } -JUCE_API bool JUCE_CALLTYPE operator> (const String& s1, const String& s2) noexcept { return s1.compare (s2) > 0; } -JUCE_API bool JUCE_CALLTYPE operator< (const String& s1, const String& s2) noexcept { return s1.compare (s2) < 0; } -JUCE_API bool JUCE_CALLTYPE operator>= (const String& s1, const String& s2) noexcept { return s1.compare (s2) >= 0; } -JUCE_API bool JUCE_CALLTYPE operator<= (const String& s1, const String& s2) noexcept { return s1.compare (s2) <= 0; } - -bool String::equalsIgnoreCase (const wchar_t* const t) const noexcept -{ - return t != nullptr ? text.compareIgnoreCase (castToCharPointer_wchar_t (t)) == 0 - : isEmpty(); -} - -bool String::equalsIgnoreCase (const char* const t) const noexcept -{ - return t != nullptr ? text.compareIgnoreCase (CharPointer_UTF8 (t)) == 0 - : isEmpty(); -} - -bool String::equalsIgnoreCase (const String& other) const noexcept -{ - return text == other.text - || text.compareIgnoreCase (other.text) == 0; -} - -int String::compare (const String& other) const noexcept { return (text == other.text) ? 0 : text.compare (other.text); } -int String::compare (const char* const other) const noexcept { return text.compare (CharPointer_UTF8 (other)); } -int String::compare (const wchar_t* const other) const noexcept { return text.compare (castToCharPointer_wchar_t (other)); } -int String::compareIgnoreCase (const String& other) const noexcept { return (text == other.text) ? 0 : text.compareIgnoreCase (other.text); } - -int String::compareLexicographically (const String& other) const noexcept -{ - CharPointerType s1 (text); - - while (! (s1.isEmpty() || s1.isLetterOrDigit())) - ++s1; - - CharPointerType s2 (other.text); - - while (! (s2.isEmpty() || s2.isLetterOrDigit())) - ++s2; - - return s1.compareIgnoreCase (s2); -} - -void String::append (const String& textToAppend, size_t maxCharsToTake) -{ - appendCharPointer (textToAppend.text, maxCharsToTake); -} - -String& String::operator+= (const wchar_t* const t) -{ - appendCharPointer (castToCharPointer_wchar_t (t)); - return *this; -} - -String& String::operator+= (const char* const t) -{ - /* If you get an assertion here, then you're trying to create a string from 8-bit data - that contains values greater than 127. These can NOT be correctly converted to unicode - because there's no way for the String class to know what encoding was used to - create them. The source data could be UTF-8, ASCII or one of many local code-pages. - - To get around this problem, you must be more explicit when you pass an ambiguous 8-bit - string to the String class - so for example if your source data is actually UTF-8, - you'd call String (CharPointer_UTF8 ("my utf8 string..")), and it would be able to - correctly convert the multi-byte characters to unicode. It's *highly* recommended that - you use UTF-8 with escape characters in your source code to represent extended characters, - because there's no other way to represent these strings in a way that isn't dependent on - the compiler, source code editor and platform. - */ - jassert (t == nullptr || CharPointer_ASCII::isValidString (t, std::numeric_limits::max())); - - appendCharPointer (CharPointer_ASCII (t)); - return *this; -} - -String& String::operator+= (const String& other) -{ - if (isEmpty()) - return operator= (other); - - appendCharPointer (other.text); - return *this; -} - -String& String::operator+= (const char ch) -{ - const char asString[] = { ch, 0 }; - return operator+= (asString); -} - -String& String::operator+= (const wchar_t ch) -{ - const wchar_t asString[] = { ch, 0 }; - return operator+= (asString); -} - -#if ! JUCE_NATIVE_WCHAR_IS_UTF32 -String& String::operator+= (const juce_wchar ch) -{ - const juce_wchar asString[] = { ch, 0 }; - appendCharPointer (CharPointer_UTF32 (asString)); - return *this; -} -#endif - -String& String::operator+= (const int number) -{ - char buffer [16]; - char* const end = buffer + numElementsInArray (buffer); - char* const start = NumberToStringConverters::numberToString (end, number); - - const int numExtraChars = (int) (end - start); - - if (numExtraChars > 0) - { - const size_t byteOffsetOfNull = getByteOffsetOfEnd(); - const size_t newBytesNeeded = sizeof (CharPointerType::CharType) + byteOffsetOfNull - + sizeof (CharPointerType::CharType) * numExtraChars; - - text = StringHolder::makeUniqueWithByteSize (text, newBytesNeeded); - - CharPointerType newEnd (addBytesToPointer (text.getAddress(), (int) byteOffsetOfNull)); - newEnd.writeWithCharLimit (CharPointer_ASCII (start), numExtraChars); - } - - return *this; -} - -JUCE_API String JUCE_CALLTYPE operator+ (const char* const string1, const String& string2) -{ - String s (string1); - return s += string2; -} - -JUCE_API String JUCE_CALLTYPE operator+ (const wchar_t* const string1, const String& string2) -{ - String s (string1); - return s += string2; -} - -JUCE_API String JUCE_CALLTYPE operator+ (const char s1, const String& s2) { return String::charToString (s1) + s2; } -JUCE_API String JUCE_CALLTYPE operator+ (const wchar_t s1, const String& s2) { return String::charToString (s1) + s2; } -#if ! JUCE_NATIVE_WCHAR_IS_UTF32 -JUCE_API String JUCE_CALLTYPE operator+ (const juce_wchar s1, const String& s2) { return String::charToString (s1) + s2; } -#endif - -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const String& s2) { return s1 += s2; } -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const char* const s2) { return s1 += s2; } -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const wchar_t* s2) { return s1 += s2; } - -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const char s2) { return s1 += s2; } -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const wchar_t s2) { return s1 += s2; } -#if ! JUCE_NATIVE_WCHAR_IS_UTF32 -JUCE_API String JUCE_CALLTYPE operator+ (String s1, const juce_wchar s2) { return s1 += s2; } -#endif - -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const char s2) { return s1 += s2; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const wchar_t s2) { return s1 += s2; } -#if ! JUCE_NATIVE_WCHAR_IS_UTF32 -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const juce_wchar s2) { return s1 += s2; } -#endif - -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const char* const s2) { return s1 += s2; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const wchar_t* const s2) { return s1 += s2; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const String& s2) { return s1 += s2; } - -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const short number) { return s1 += (int) number; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const int number) { return s1 += number; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const long number) { return s1 += (int) number; } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const float number) { return s1 += String (number); } -JUCE_API String& JUCE_CALLTYPE operator<< (String& s1, const double number) { return s1 += String (number); } - -JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const String& text) -{ - const int numBytes = text.getNumBytesAsUTF8(); - - #if (JUCE_STRING_UTF_TYPE == 8) - stream.write (text.getCharPointer().getAddress(), numBytes); - #else - // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind - // if lots of large, persistent strings were to be written to streams). - HeapBlock temp (numBytes + 1); - CharPointer_UTF8 (temp).writeAll (text.getCharPointer()); - stream.write (temp, numBytes); - #endif - - return stream; -} - -JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, const NewLine&) -{ - return string1 += NewLine::getDefault(); -} - -int String::indexOfChar (const juce_wchar character) const noexcept -{ - return text.indexOf (character); -} - -int String::indexOfChar (const int startIndex, const juce_wchar character) const noexcept -{ - CharPointerType t (text); - - for (int i = 0; ! t.isEmpty(); ++i) - { - if (i >= startIndex) - { - if (t.getAndAdvance() == character) - return i; - } - else - { - ++t; - } - } - - return -1; -} - -int String::lastIndexOfChar (const juce_wchar character) const noexcept -{ - CharPointerType t (text); - int last = -1; - - for (int i = 0; ! t.isEmpty(); ++i) - if (t.getAndAdvance() == character) - last = i; - - return last; -} - -int String::indexOfAnyOf (const String& charactersToLookFor, const int startIndex, const bool ignoreCase) const noexcept -{ - CharPointerType t (text); - - for (int i = 0; ! t.isEmpty(); ++i) - { - if (i >= startIndex) - { - if (charactersToLookFor.text.indexOf (t.getAndAdvance(), ignoreCase) >= 0) - return i; - } - else - { - ++t; - } - } - - return -1; -} - -int String::indexOf (const String& other) const noexcept -{ - return other.isEmpty() ? 0 : text.indexOf (other.text); -} - -int String::indexOfIgnoreCase (const String& other) const noexcept -{ - return other.isEmpty() ? 0 : CharacterFunctions::indexOfIgnoreCase (text, other.text); -} - -int String::indexOf (const int startIndex, const String& other) const noexcept -{ - if (other.isEmpty()) - return -1; - - CharPointerType t (text); - - for (int i = startIndex; --i >= 0;) - { - if (t.isEmpty()) - return -1; - - ++t; - } - - int found = t.indexOf (other.text); - if (found >= 0) - found += startIndex; - return found; -} - -int String::indexOfIgnoreCase (const int startIndex, const String& other) const noexcept -{ - if (other.isEmpty()) - return -1; - - CharPointerType t (text); - - for (int i = startIndex; --i >= 0;) - { - if (t.isEmpty()) - return -1; - - ++t; - } - - int found = CharacterFunctions::indexOfIgnoreCase (t, other.text); - if (found >= 0) - found += startIndex; - return found; -} - -int String::lastIndexOf (const String& other) const noexcept -{ - if (other.isNotEmpty()) - { - const int len = other.length(); - int i = length() - len; - - if (i >= 0) - { - CharPointerType n (text + i); - - while (i >= 0) - { - if (n.compareUpTo (other.text, len) == 0) - return i; - - --n; - --i; - } - } - } - - return -1; -} - -int String::lastIndexOfIgnoreCase (const String& other) const noexcept -{ - if (other.isNotEmpty()) - { - const int len = other.length(); - int i = length() - len; - - if (i >= 0) - { - CharPointerType n (text + i); - - while (i >= 0) - { - if (n.compareIgnoreCaseUpTo (other.text, len) == 0) - return i; - - --n; - --i; - } - } - } - - return -1; -} - -int String::lastIndexOfAnyOf (const String& charactersToLookFor, const bool ignoreCase) const noexcept -{ - CharPointerType t (text); - int last = -1; - - for (int i = 0; ! t.isEmpty(); ++i) - if (charactersToLookFor.text.indexOf (t.getAndAdvance(), ignoreCase) >= 0) - last = i; - - return last; -} - -bool String::contains (const String& other) const noexcept -{ - return indexOf (other) >= 0; -} - -bool String::containsChar (const juce_wchar character) const noexcept -{ - return text.indexOf (character) >= 0; -} - -bool String::containsIgnoreCase (const String& t) const noexcept -{ - return indexOfIgnoreCase (t) >= 0; -} - -int String::indexOfWholeWord (const String& word) const noexcept -{ - if (word.isNotEmpty()) - { - CharPointerType t (text); - const int wordLen = word.length(); - const int end = (int) t.length() - wordLen; - - for (int i = 0; i <= end; ++i) - { - if (t.compareUpTo (word.text, wordLen) == 0 - && (i == 0 || ! (t - 1).isLetterOrDigit()) - && ! (t + wordLen).isLetterOrDigit()) - return i; - - ++t; - } - } - - return -1; -} - -int String::indexOfWholeWordIgnoreCase (const String& word) const noexcept -{ - if (word.isNotEmpty()) - { - CharPointerType t (text); - const int wordLen = word.length(); - const int end = (int) t.length() - wordLen; - - for (int i = 0; i <= end; ++i) - { - if (t.compareIgnoreCaseUpTo (word.text, wordLen) == 0 - && (i == 0 || ! (t - 1).isLetterOrDigit()) - && ! (t + wordLen).isLetterOrDigit()) - return i; - - ++t; - } - } - - return -1; -} - -bool String::containsWholeWord (const String& wordToLookFor) const noexcept -{ - return indexOfWholeWord (wordToLookFor) >= 0; -} - -bool String::containsWholeWordIgnoreCase (const String& wordToLookFor) const noexcept -{ - return indexOfWholeWordIgnoreCase (wordToLookFor) >= 0; -} - -namespace WildCardHelpers -{ - int indexOfMatch (const String::CharPointerType& wildcard, - String::CharPointerType test, - const bool ignoreCase) noexcept - { - int start = 0; - - while (! test.isEmpty()) - { - String::CharPointerType t (test); - String::CharPointerType w (wildcard); - - for (;;) - { - const juce_wchar wc = *w; - const juce_wchar tc = *t; - - if (wc == tc - || (ignoreCase && w.toLowerCase() == t.toLowerCase()) - || (wc == '?' && tc != 0)) - { - if (wc == 0) - return start; - - ++t; - ++w; - } - else - { - if (wc == '*' && (w[1] == 0 || indexOfMatch (w + 1, t, ignoreCase) >= 0)) - return start; - - break; - } - } - - ++start; - ++test; - } - - return -1; - } -} - -bool String::matchesWildcard (const String& wildcard, const bool ignoreCase) const noexcept -{ - CharPointerType w (wildcard.text); - CharPointerType t (text); - - for (;;) - { - const juce_wchar wc = *w; - const juce_wchar tc = *t; - - if (wc == tc - || (ignoreCase && w.toLowerCase() == t.toLowerCase()) - || (wc == '?' && tc != 0)) - { - if (wc == 0) - return true; - - ++w; - ++t; - } - else - { - return wc == '*' && (w[1] == 0 || WildCardHelpers::indexOfMatch (w + 1, t, ignoreCase) >= 0); - } - } -} - -String String::repeatedString (const String& stringToRepeat, int numberOfTimesToRepeat) -{ - if (numberOfTimesToRepeat <= 0) - return String::empty; - - String result (PreallocationBytes (stringToRepeat.getByteOffsetOfEnd() * numberOfTimesToRepeat)); - CharPointerType n (result.text); - - while (--numberOfTimesToRepeat >= 0) - n.writeAll (stringToRepeat.text); - - return result; -} - -String String::paddedLeft (const juce_wchar padCharacter, int minimumLength) const -{ - jassert (padCharacter != 0); - - int extraChars = minimumLength; - CharPointerType end (text); - - while (! end.isEmpty()) - { - --extraChars; - ++end; - } - - if (extraChars <= 0 || padCharacter == 0) - return *this; - - const size_t currentByteSize = ((char*) end.getAddress()) - (char*) text.getAddress(); - String result (PreallocationBytes (currentByteSize + extraChars * CharPointerType::getBytesRequiredFor (padCharacter))); - CharPointerType n (result.text); - - while (--extraChars >= 0) - n.write (padCharacter); - - n.writeAll (text); - return result; -} - -String String::paddedRight (const juce_wchar padCharacter, int minimumLength) const -{ - jassert (padCharacter != 0); - - int extraChars = minimumLength; - CharPointerType end (text); - - while (! end.isEmpty()) - { - --extraChars; - ++end; - } - - if (extraChars <= 0 || padCharacter == 0) - return *this; - - const size_t currentByteSize = ((char*) end.getAddress()) - (char*) text.getAddress(); - String result (PreallocationBytes (currentByteSize + extraChars * CharPointerType::getBytesRequiredFor (padCharacter))); - CharPointerType n (result.text); - - n.writeAll (text); - - while (--extraChars >= 0) - n.write (padCharacter); - - n.writeNull(); - return result; -} - -String String::replaceSection (int index, int numCharsToReplace, const String& stringToInsert) const -{ - if (index < 0) - { - // a negative index to replace from? - jassertfalse; - index = 0; - } - - if (numCharsToReplace < 0) - { - // replacing a negative number of characters? - numCharsToReplace = 0; - jassertfalse; - } - - int i = 0; - CharPointerType insertPoint (text); - - while (i < index) - { - if (insertPoint.isEmpty()) - { - // replacing beyond the end of the string? - jassertfalse; - return *this + stringToInsert; - } - - ++insertPoint; - ++i; - } - - CharPointerType startOfRemainder (insertPoint); - - i = 0; - while (i < numCharsToReplace && ! startOfRemainder.isEmpty()) - { - ++startOfRemainder; - ++i; - } - - if (insertPoint == text && startOfRemainder.isEmpty()) - return stringToInsert; - - const size_t initialBytes = ((char*) insertPoint.getAddress()) - (char*) text.getAddress(); - const size_t newStringBytes = stringToInsert.getByteOffsetOfEnd(); - const size_t remainderBytes = ((char*) startOfRemainder.findTerminatingNull().getAddress()) - (char*) startOfRemainder.getAddress(); - - const size_t newTotalBytes = initialBytes + newStringBytes + remainderBytes; - if (newTotalBytes <= 0) - return String::empty; - - String result (PreallocationBytes ((size_t) newTotalBytes)); - - char* dest = (char*) result.text.getAddress(); - memcpy (dest, text.getAddress(), initialBytes); - dest += initialBytes; - memcpy (dest, stringToInsert.text.getAddress(), newStringBytes); - dest += newStringBytes; - memcpy (dest, startOfRemainder.getAddress(), remainderBytes); - dest += remainderBytes; - CharPointerType ((CharPointerType::CharType*) dest).writeNull(); - - return result; -} - -String String::replace (const String& stringToReplace, const String& stringToInsert, const bool ignoreCase) const -{ - const int stringToReplaceLen = stringToReplace.length(); - const int stringToInsertLen = stringToInsert.length(); - - int i = 0; - String result (*this); - - while ((i = (ignoreCase ? result.indexOfIgnoreCase (i, stringToReplace) - : result.indexOf (i, stringToReplace))) >= 0) - { - result = result.replaceSection (i, stringToReplaceLen, stringToInsert); - i += stringToInsertLen; - } - - return result; -} - -class StringCreationHelper -{ -public: - StringCreationHelper (const size_t initialBytes) - : source (nullptr), dest (nullptr), allocatedBytes (initialBytes), bytesWritten (0) - { - result.preallocateBytes (allocatedBytes); - dest = result.getCharPointer(); - } - - StringCreationHelper (const String::CharPointerType& source_) - : source (source_), dest (nullptr), allocatedBytes (StringHolder::getAllocatedNumBytes (source)), bytesWritten (0) - { - result.preallocateBytes (allocatedBytes); - dest = result.getCharPointer(); - } - - void write (juce_wchar c) - { - bytesWritten += String::CharPointerType::getBytesRequiredFor (c); - - if (bytesWritten > allocatedBytes) - { - allocatedBytes += jmax ((size_t) 8, allocatedBytes / 16); - const size_t destOffset = ((char*) dest.getAddress()) - (char*) result.getCharPointer().getAddress(); - result.preallocateBytes (allocatedBytes); - dest = addBytesToPointer (result.getCharPointer().getAddress(), (int) destOffset); - } - - dest.write (c); - } - - String result; - String::CharPointerType source; - -private: - String::CharPointerType dest; - size_t allocatedBytes, bytesWritten; -}; - -String String::replaceCharacter (const juce_wchar charToReplace, const juce_wchar charToInsert) const -{ - if (! containsChar (charToReplace)) - return *this; - - StringCreationHelper builder (text); - - for (;;) - { - juce_wchar c = builder.source.getAndAdvance(); - - if (c == charToReplace) - c = charToInsert; - - builder.write (c); - - if (c == 0) - break; - } - - return builder.result; -} - -String String::replaceCharacters (const String& charactersToReplace, const String& charactersToInsertInstead) const -{ - StringCreationHelper builder (text); - - for (;;) - { - juce_wchar c = builder.source.getAndAdvance(); - - const int index = charactersToReplace.indexOfChar (c); - if (index >= 0) - c = charactersToInsertInstead [index]; - - builder.write (c); - - if (c == 0) - break; - } - - return builder.result; -} - -bool String::startsWith (const String& other) const noexcept -{ - return text.compareUpTo (other.text, other.length()) == 0; -} - -bool String::startsWithIgnoreCase (const String& other) const noexcept -{ - return text.compareIgnoreCaseUpTo (other.text, other.length()) == 0; -} - -bool String::startsWithChar (const juce_wchar character) const noexcept -{ - jassert (character != 0); // strings can't contain a null character! - - return *text == character; -} - -bool String::endsWithChar (const juce_wchar character) const noexcept -{ - jassert (character != 0); // strings can't contain a null character! - - if (text.isEmpty()) - return false; - - CharPointerType t (text.findTerminatingNull()); - return *--t == character; -} - -bool String::endsWith (const String& other) const noexcept -{ - CharPointerType end (text.findTerminatingNull()); - CharPointerType otherEnd (other.text.findTerminatingNull()); - - while (end > text && otherEnd > other.text) - { - --end; - --otherEnd; - - if (*end != *otherEnd) - return false; - } - - return otherEnd == other.text; -} - -bool String::endsWithIgnoreCase (const String& other) const noexcept -{ - CharPointerType end (text.findTerminatingNull()); - CharPointerType otherEnd (other.text.findTerminatingNull()); - - while (end > text && otherEnd > other.text) - { - --end; - --otherEnd; - - if (end.toLowerCase() != otherEnd.toLowerCase()) - return false; - } - - return otherEnd == other.text; -} - -String String::toUpperCase() const -{ - StringCreationHelper builder (text); - - for (;;) - { - const juce_wchar c = builder.source.toUpperCase(); - ++(builder.source); - builder.write (c); - - if (c == 0) - break; - } - - return builder.result; -} - -String String::toLowerCase() const -{ - StringCreationHelper builder (text); - - for (;;) - { - const juce_wchar c = builder.source.toLowerCase(); - ++(builder.source); - builder.write (c); - - if (c == 0) - break; - } - - return builder.result; -} - -juce_wchar String::getLastCharacter() const noexcept -{ - return isEmpty() ? juce_wchar() : text [length() - 1]; -} - -String String::substring (int start, const int end) const -{ - if (start < 0) - start = 0; - - if (end <= start) - return empty; - - int i = 0; - CharPointerType t1 (text); - - while (i < start) - { - if (t1.isEmpty()) - return empty; - - ++i; - ++t1; - } - - CharPointerType t2 (t1); - while (i < end) - { - if (t2.isEmpty()) - { - if (start == 0) - return *this; - - break; - } - - ++i; - ++t2; - } - - return String (t1, t2); -} - -String String::substring (int start) const -{ - if (start <= 0) - return *this; - - CharPointerType t (text); - - while (--start >= 0) - { - if (t.isEmpty()) - return empty; - - ++t; - } - - return String (t); -} - -String String::dropLastCharacters (const int numberToDrop) const -{ - return String (text, jmax (0, length() - numberToDrop)); -} - -String String::getLastCharacters (const int numCharacters) const -{ - return String (text + jmax (0, length() - jmax (0, numCharacters))); -} - -String String::fromFirstOccurrenceOf (const String& sub, - const bool includeSubString, - const bool ignoreCase) const -{ - const int i = ignoreCase ? indexOfIgnoreCase (sub) - : indexOf (sub); - if (i < 0) - return empty; - - return substring (includeSubString ? i : i + sub.length()); -} - -String String::fromLastOccurrenceOf (const String& sub, - const bool includeSubString, - const bool ignoreCase) const -{ - const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) - : lastIndexOf (sub); - if (i < 0) - return *this; - - return substring (includeSubString ? i : i + sub.length()); -} - -String String::upToFirstOccurrenceOf (const String& sub, - const bool includeSubString, - const bool ignoreCase) const -{ - const int i = ignoreCase ? indexOfIgnoreCase (sub) - : indexOf (sub); - if (i < 0) - return *this; - - return substring (0, includeSubString ? i + sub.length() : i); -} - -String String::upToLastOccurrenceOf (const String& sub, - const bool includeSubString, - const bool ignoreCase) const -{ - const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) - : lastIndexOf (sub); - if (i < 0) - return *this; - - return substring (0, includeSubString ? i + sub.length() : i); -} - -bool String::isQuotedString() const -{ - const String trimmed (trimStart()); - - return trimmed[0] == '"' - || trimmed[0] == '\''; -} - -String String::unquoted() const -{ - const int len = length(); - - if (len == 0) - return empty; - - const juce_wchar lastChar = text [len - 1]; - const int dropAtStart = (*text == '"' || *text == '\'') ? 1 : 0; - const int dropAtEnd = (lastChar == '"' || lastChar == '\'') ? 1 : 0; - - return substring (dropAtStart, len - dropAtEnd); -} - -String String::quoted (const juce_wchar quoteCharacter) const -{ - if (isEmpty()) - return charToString (quoteCharacter) + quoteCharacter; - - String t (*this); - - if (! t.startsWithChar (quoteCharacter)) - t = charToString (quoteCharacter) + t; - - if (! t.endsWithChar (quoteCharacter)) - t += quoteCharacter; - - return t; -} - -static String::CharPointerType findTrimmedEnd (const String::CharPointerType& start, String::CharPointerType end) -{ - while (end > start) - { - if (! (--end).isWhitespace()) - { - ++end; - break; - } - } - - return end; -} - -String String::trim() const -{ - if (isNotEmpty()) - { - CharPointerType start (text.findEndOfWhitespace()); - - const CharPointerType end (start.findTerminatingNull()); - CharPointerType trimmedEnd (findTrimmedEnd (start, end)); - - if (trimmedEnd <= start) - return empty; - else if (text < start || trimmedEnd < end) - return String (start, trimmedEnd); - } - - return *this; -} - -String String::trimStart() const -{ - if (isNotEmpty()) - { - const CharPointerType t (text.findEndOfWhitespace()); - - if (t != text) - return String (t); - } - - return *this; -} - -String String::trimEnd() const -{ - if (isNotEmpty()) - { - const CharPointerType end (text.findTerminatingNull()); - CharPointerType trimmedEnd (findTrimmedEnd (text, end)); - - if (trimmedEnd < end) - return String (text, trimmedEnd); - } - - return *this; -} - -String String::trimCharactersAtStart (const String& charactersToTrim) const -{ - CharPointerType t (text); - - while (charactersToTrim.containsChar (*t)) - ++t; - - return t == text ? *this : String (t); -} - -String String::trimCharactersAtEnd (const String& charactersToTrim) const -{ - if (isNotEmpty()) - { - const CharPointerType end (text.findTerminatingNull()); - CharPointerType trimmedEnd (end); - - while (trimmedEnd > text) - { - if (! charactersToTrim.containsChar (*--trimmedEnd)) - { - ++trimmedEnd; - break; - } - } - - if (trimmedEnd < end) - return String (text, trimmedEnd); - } - - return *this; -} - -String String::retainCharacters (const String& charactersToRetain) const -{ - if (isEmpty()) - return empty; - - StringCreationHelper builder (text); - - for (;;) - { - juce_wchar c = builder.source.getAndAdvance(); - - if (charactersToRetain.containsChar (c)) - builder.write (c); - - if (c == 0) - break; - } - - builder.write (0); - return builder.result; -} - -String String::removeCharacters (const String& charactersToRemove) const -{ - if (isEmpty()) - return empty; - - StringCreationHelper builder (text); - - for (;;) - { - juce_wchar c = builder.source.getAndAdvance(); - - if (! charactersToRemove.containsChar (c)) - builder.write (c); - - if (c == 0) - break; - } - - return builder.result; -} - -String String::initialSectionContainingOnly (const String& permittedCharacters) const -{ - CharPointerType t (text); - - while (! t.isEmpty()) - { - if (! permittedCharacters.containsChar (*t)) - return String (text, t); - - ++t; - } - - return *this; -} - -String String::initialSectionNotContaining (const String& charactersToStopAt) const -{ - CharPointerType t (text); - - while (! t.isEmpty()) - { - if (charactersToStopAt.containsChar (*t)) - return String (text, t); - - ++t; - } - - return *this; -} - -bool String::containsOnly (const String& chars) const noexcept -{ - CharPointerType t (text); - - while (! t.isEmpty()) - if (! chars.containsChar (t.getAndAdvance())) - return false; - - return true; -} - -bool String::containsAnyOf (const String& chars) const noexcept -{ - CharPointerType t (text); - - while (! t.isEmpty()) - if (chars.containsChar (t.getAndAdvance())) - return true; - - return false; -} - -bool String::containsNonWhitespaceChars() const noexcept -{ - CharPointerType t (text); - - while (! t.isEmpty()) - { - if (! t.isWhitespace()) - return true; - - ++t; - } - - return false; -} - -// Note! The format parameter here MUST NOT be a reference, otherwise MS's va_start macro fails to work (but still compiles). -String String::formatted (const String pf, ... ) -{ - size_t bufferSize = 256; - - for (;;) - { - va_list args; - va_start (args, pf); - - #if JUCE_WINDOWS - HeapBlock temp (bufferSize); - const int num = (int) _vsnwprintf (temp.getData(), bufferSize - 1, pf.toWideCharPointer(), args); - #elif JUCE_ANDROID - HeapBlock temp (bufferSize); - const int num = (int) vsnprintf (temp.getData(), bufferSize - 1, pf.toUTF8(), args); - #else - HeapBlock temp (bufferSize); - const int num = (int) vswprintf (temp.getData(), bufferSize - 1, pf.toWideCharPointer(), args); - #endif - - va_end (args); - - if (num > 0) - return String (temp); - - bufferSize += 256; - - if (num == 0 || bufferSize > 65536) // the upper limit is a sanity check to avoid situations where vprintf repeatedly - break; // returns -1 because of an error rather than because it needs more space. - } - - return empty; -} - -int String::getIntValue() const noexcept -{ - return text.getIntValue32(); -} - -int String::getTrailingIntValue() const noexcept -{ - int n = 0; - int mult = 1; - CharPointerType t (text.findTerminatingNull()); - - while (--t >= text) - { - if (! t.isDigit()) - { - if (*t == '-') - n = -n; - - break; - } - - n += mult * (*t - '0'); - mult *= 10; - } - - return n; -} - -int64 String::getLargeIntValue() const noexcept -{ - return text.getIntValue64(); -} - -float String::getFloatValue() const noexcept -{ - return (float) getDoubleValue(); -} - -double String::getDoubleValue() const noexcept -{ - return text.getDoubleValue(); -} - -static const char hexDigits[] = "0123456789abcdef"; - -template -struct HexConverter -{ - static String hexToString (Type v) - { - char buffer[32]; - char* const end = buffer + 32; - char* t = end; - *--t = 0; - - do - { - *--t = hexDigits [(int) (v & 15)]; - v >>= 4; - - } while (v != 0); - - return String (t, (int) (end - t) - 1); - } - - static Type stringToHex (String::CharPointerType t) noexcept - { - Type result = 0; - - while (! t.isEmpty()) - { - const int hexValue = CharacterFunctions::getHexDigitValue (t.getAndAdvance()); - - if (hexValue >= 0) - result = (result << 4) | hexValue; - } - - return result; - } -}; - -String String::toHexString (const int number) -{ - return HexConverter ::hexToString ((unsigned int) number); -} - -String String::toHexString (const int64 number) -{ - return HexConverter ::hexToString ((uint64) number); -} - -String String::toHexString (const short number) -{ - return toHexString ((int) (unsigned short) number); -} - -String String::toHexString (const void* const d, const int size, const int groupSize) -{ - if (size <= 0) - return empty; - - int numChars = (size * 2) + 2; - if (groupSize > 0) - numChars += size / groupSize; - - String s (PreallocationBytes (sizeof (CharPointerType::CharType) * (size_t) numChars)); - - const unsigned char* data = static_cast (d); - CharPointerType dest (s.text); - - for (int i = 0; i < size; ++i) - { - const unsigned char nextByte = *data++; - dest.write ((juce_wchar) hexDigits [nextByte >> 4]); - dest.write ((juce_wchar) hexDigits [nextByte & 0xf]); - - if (groupSize > 0 && (i % groupSize) == (groupSize - 1) && i < (size - 1)) - dest.write ((juce_wchar) ' '); - } - - dest.writeNull(); - return s; -} - -int String::getHexValue32() const noexcept -{ - return HexConverter::stringToHex (text); -} - -int64 String::getHexValue64() const noexcept -{ - return HexConverter::stringToHex (text); -} - -String String::createStringFromData (const void* const data_, const int size) -{ - const uint8* const data = static_cast (data_); - - if (size <= 0 || data == nullptr) - { - return empty; - } - else if (size == 1) - { - return charToString ((char) data[0]); - } - else if ((data[0] == (uint8) CharPointer_UTF16::byteOrderMarkBE1 && data[1] == (uint8) CharPointer_UTF16::byteOrderMarkBE2) - || (data[0] == (uint8) CharPointer_UTF16::byteOrderMarkLE1 && data[1] == (uint8) CharPointer_UTF16::byteOrderMarkLE2)) - { - const bool bigEndian = (data[0] == (uint8) CharPointer_UTF16::byteOrderMarkBE1); - const int numChars = size / 2 - 1; - - StringCreationHelper builder (numChars); - - const uint16* const src = (const uint16*) (data + 2); - - if (bigEndian) - { - for (int i = 0; i < numChars; ++i) - builder.write ((juce_wchar) ByteOrder::swapIfLittleEndian (src[i])); - } - else - { - for (int i = 0; i < numChars; ++i) - builder.write ((juce_wchar) ByteOrder::swapIfBigEndian (src[i])); - } - - builder.write (0); - return builder.result; - } - else - { - const uint8* start = data; - const uint8* end = data + size; - - if (size >= 3 - && data[0] == (uint8) CharPointer_UTF8::byteOrderMark1 - && data[1] == (uint8) CharPointer_UTF8::byteOrderMark2 - && data[2] == (uint8) CharPointer_UTF8::byteOrderMark3) - start += 3; - - return String (CharPointer_UTF8 ((const char*) start), - CharPointer_UTF8 ((const char*) end)); - } -} - -static juce_wchar emptyChar = 0; - -template -struct StringEncodingConverter -{ - static const CharPointerType_Dest convert (const String& s) - { - String& source = const_cast (s); - - typedef typename CharPointerType_Dest::CharType DestChar; - - if (source.isEmpty()) - return CharPointerType_Dest (reinterpret_cast (&emptyChar)); - - CharPointerType_Src text (source.getCharPointer()); - const size_t extraBytesNeeded = CharPointerType_Dest::getBytesRequiredFor (text); - const size_t endOffset = (text.sizeInBytes() + 3) & ~3; // the new string must be word-aligned or many win32 - // functions will fail to read it correctly! - source.preallocateBytes (endOffset + extraBytesNeeded); - text = source.getCharPointer(); - - void* newSpace = addBytesToPointer (text.getAddress(), (int) endOffset); - const CharPointerType_Dest extraSpace (static_cast (newSpace)); - - #if JUCE_DEBUG // (This just avoids spurious warnings from valgrind about the uninitialised bytes at the end of the buffer..) - const int bytesToClear = jmin ((int) extraBytesNeeded, 4); - zeromem (addBytesToPointer (newSpace, (int) (extraBytesNeeded - bytesToClear)), bytesToClear); - #endif - - CharPointerType_Dest (extraSpace).writeAll (text); - return extraSpace; - } -}; - -template <> -struct StringEncodingConverter -{ - static const CharPointer_UTF8 convert (const String& source) noexcept { return CharPointer_UTF8 ((CharPointer_UTF8::CharType*) source.getCharPointer().getAddress()); } -}; - -template <> -struct StringEncodingConverter -{ - static const CharPointer_UTF16 convert (const String& source) noexcept { return CharPointer_UTF16 ((CharPointer_UTF16::CharType*) source.getCharPointer().getAddress()); } -}; - -template <> -struct StringEncodingConverter -{ - static const CharPointer_UTF32 convert (const String& source) noexcept { return CharPointer_UTF32 ((CharPointer_UTF32::CharType*) source.getCharPointer().getAddress()); } -}; - -const CharPointer_UTF8 String::toUTF8() const -{ - return StringEncodingConverter ::convert (*this); -} - -CharPointer_UTF16 String::toUTF16() const -{ - return StringEncodingConverter ::convert (*this); -} - -CharPointer_UTF32 String::toUTF32() const -{ - return StringEncodingConverter ::convert (*this); -} - -const wchar_t* String::toWideCharPointer() const -{ - return (const wchar_t*) StringEncodingConverter ::convert (*this).getAddress(); -} - -template -struct StringCopier -{ - static int copyToBuffer (const CharPointerType_Src& source, typename CharPointerType_Dest::CharType* const buffer, const int maxBufferSizeBytes) - { - jassert (maxBufferSizeBytes >= 0); // keep this value positive, or no characters will be copied! - - if (buffer == nullptr) - return (int) (CharPointerType_Dest::getBytesRequiredFor (source) + sizeof (typename CharPointerType_Dest::CharType)); - - return CharPointerType_Dest (buffer).writeWithDestByteLimit (source, maxBufferSizeBytes); - } -}; - -int String::copyToUTF8 (CharPointer_UTF8::CharType* const buffer, const int maxBufferSizeBytes) const noexcept -{ - return StringCopier ::copyToBuffer (text, buffer, maxBufferSizeBytes); -} - -int String::copyToUTF16 (CharPointer_UTF16::CharType* const buffer, int maxBufferSizeBytes) const noexcept -{ - return StringCopier ::copyToBuffer (text, buffer, maxBufferSizeBytes); -} - -int String::copyToUTF32 (CharPointer_UTF32::CharType* const buffer, int maxBufferSizeBytes) const noexcept -{ - return StringCopier ::copyToBuffer (text, buffer, maxBufferSizeBytes); -} - -int String::getNumBytesAsUTF8() const noexcept -{ - return (int) CharPointer_UTF8::getBytesRequiredFor (text); -} - -String String::fromUTF8 (const char* const buffer, int bufferSizeBytes) -{ - if (buffer != nullptr) - { - if (bufferSizeBytes < 0) - return String (CharPointer_UTF8 (buffer)); - else if (bufferSizeBytes > 0) - return String (CharPointer_UTF8 (buffer), CharPointer_UTF8 (buffer + bufferSizeBytes)); - } - - return String::empty; -} - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -String::Concatenator::Concatenator (String& stringToAppendTo) - : result (stringToAppendTo), - nextIndex (stringToAppendTo.length()) -{ -} - -String::Concatenator::~Concatenator() -{ -} - -void String::Concatenator::append (const String& s) -{ - const int len = s.length(); - - if (len > 0) - { - size_t extraBytes = s.getCharPointer().sizeInBytes(); - result.preallocateBytes (nextIndex + extraBytes); - CharPointerType (result.text + nextIndex).writeAll (s.text); - nextIndex += len; - } -} - -#if JUCE_UNIT_TESTS - -class StringTests : public UnitTest -{ -public: - StringTests() : UnitTest ("String class") {} - - template - struct TestUTFConversion - { - static void test (UnitTest& test) - { - String s (createRandomWideCharString()); - - typename CharPointerType::CharType buffer [300]; - - memset (buffer, 0xff, sizeof (buffer)); - CharPointerType (buffer).writeAll (s.toUTF32()); - test.expectEquals (String (CharPointerType (buffer)), s); - - memset (buffer, 0xff, sizeof (buffer)); - CharPointerType (buffer).writeAll (s.toUTF16()); - test.expectEquals (String (CharPointerType (buffer)), s); - - memset (buffer, 0xff, sizeof (buffer)); - CharPointerType (buffer).writeAll (s.toUTF8()); - test.expectEquals (String (CharPointerType (buffer)), s); - } - }; - - static String createRandomWideCharString() - { - juce_wchar buffer[50] = { 0 }; - Random r; - - for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) - { - if (r.nextBool()) - { - do - { - buffer[i] = (juce_wchar) (1 + r.nextInt (0x10ffff - 1)); - } - while (! CharPointer_UTF16::canRepresent (buffer[i])); - } - else - buffer[i] = (juce_wchar) (1 + r.nextInt (0xff)); - } - - return CharPointer_UTF32 (buffer); - } - - void runTest() - { - { - beginTest ("Basics"); - - expect (String().length() == 0); - expect (String() == String::empty); - String s1, s2 ("abcd"); - expect (s1.isEmpty() && ! s1.isNotEmpty()); - expect (s2.isNotEmpty() && ! s2.isEmpty()); - expect (s2.length() == 4); - s1 = "abcd"; - expect (s2 == s1 && s1 == s2); - expect (s1 == "abcd" && s1 == L"abcd"); - expect (String ("abcd") == String (L"abcd")); - expect (String ("abcdefg", 4) == L"abcd"); - expect (String ("abcdefg", 4) == String (L"abcdefg", 4)); - expect (String::charToString ('x') == "x"); - expect (String::charToString (0) == String::empty); - expect (s2 + "e" == "abcde" && s2 + 'e' == "abcde"); - expect (s2 + L'e' == "abcde" && s2 + L"e" == "abcde"); - expect (s1.equalsIgnoreCase ("abcD") && s1 < "abce" && s1 > "abbb"); - expect (s1.startsWith ("ab") && s1.startsWith ("abcd") && ! s1.startsWith ("abcde")); - expect (s1.startsWithIgnoreCase ("aB") && s1.endsWithIgnoreCase ("CD")); - expect (s1.endsWith ("bcd") && ! s1.endsWith ("aabcd")); - expectEquals (s1.indexOf (String::empty), 0); - expectEquals (s1.indexOfIgnoreCase (String::empty), 0); - expect (s1.startsWith (String::empty) && s1.endsWith (String::empty) && s1.contains (String::empty)); - expect (s1.contains ("cd") && s1.contains ("ab") && s1.contains ("abcd")); - expect (s1.containsChar ('a')); - expect (! s1.containsChar ('x')); - expect (! s1.containsChar (0)); - expect (String ("abc foo bar").containsWholeWord ("abc") && String ("abc foo bar").containsWholeWord ("abc")); - } - - { - beginTest ("Operations"); - - String s ("012345678"); - expect (s.hashCode() != 0); - expect (s.hashCode64() != 0); - expect (s.hashCode() != (s + s).hashCode()); - expect (s.hashCode64() != (s + s).hashCode64()); - expect (s.compare (String ("012345678")) == 0); - expect (s.compare (String ("012345679")) < 0); - expect (s.compare (String ("012345676")) > 0); - expect (s.substring (2, 3) == String::charToString (s[2])); - expect (s.substring (0, 1) == String::charToString (s[0])); - expect (s.getLastCharacter() == s [s.length() - 1]); - expect (String::charToString (s.getLastCharacter()) == s.getLastCharacters (1)); - expect (s.substring (0, 3) == L"012"); - expect (s.substring (0, 100) == s); - expect (s.substring (-1, 100) == s); - expect (s.substring (3) == "345678"); - expect (s.indexOf (L"45") == 4); - expect (String ("444445").indexOf ("45") == 4); - expect (String ("444445").lastIndexOfChar ('4') == 4); - expect (String ("45454545x").lastIndexOf (L"45") == 6); - expect (String ("45454545x").lastIndexOfAnyOf ("456") == 7); - expect (String ("45454545x").lastIndexOfAnyOf (L"456x") == 8); - expect (String ("abABaBaBa").lastIndexOfIgnoreCase ("aB") == 6); - expect (s.indexOfChar (L'4') == 4); - expect (s + s == "012345678012345678"); - expect (s.startsWith (s)); - expect (s.startsWith (s.substring (0, 4))); - expect (s.startsWith (s.dropLastCharacters (4))); - expect (s.endsWith (s.substring (5))); - expect (s.endsWith (s)); - expect (s.contains (s.substring (3, 6))); - expect (s.contains (s.substring (3))); - expect (s.startsWithChar (s[0])); - expect (s.endsWithChar (s.getLastCharacter())); - expect (s [s.length()] == 0); - expect (String ("abcdEFGH").toLowerCase() == String ("abcdefgh")); - expect (String ("abcdEFGH").toUpperCase() == String ("ABCDEFGH")); - - String s2 ("123"); - s2 << ((int) 4) << ((short) 5) << "678" << L"9" << '0'; - s2 += "xyz"; - expect (s2 == "1234567890xyz"); - - beginTest ("Numeric conversions"); - expect (String::empty.getIntValue() == 0); - expect (String::empty.getDoubleValue() == 0.0); - expect (String::empty.getFloatValue() == 0.0f); - expect (s.getIntValue() == 12345678); - expect (s.getLargeIntValue() == (int64) 12345678); - expect (s.getDoubleValue() == 12345678.0); - expect (s.getFloatValue() == 12345678.0f); - expect (String (-1234).getIntValue() == -1234); - expect (String ((int64) -1234).getLargeIntValue() == -1234); - expect (String (-1234.56).getDoubleValue() == -1234.56); - expect (String (-1234.56f).getFloatValue() == -1234.56f); - expect (("xyz" + s).getTrailingIntValue() == s.getIntValue()); - expect (s.getHexValue32() == 0x12345678); - expect (s.getHexValue64() == (int64) 0x12345678); - expect (String::toHexString (0x1234abcd).equalsIgnoreCase ("1234abcd")); - expect (String::toHexString ((int64) 0x1234abcd).equalsIgnoreCase ("1234abcd")); - expect (String::toHexString ((short) 0x12ab).equalsIgnoreCase ("12ab")); - - unsigned char data[] = { 1, 2, 3, 4, 0xa, 0xb, 0xc, 0xd }; - expect (String::toHexString (data, 8, 0).equalsIgnoreCase ("010203040a0b0c0d")); - expect (String::toHexString (data, 8, 1).equalsIgnoreCase ("01 02 03 04 0a 0b 0c 0d")); - expect (String::toHexString (data, 8, 2).equalsIgnoreCase ("0102 0304 0a0b 0c0d")); - - beginTest ("Subsections"); - String s3; - s3 = "abcdeFGHIJ"; - expect (s3.equalsIgnoreCase ("ABCdeFGhiJ")); - expect (s3.compareIgnoreCase (L"ABCdeFGhiJ") == 0); - expect (s3.containsIgnoreCase (s3.substring (3))); - expect (s3.indexOfAnyOf ("xyzf", 2, true) == 5); - expect (s3.indexOfAnyOf (L"xyzf", 2, false) == -1); - expect (s3.indexOfAnyOf ("xyzF", 2, false) == 5); - expect (s3.containsAnyOf (L"zzzFs")); - expect (s3.startsWith ("abcd")); - expect (s3.startsWithIgnoreCase (L"abCD")); - expect (s3.startsWith (String::empty)); - expect (s3.startsWithChar ('a')); - expect (s3.endsWith (String ("HIJ"))); - expect (s3.endsWithIgnoreCase (L"Hij")); - expect (s3.endsWith (String::empty)); - expect (s3.endsWithChar (L'J')); - expect (s3.indexOf ("HIJ") == 7); - expect (s3.indexOf (L"HIJK") == -1); - expect (s3.indexOfIgnoreCase ("hij") == 7); - expect (s3.indexOfIgnoreCase (L"hijk") == -1); - - String s4 (s3); - s4.append (String ("xyz123"), 3); - expect (s4 == s3 + "xyz"); - - expect (String (1234) < String (1235)); - expect (String (1235) > String (1234)); - expect (String (1234) >= String (1234)); - expect (String (1234) <= String (1234)); - expect (String (1235) >= String (1234)); - expect (String (1234) <= String (1235)); - - String s5 ("word word2 word3"); - expect (s5.containsWholeWord (String ("word2"))); - expect (s5.indexOfWholeWord ("word2") == 5); - expect (s5.containsWholeWord (L"word")); - expect (s5.containsWholeWord ("word3")); - expect (s5.containsWholeWord (s5)); - expect (s5.containsWholeWordIgnoreCase (L"Word2")); - expect (s5.indexOfWholeWordIgnoreCase ("Word2") == 5); - expect (s5.containsWholeWordIgnoreCase (L"Word")); - expect (s5.containsWholeWordIgnoreCase ("Word3")); - expect (! s5.containsWholeWordIgnoreCase (L"Wordx")); - expect (!s5.containsWholeWordIgnoreCase ("xWord2")); - expect (s5.containsNonWhitespaceChars()); - expect (s5.containsOnly ("ordw23 ")); - expect (! String (" \n\r\t").containsNonWhitespaceChars()); - - expect (s5.matchesWildcard (L"wor*", false)); - expect (s5.matchesWildcard ("wOr*", true)); - expect (s5.matchesWildcard (L"*word3", true)); - expect (s5.matchesWildcard ("*word?", true)); - expect (s5.matchesWildcard (L"Word*3", true)); - - expectEquals (s5.fromFirstOccurrenceOf (String::empty, true, false), s5); - expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100)); - expectEquals (s5.fromFirstOccurrenceOf (L"word2", true, false), s5.substring (5)); - expectEquals (s5.fromFirstOccurrenceOf ("Word2", true, true), s5.substring (5)); - expectEquals (s5.fromFirstOccurrenceOf ("word2", false, false), s5.getLastCharacters (6)); - expectEquals (s5.fromFirstOccurrenceOf (L"Word2", false, true), s5.getLastCharacters (6)); - - expectEquals (s5.fromLastOccurrenceOf (String::empty, true, false), s5); - expectEquals (s5.fromLastOccurrenceOf (L"wordx", true, false), s5); - expectEquals (s5.fromLastOccurrenceOf ("word", true, false), s5.getLastCharacters (5)); - expectEquals (s5.fromLastOccurrenceOf (L"worD", true, true), s5.getLastCharacters (5)); - expectEquals (s5.fromLastOccurrenceOf ("word", false, false), s5.getLastCharacters (1)); - expectEquals (s5.fromLastOccurrenceOf (L"worD", false, true), s5.getLastCharacters (1)); - - expect (s5.upToFirstOccurrenceOf (String::empty, true, false).isEmpty()); - expectEquals (s5.upToFirstOccurrenceOf ("word4", true, false), s5); - expectEquals (s5.upToFirstOccurrenceOf (L"word2", true, false), s5.substring (0, 10)); - expectEquals (s5.upToFirstOccurrenceOf ("Word2", true, true), s5.substring (0, 10)); - expectEquals (s5.upToFirstOccurrenceOf (L"word2", false, false), s5.substring (0, 5)); - expectEquals (s5.upToFirstOccurrenceOf ("Word2", false, true), s5.substring (0, 5)); - - expectEquals (s5.upToLastOccurrenceOf (String::empty, true, false), s5); - expectEquals (s5.upToLastOccurrenceOf ("zword", true, false), s5); - expectEquals (s5.upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); - expectEquals (s5.dropLastCharacters(1).upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); - expectEquals (s5.upToLastOccurrenceOf ("Word", true, true), s5.dropLastCharacters (1)); - expectEquals (s5.upToLastOccurrenceOf ("word", false, false), s5.dropLastCharacters (5)); - expectEquals (s5.upToLastOccurrenceOf ("Word", false, true), s5.dropLastCharacters (5)); - - expectEquals (s5.replace ("word", L"xyz", false), String ("xyz xyz2 xyz3")); - expect (s5.replace (L"Word", "xyz", true) == "xyz xyz2 xyz3"); - expect (s5.dropLastCharacters (1).replace ("Word", String ("xyz"), true) == L"xyz xyz2 xyz"); - expect (s5.replace ("Word", "", true) == " 2 3"); - expectEquals (s5.replace ("Word2", L"xyz", true), String ("word xyz word3")); - expect (s5.replaceCharacter (L'w', 'x') != s5); - expectEquals (s5.replaceCharacter ('w', L'x').replaceCharacter ('x', 'w'), s5); - expect (s5.replaceCharacters ("wo", "xy") != s5); - expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", L"wo"), s5); - expectEquals (s5.retainCharacters ("1wordxya"), String ("wordwordword")); - expect (s5.retainCharacters (String::empty).isEmpty()); - expect (s5.removeCharacters ("1wordxya") == " 2 3"); - expectEquals (s5.removeCharacters (String::empty), s5); - expect (s5.initialSectionContainingOnly ("word") == L"word"); - expect (String ("word").initialSectionContainingOnly ("word") == L"word"); - expectEquals (s5.initialSectionNotContaining (String ("xyz ")), String ("word")); - expectEquals (s5.initialSectionNotContaining (String (";[:'/")), s5); - expect (! s5.isQuotedString()); - expect (s5.quoted().isQuotedString()); - expect (! s5.quoted().unquoted().isQuotedString()); - expect (! String ("x'").isQuotedString()); - expect (String ("'x").isQuotedString()); - - String s6 (" \t xyz \t\r\n"); - expectEquals (s6.trim(), String ("xyz")); - expect (s6.trim().trim() == "xyz"); - expectEquals (s5.trim(), s5); - expectEquals (s6.trimStart().trimEnd(), s6.trim()); - expectEquals (s6.trimStart().trimEnd(), s6.trimEnd().trimStart()); - expectEquals (s6.trimStart().trimStart().trimEnd().trimEnd(), s6.trimEnd().trimStart()); - expect (s6.trimStart() != s6.trimEnd()); - expectEquals (("\t\r\n " + s6 + "\t\n \r").trim(), s6.trim()); - expect (String::repeatedString ("xyz", 3) == L"xyzxyzxyz"); - } - - { - beginTest ("UTF conversions"); - - TestUTFConversion ::test (*this); - TestUTFConversion ::test (*this); - TestUTFConversion ::test (*this); - } - - { - beginTest ("StringArray"); - - StringArray s; - for (int i = 5; --i >= 0;) - s.add (String (i)); - - expectEquals (s.joinIntoString ("-"), String ("4-3-2-1-0")); - s.remove (2); - expectEquals (s.joinIntoString ("--"), String ("4--3--1--0")); - expectEquals (s.joinIntoString (String::empty), String ("4310")); - s.clear(); - expectEquals (s.joinIntoString ("x"), String::empty); - } - } -}; - -static StringTests stringUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_String.cpp ***/ - - -/*** Start of inlined file: juce_StringArray.cpp ***/ -BEGIN_JUCE_NAMESPACE - -StringArray::StringArray() noexcept -{ -} - -StringArray::StringArray (const StringArray& other) - : strings (other.strings) -{ -} - -StringArray::StringArray (const String& firstValue) -{ - strings.add (firstValue); -} - -namespace StringArrayHelpers -{ - template - void addArray (Array& dest, const CharType* const* strings) - { - if (strings != nullptr) - while (*strings != nullptr) - dest.add (*strings++); - } - - template - void addArray (Array& dest, const CharType* const* const strings, const int numberOfStrings) - { - for (int i = 0; i < numberOfStrings; ++i) - dest.add (strings [i]); - } -} - -StringArray::StringArray (const char* const* const initialStrings) -{ - StringArrayHelpers::addArray (strings, initialStrings); -} - -StringArray::StringArray (const char* const* const initialStrings, const int numberOfStrings) -{ - StringArrayHelpers::addArray (strings, initialStrings, numberOfStrings); -} - -StringArray::StringArray (const wchar_t* const* const initialStrings) -{ - StringArrayHelpers::addArray (strings, initialStrings); -} - -StringArray::StringArray (const wchar_t* const* const initialStrings, const int numberOfStrings) -{ - StringArrayHelpers::addArray (strings, initialStrings, numberOfStrings); -} - -StringArray& StringArray::operator= (const StringArray& other) -{ - strings = other.strings; - return *this; -} - -StringArray::~StringArray() -{ -} - -bool StringArray::operator== (const StringArray& other) const noexcept -{ - if (other.size() != size()) - return false; - - for (int i = size(); --i >= 0;) - if (other.strings.getReference(i) != strings.getReference(i)) - return false; - - return true; -} - -bool StringArray::operator!= (const StringArray& other) const noexcept -{ - return ! operator== (other); -} - -void StringArray::clear() -{ - strings.clear(); -} - -const String& StringArray::operator[] (const int index) const noexcept -{ - if (isPositiveAndBelow (index, strings.size())) - return strings.getReference (index); - - return String::empty; -} - -String& StringArray::getReference (const int index) noexcept -{ - jassert (isPositiveAndBelow (index, strings.size())); - return strings.getReference (index); -} - -void StringArray::add (const String& newString) -{ - strings.add (newString); -} - -void StringArray::insert (const int index, const String& newString) -{ - strings.insert (index, newString); -} - -void StringArray::addIfNotAlreadyThere (const String& newString, const bool ignoreCase) -{ - if (! contains (newString, ignoreCase)) - add (newString); -} - -void StringArray::addArray (const StringArray& otherArray, int startIndex, int numElementsToAdd) -{ - if (startIndex < 0) - { - jassertfalse; - startIndex = 0; - } - - if (numElementsToAdd < 0 || startIndex + numElementsToAdd > otherArray.size()) - numElementsToAdd = otherArray.size() - startIndex; - - while (--numElementsToAdd >= 0) - strings.add (otherArray.strings.getReference (startIndex++)); -} - -void StringArray::set (const int index, const String& newString) -{ - strings.set (index, newString); -} - -bool StringArray::contains (const String& stringToLookFor, const bool ignoreCase) const -{ - if (ignoreCase) - { - for (int i = size(); --i >= 0;) - if (strings.getReference(i).equalsIgnoreCase (stringToLookFor)) - return true; - } - else - { - for (int i = size(); --i >= 0;) - if (stringToLookFor == strings.getReference(i)) - return true; - } - - return false; -} - -int StringArray::indexOf (const String& stringToLookFor, const bool ignoreCase, int i) const -{ - if (i < 0) - i = 0; - - const int numElements = size(); - - if (ignoreCase) - { - while (i < numElements) - { - if (strings.getReference(i).equalsIgnoreCase (stringToLookFor)) - return i; - - ++i; - } - } - else - { - while (i < numElements) - { - if (stringToLookFor == strings.getReference (i)) - return i; - - ++i; - } - } - - return -1; -} - -void StringArray::remove (const int index) -{ - strings.remove (index); -} - -void StringArray::removeString (const String& stringToRemove, - const bool ignoreCase) -{ - if (ignoreCase) - { - for (int i = size(); --i >= 0;) - if (strings.getReference(i).equalsIgnoreCase (stringToRemove)) - strings.remove (i); - } - else - { - for (int i = size(); --i >= 0;) - if (stringToRemove == strings.getReference (i)) - strings.remove (i); - } -} - -void StringArray::removeRange (int startIndex, int numberToRemove) -{ - strings.removeRange (startIndex, numberToRemove); -} - -void StringArray::removeEmptyStrings (const bool removeWhitespaceStrings) -{ - if (removeWhitespaceStrings) - { - for (int i = size(); --i >= 0;) - if (! strings.getReference(i).containsNonWhitespaceChars()) - strings.remove (i); - } - else - { - for (int i = size(); --i >= 0;) - if (strings.getReference(i).isEmpty()) - strings.remove (i); - } -} - -void StringArray::trim() -{ - for (int i = size(); --i >= 0;) - { - String& s = strings.getReference(i); - s = s.trim(); - } -} - -class InternalStringArrayComparator_CaseSensitive -{ -public: - static int compareElements (String& first, String& second) { return first.compare (second); } -}; - -class InternalStringArrayComparator_CaseInsensitive -{ -public: - static int compareElements (String& first, String& second) { return first.compareIgnoreCase (second); } -}; - -void StringArray::sort (const bool ignoreCase) -{ - if (ignoreCase) - { - InternalStringArrayComparator_CaseInsensitive comp; - strings.sort (comp); - } - else - { - InternalStringArrayComparator_CaseSensitive comp; - strings.sort (comp); - } -} - -void StringArray::move (const int currentIndex, int newIndex) noexcept -{ - strings.move (currentIndex, newIndex); -} - -String StringArray::joinIntoString (const String& separator, int start, int numberToJoin) const -{ - const int last = (numberToJoin < 0) ? size() - : jmin (size(), start + numberToJoin); - - if (start < 0) - start = 0; - - if (start >= last) - return String::empty; - - if (start == last - 1) - return strings.getReference (start); - - const size_t separatorBytes = separator.getCharPointer().sizeInBytes() - sizeof (String::CharPointerType::CharType); - size_t bytesNeeded = separatorBytes * (last - start - 1); - - for (int i = start; i < last; ++i) - bytesNeeded += strings.getReference(i).getCharPointer().sizeInBytes() - sizeof (String::CharPointerType::CharType); - - String result; - result.preallocateBytes (bytesNeeded); - - String::CharPointerType dest (result.getCharPointer()); - - while (start < last) - { - const String& s = strings.getReference (start); - - if (! s.isEmpty()) - dest.writeAll (s.getCharPointer()); - - if (++start < last && separatorBytes > 0) - dest.writeAll (separator.getCharPointer()); - } - - dest.writeNull(); - - return result; -} - -int StringArray::addTokens (const String& text, const bool preserveQuotedStrings) -{ - return addTokens (text, " \n\r\t", preserveQuotedStrings ? "\"" : ""); -} - -int StringArray::addTokens (const String& text, const String& breakCharacters, const String& quoteCharacters) -{ - int num = 0; - String::CharPointerType t (text.getCharPointer()); - - while (! t.isEmpty()) - { - String::CharPointerType tokenEnd (CharacterFunctions::findEndOfToken (t, - breakCharacters.getCharPointer(), - quoteCharacters.getCharPointer())); - add (String (t, tokenEnd)); - ++num; - - if (tokenEnd.isEmpty()) - break; - - t = ++tokenEnd; - } - - return num; -} - -int StringArray::addLines (const String& sourceText) -{ - int numLines = 0; - String::CharPointerType text (sourceText.getCharPointer()); - bool finished = text.isEmpty(); - - while (! finished) - { - String::CharPointerType startOfLine (text); - int numChars = 0; - - for (;;) - { - const juce_wchar c = text.getAndAdvance(); - - if (c == 0) - { - finished = true; - break; - } - - if (c == '\n') - break; - - if (c == '\r') - { - if (*text == '\n') - ++text; - - break; - } - - ++numChars; - } - - add (String (startOfLine, numChars)); - ++numLines; - } - - return numLines; -} - -void StringArray::removeDuplicates (const bool ignoreCase) -{ - for (int i = 0; i < size() - 1; ++i) - { - const String s (strings.getReference(i)); - - int nextIndex = i + 1; - - for (;;) - { - nextIndex = indexOf (s, ignoreCase, nextIndex); - - if (nextIndex < 0) - break; - - strings.remove (nextIndex); - } - } -} - -void StringArray::appendNumbersToDuplicates (const bool ignoreCase, - const bool appendNumberToFirstInstance, - CharPointer_UTF8 preNumberString, - CharPointer_UTF8 postNumberString) -{ - CharPointer_UTF8 defaultPre (" ("), defaultPost (")"); - - if (preNumberString.getAddress() == nullptr) - preNumberString = defaultPre; - - if (postNumberString.getAddress() == nullptr) - postNumberString = defaultPost; - - for (int i = 0; i < size() - 1; ++i) - { - String& s = strings.getReference(i); - - int nextIndex = indexOf (s, ignoreCase, i + 1); - - if (nextIndex >= 0) - { - const String original (s); - - int number = 0; - - if (appendNumberToFirstInstance) - s = original + String (preNumberString) + String (++number) + String (postNumberString); - else - ++number; - - while (nextIndex >= 0) - { - set (nextIndex, (*this)[nextIndex] + String (preNumberString) + String (++number) + String (postNumberString)); - nextIndex = indexOf (original, ignoreCase, nextIndex + 1); - } - } - } -} - -void StringArray::minimiseStorageOverheads() -{ - strings.minimiseStorageOverheads(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_StringArray.cpp ***/ - - -/*** Start of inlined file: juce_StringPairArray.cpp ***/ -BEGIN_JUCE_NAMESPACE - -StringPairArray::StringPairArray (const bool ignoreCase_) - : ignoreCase (ignoreCase_) -{ -} - -StringPairArray::StringPairArray (const StringPairArray& other) - : keys (other.keys), - values (other.values), - ignoreCase (other.ignoreCase) -{ -} - -StringPairArray::~StringPairArray() -{ -} - -StringPairArray& StringPairArray::operator= (const StringPairArray& other) -{ - keys = other.keys; - values = other.values; - return *this; -} - -bool StringPairArray::operator== (const StringPairArray& other) const -{ - for (int i = keys.size(); --i >= 0;) - if (other [keys[i]] != values[i]) - return false; - - return true; -} - -bool StringPairArray::operator!= (const StringPairArray& other) const -{ - return ! operator== (other); -} - -const String& StringPairArray::operator[] (const String& key) const -{ - return values [keys.indexOf (key, ignoreCase)]; -} - -String StringPairArray::getValue (const String& key, const String& defaultReturnValue) const -{ - const int i = keys.indexOf (key, ignoreCase); - - if (i >= 0) - return values[i]; - - return defaultReturnValue; -} - -void StringPairArray::set (const String& key, const String& value) -{ - const int i = keys.indexOf (key, ignoreCase); - - if (i >= 0) - { - values.set (i, value); - } - else - { - keys.add (key); - values.add (value); - } -} - -void StringPairArray::addArray (const StringPairArray& other) -{ - for (int i = 0; i < other.size(); ++i) - set (other.keys[i], other.values[i]); -} - -void StringPairArray::clear() -{ - keys.clear(); - values.clear(); -} - -void StringPairArray::remove (const String& key) -{ - remove (keys.indexOf (key, ignoreCase)); -} - -void StringPairArray::remove (const int index) -{ - keys.remove (index); - values.remove (index); -} - -void StringPairArray::setIgnoresCase (const bool shouldIgnoreCase) -{ - ignoreCase = shouldIgnoreCase; -} - -String StringPairArray::getDescription() const -{ - String s; - - for (int i = 0; i < keys.size(); ++i) - { - s << keys[i] << " = " << values[i]; - if (i < keys.size()) - s << ", "; - } - - return s; -} - -void StringPairArray::minimiseStorageOverheads() -{ - keys.minimiseStorageOverheads(); - values.minimiseStorageOverheads(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_StringPairArray.cpp ***/ - - -/*** Start of inlined file: juce_StringPool.cpp ***/ -BEGIN_JUCE_NAMESPACE - -StringPool::StringPool() noexcept {} -StringPool::~StringPool() {} - -namespace StringPoolHelpers -{ - template - const String::CharPointerType getPooledStringFromArray (Array& strings, StringType newString) - { - int start = 0; - int end = strings.size(); - - for (;;) - { - if (start >= end) - { - jassert (start <= end); - strings.insert (start, newString); - return strings.getReference (start).getCharPointer(); - } - else - { - const String& startString = strings.getReference (start); - - if (startString == newString) - return startString.getCharPointer(); - - const int halfway = (start + end) >> 1; - - if (halfway == start) - { - if (startString.compare (newString) < 0) - ++start; - - strings.insert (start, newString); - return strings.getReference (start).getCharPointer(); - } - - const int comp = strings.getReference (halfway).compare (newString); - - if (comp == 0) - return strings.getReference (halfway).getCharPointer(); - else if (comp < 0) - start = halfway; - else - end = halfway; - } - } - } -} - -const String::CharPointerType StringPool::getPooledString (const String& s) -{ - if (s.isEmpty()) - return String::empty.getCharPointer(); - - return StringPoolHelpers::getPooledStringFromArray (strings, s); -} - -const String::CharPointerType StringPool::getPooledString (const char* const s) -{ - if (s == nullptr || *s == 0) - return String::empty.getCharPointer(); - - return StringPoolHelpers::getPooledStringFromArray (strings, s); -} - -const String::CharPointerType StringPool::getPooledString (const wchar_t* const s) -{ - if (s == nullptr || *s == 0) - return String::empty.getCharPointer(); - - return StringPoolHelpers::getPooledStringFromArray (strings, s); -} - -int StringPool::size() const noexcept -{ - return strings.size(); -} - -const String::CharPointerType StringPool::operator[] (const int index) const noexcept -{ - return strings [index].getCharPointer(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_StringPool.cpp ***/ - - -/*** Start of inlined file: juce_XmlDocument.cpp ***/ -BEGIN_JUCE_NAMESPACE - -XmlDocument::XmlDocument (const String& documentText) - : originalText (documentText), - input (nullptr), - ignoreEmptyTextElements (true) -{ -} - -XmlDocument::XmlDocument (const File& file) - : input (nullptr), - ignoreEmptyTextElements (true), - inputSource (new FileInputSource (file)) -{ -} - -XmlDocument::~XmlDocument() -{ -} - -XmlElement* XmlDocument::parse (const File& file) -{ - XmlDocument doc (file); - return doc.getDocumentElement(); -} - -XmlElement* XmlDocument::parse (const String& xmlData) -{ - XmlDocument doc (xmlData); - return doc.getDocumentElement(); -} - -void XmlDocument::setInputSource (InputSource* const newSource) noexcept -{ - inputSource = newSource; -} - -void XmlDocument::setEmptyTextElementsIgnored (const bool shouldBeIgnored) noexcept -{ - ignoreEmptyTextElements = shouldBeIgnored; -} - -namespace XmlIdentifierChars -{ - bool isIdentifierCharSlow (const juce_wchar c) noexcept - { - return CharacterFunctions::isLetterOrDigit (c) - || c == '_' || c == '-' || c == ':' || c == '.'; - } - - bool isIdentifierChar (const juce_wchar c) noexcept - { - static const uint32 legalChars[] = { 0, 0x7ff6000, 0x87fffffe, 0x7fffffe, 0 }; - - return ((int) c < (int) numElementsInArray (legalChars) * 32) ? ((legalChars [c >> 5] & (1 << (c & 31))) != 0) - : isIdentifierCharSlow (c); - } - - /*static void generateIdentifierCharConstants() - { - uint32 n[8] = { 0 }; - for (int i = 0; i < 256; ++i) - if (isIdentifierCharSlow (i)) - n[i >> 5] |= (1 << (i & 31)); - - String s; - for (int i = 0; i < 8; ++i) - s << "0x" << String::toHexString ((int) n[i]) << ", "; - - DBG (s); - }*/ -} - -XmlElement* XmlDocument::getDocumentElement (const bool onlyReadOuterDocumentElement) -{ - String textToParse (originalText); - - if (textToParse.isEmpty() && inputSource != nullptr) - { - ScopedPointer in (inputSource->createInputStream()); - - if (in != nullptr) - { - MemoryOutputStream data; - data.writeFromInputStream (*in, onlyReadOuterDocumentElement ? 8192 : -1); - textToParse = data.toString(); - - if (! onlyReadOuterDocumentElement) - originalText = textToParse; - } - } - - input = textToParse.getCharPointer(); - lastError = String::empty; - errorOccurred = false; - outOfData = false; - needToLoadDTD = true; - - if (textToParse.isEmpty()) - { - lastError = "not enough input"; - } - else - { - skipHeader(); - - if (input.getAddress() != nullptr) - { - ScopedPointer result (readNextElement (! onlyReadOuterDocumentElement)); - - if (! errorOccurred) - return result.release(); - } - else - { - lastError = "incorrect xml header"; - } - } - - return nullptr; -} - -const String& XmlDocument::getLastParseError() const noexcept -{ - return lastError; -} - -void XmlDocument::setLastError (const String& desc, const bool carryOn) -{ - lastError = desc; - errorOccurred = ! carryOn; -} - -String XmlDocument::getFileContents (const String& filename) const -{ - if (inputSource != nullptr) - { - const ScopedPointer in (inputSource->createInputStreamFor (filename.trim().unquoted())); - - if (in != nullptr) - return in->readEntireStreamAsString(); - } - - return String::empty; -} - -juce_wchar XmlDocument::readNextChar() noexcept -{ - const juce_wchar c = input.getAndAdvance(); - - if (c == 0) - { - outOfData = true; - --input; - } - - return c; -} - -int XmlDocument::findNextTokenLength() noexcept -{ - int len = 0; - juce_wchar c = *input; - - while (XmlIdentifierChars::isIdentifierChar (c)) - c = input [++len]; - - return len; -} - -void XmlDocument::skipHeader() -{ - const int headerStart = input.indexOf (CharPointer_UTF8 ("= 0) - { - const int headerEnd = (input + headerStart).indexOf (CharPointer_UTF8 ("?>")); - if (headerEnd < 0) - return; - - #if JUCE_DEBUG - const String header (input + headerStart, headerEnd - headerStart); - const String encoding (header.fromFirstOccurrenceOf ("encoding", false, true) - .fromFirstOccurrenceOf ("=", false, false) - .fromFirstOccurrenceOf ("\"", false, false) - .upToFirstOccurrenceOf ("\"", false, false).trim()); - - /* If you load an XML document with a non-UTF encoding type, it may have been - loaded wrongly.. Since all the files are read via the normal juce file streams, - they're treated as UTF-8, so by the time it gets to the parser, the encoding will - have been lost. Best plan is to stick to utf-8 or if you have specific files to - read, use your own code to convert them to a unicode String, and pass that to the - XML parser. - */ - jassert (encoding.isEmpty() || encoding.startsWithIgnoreCase ("utf-")); - #endif - - input += headerEnd + 2; - } - - skipNextWhiteSpace(); - - const int docTypeIndex = input.indexOf (CharPointer_UTF8 (" 0) - { - const juce_wchar c = readNextChar(); - - if (outOfData) - return; - - if (c == '<') - ++n; - else if (c == '>') - --n; - } - - dtdText = String (docType, (int) (input.getAddress() - (docType.getAddress() + 1))).trim(); -} - -void XmlDocument::skipNextWhiteSpace() -{ - for (;;) - { - juce_wchar c = *input; - - while (CharacterFunctions::isWhitespace (c)) - c = *++input; - - if (c == 0) - { - outOfData = true; - break; - } - else if (c == '<') - { - if (input[1] == '!' - && input[2] == '-' - && input[3] == '-') - { - const int closeComment = input.indexOf (CharPointer_UTF8 ("-->")); - - if (closeComment < 0) - { - outOfData = true; - break; - } - - input += closeComment + 3; - continue; - } - else if (input[1] == '?') - { - const int closeBracket = input.indexOf (CharPointer_UTF8 ("?>")); - - if (closeBracket < 0) - { - outOfData = true; - break; - } - - input += closeBracket + 2; - continue; - } - } - - break; - } -} - -void XmlDocument::readQuotedString (String& result) -{ - const juce_wchar quote = readNextChar(); - - while (! outOfData) - { - const juce_wchar c = readNextChar(); - - if (c == quote) - break; - - --input; - - if (c == '&') - { - readEntity (result); - } - else - { - const String::CharPointerType start (input); - int numChars = 0; - - for (;;) - { - const juce_wchar character = *input; - - if (character == quote) - { - result.appendCharPointer (start, numChars); - ++input; - return; - } - else if (character == '&') - { - result.appendCharPointer (start, numChars); - break; - } - else if (character == 0) - { - outOfData = true; - setLastError ("unmatched quotes", false); - break; - } - - ++input; - ++numChars; - } - } - } -} - -XmlElement* XmlDocument::readNextElement (const bool alsoParseSubElements) -{ - XmlElement* node = nullptr; - - skipNextWhiteSpace(); - if (outOfData) - return nullptr; - - const int openBracket = input.indexOf ((juce_wchar) '<'); - - if (openBracket >= 0) - { - input += openBracket + 1; - int tagLen = findNextTokenLength(); - - if (tagLen == 0) - { - // no tag name - but allow for a gap after the '<' before giving an error - skipNextWhiteSpace(); - tagLen = findNextTokenLength(); - - if (tagLen == 0) - { - setLastError ("tag name missing", false); - return node; - } - } - - node = new XmlElement (String (input, tagLen)); - input += tagLen; - LinkedListPointer::Appender attributeAppender (node->attributes); - - // look for attributes - for (;;) - { - skipNextWhiteSpace(); - - const juce_wchar c = *input; - - // empty tag.. - if (c == '/' && input[1] == '>') - { - input += 2; - break; - } - - // parse the guts of the element.. - if (c == '>') - { - ++input; - - if (alsoParseSubElements) - readChildElements (node); - - break; - } - - // get an attribute.. - if (XmlIdentifierChars::isIdentifierChar (c)) - { - const int attNameLen = findNextTokenLength(); - - if (attNameLen > 0) - { - const String::CharPointerType attNameStart (input); - input += attNameLen; - - skipNextWhiteSpace(); - - if (readNextChar() == '=') - { - skipNextWhiteSpace(); - - const juce_wchar nextChar = *input; - - if (nextChar == '"' || nextChar == '\'') - { - XmlElement::XmlAttributeNode* const newAtt - = new XmlElement::XmlAttributeNode (String (attNameStart, attNameLen), - String::empty); - - readQuotedString (newAtt->value); - attributeAppender.append (newAtt); - continue; - } - } - } - } - else - { - if (! outOfData) - setLastError ("illegal character found in " + node->getTagName() + ": '" + c + "'", false); - } - - break; - } - } - - return node; -} - -void XmlDocument::readChildElements (XmlElement* parent) -{ - LinkedListPointer::Appender childAppender (parent->firstChildElement); - - for (;;) - { - const String::CharPointerType preWhitespaceInput (input); - skipNextWhiteSpace(); - - if (outOfData) - { - setLastError ("unmatched tags", false); - break; - } - - if (*input == '<') - { - if (input[1] == '/') - { - // our close tag.. - const int closeTag = input.indexOf ((juce_wchar) '>'); - - if (closeTag >= 0) - input += closeTag + 1; - - break; - } - else if (input[1] == '!' - && input[2] == '[' - && input[3] == 'C' - && input[4] == 'D' - && input[5] == 'A' - && input[6] == 'T' - && input[7] == 'A' - && input[8] == '[') - { - input += 9; - const String::CharPointerType inputStart (input); - - int len = 0; - - for (;;) - { - if (*input == 0) - { - setLastError ("unterminated CDATA section", false); - outOfData = true; - break; - } - else if (input[0] == ']' - && input[1] == ']' - && input[2] == '>') - { - input += 3; - break; - } - - ++input; - ++len; - } - - childAppender.append (XmlElement::createTextElement (String (inputStart, len))); - } - else - { - // this is some other element, so parse and add it.. - XmlElement* const n = readNextElement (true); - - if (n != nullptr) - childAppender.append (n); - else - break; - } - } - else // must be a character block - { - input = preWhitespaceInput; // roll back to include the leading whitespace - String textElementContent; - - for (;;) - { - const juce_wchar c = *input; - - if (c == '<') - break; - - if (c == 0) - { - setLastError ("unmatched tags", false); - outOfData = true; - return; - } - - if (c == '&') - { - String entity; - readEntity (entity); - - if (entity.startsWithChar ('<') && entity [1] != 0) - { - const String::CharPointerType oldInput (input); - const bool oldOutOfData = outOfData; - - input = entity.getCharPointer(); - outOfData = false; - - for (;;) - { - XmlElement* const n = readNextElement (true); - - if (n == nullptr) - break; - - childAppender.append (n); - } - - input = oldInput; - outOfData = oldOutOfData; - } - else - { - textElementContent += entity; - } - } - else - { - const String::CharPointerType start (input); - int len = 0; - - for (;;) - { - const juce_wchar nextChar = *input; - - if (nextChar == '<' || nextChar == '&') - { - break; - } - else if (nextChar == 0) - { - setLastError ("unmatched tags", false); - outOfData = true; - return; - } - - ++input; - ++len; - } - - textElementContent.appendCharPointer (start, len); - } - } - - if ((! ignoreEmptyTextElements) || textElementContent.containsNonWhitespaceChars()) - { - childAppender.append (XmlElement::createTextElement (textElementContent)); - } - } - } -} - -void XmlDocument::readEntity (String& result) -{ - // skip over the ampersand - ++input; - - if (input.compareIgnoreCaseUpTo (CharPointer_UTF8 ("amp;"), 4) == 0) - { - input += 4; - result += '&'; - } - else if (input.compareIgnoreCaseUpTo (CharPointer_UTF8 ("quot;"), 5) == 0) - { - input += 5; - result += '"'; - } - else if (input.compareIgnoreCaseUpTo (CharPointer_UTF8 ("apos;"), 5) == 0) - { - input += 5; - result += '\''; - } - else if (input.compareIgnoreCaseUpTo (CharPointer_UTF8 ("lt;"), 3) == 0) - { - input += 3; - result += '<'; - } - else if (input.compareIgnoreCaseUpTo (CharPointer_UTF8 ("gt;"), 3) == 0) - { - input += 3; - result += '>'; - } - else if (*input == '#') - { - int charCode = 0; - ++input; - - if (*input == 'x' || *input == 'X') - { - ++input; - int numChars = 0; - - while (input[0] != ';') - { - const int hexValue = CharacterFunctions::getHexDigitValue (input[0]); - - if (hexValue < 0 || ++numChars > 8) - { - setLastError ("illegal escape sequence", true); - break; - } - - charCode = (charCode << 4) | hexValue; - ++input; - } - - ++input; - } - else if (input[0] >= '0' && input[0] <= '9') - { - int numChars = 0; - - while (input[0] != ';') - { - if (++numChars > 12) - { - setLastError ("illegal escape sequence", true); - break; - } - - charCode = charCode * 10 + (input[0] - '0'); - ++input; - } - - ++input; - } - else - { - setLastError ("illegal escape sequence", true); - result += '&'; - return; - } - - result << (juce_wchar) charCode; - } - else - { - const String::CharPointerType entityNameStart (input); - const int closingSemiColon = input.indexOf ((juce_wchar) ';'); - - if (closingSemiColon < 0) - { - outOfData = true; - result += '&'; - } - else - { - input += closingSemiColon + 1; - - result += expandExternalEntity (String (entityNameStart, closingSemiColon)); - } - } -} - -String XmlDocument::expandEntity (const String& ent) -{ - if (ent.equalsIgnoreCase ("amp")) return String::charToString ('&'); - if (ent.equalsIgnoreCase ("quot")) return String::charToString ('"'); - if (ent.equalsIgnoreCase ("apos")) return String::charToString ('\''); - if (ent.equalsIgnoreCase ("lt")) return String::charToString ('<'); - if (ent.equalsIgnoreCase ("gt")) return String::charToString ('>'); - - if (ent[0] == '#') - { - const juce_wchar char1 = ent[1]; - - if (char1 == 'x' || char1 == 'X') - return String::charToString (static_cast (ent.substring (2).getHexValue32())); - - if (char1 >= '0' && char1 <= '9') - return String::charToString (static_cast (ent.substring (1).getIntValue())); - - setLastError ("illegal escape sequence", false); - return String::charToString ('&'); - } - - return expandExternalEntity (ent); -} - -String XmlDocument::expandExternalEntity (const String& entity) -{ - if (needToLoadDTD) - { - if (dtdText.isNotEmpty()) - { - dtdText = dtdText.trimCharactersAtEnd (">"); - tokenisedDTD.addTokens (dtdText, true); - - if (tokenisedDTD [tokenisedDTD.size() - 2].equalsIgnoreCase ("system") - && tokenisedDTD [tokenisedDTD.size() - 1].isQuotedString()) - { - const String fn (tokenisedDTD [tokenisedDTD.size() - 1]); - - tokenisedDTD.clear(); - tokenisedDTD.addTokens (getFileContents (fn), true); - } - else - { - tokenisedDTD.clear(); - const int openBracket = dtdText.indexOfChar ('['); - - if (openBracket > 0) - { - const int closeBracket = dtdText.lastIndexOfChar (']'); - - if (closeBracket > openBracket) - tokenisedDTD.addTokens (dtdText.substring (openBracket + 1, - closeBracket), true); - } - } - - for (int i = tokenisedDTD.size(); --i >= 0;) - { - if (tokenisedDTD[i].startsWithChar ('%') - && tokenisedDTD[i].endsWithChar (';')) - { - const String parsed (getParameterEntity (tokenisedDTD[i].substring (1, tokenisedDTD[i].length() - 1))); - StringArray newToks; - newToks.addTokens (parsed, true); - - tokenisedDTD.remove (i); - - for (int j = newToks.size(); --j >= 0;) - tokenisedDTD.insert (i, newToks[j]); - } - } - } - - needToLoadDTD = false; - } - - for (int i = 0; i < tokenisedDTD.size(); ++i) - { - if (tokenisedDTD[i] == entity) - { - if (tokenisedDTD[i - 1].equalsIgnoreCase ("").trim().unquoted()); - - // check for sub-entities.. - int ampersand = ent.indexOfChar ('&'); - - while (ampersand >= 0) - { - const int semiColon = ent.indexOf (i + 1, ";"); - - if (semiColon < 0) - { - setLastError ("entity without terminating semi-colon", false); - break; - } - - const String resolved (expandEntity (ent.substring (i + 1, semiColon))); - - ent = ent.substring (0, ampersand) - + resolved - + ent.substring (semiColon + 1); - - ampersand = ent.indexOfChar (semiColon + 1, '&'); - } - - return ent; - } - } - } - - setLastError ("unknown entity", true); - - return entity; -} - -String XmlDocument::getParameterEntity (const String& entity) -{ - for (int i = 0; i < tokenisedDTD.size(); ++i) - { - if (tokenisedDTD[i] == entity - && tokenisedDTD [i - 1] == "%" - && tokenisedDTD [i - 2].equalsIgnoreCase ("")); - - if (ent.equalsIgnoreCase ("system")) - return getFileContents (tokenisedDTD [i + 2].trimCharactersAtEnd (">")); - else - return ent.trim().unquoted(); - } - } - - return entity; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_XmlDocument.cpp ***/ - - -/*** Start of inlined file: juce_XmlElement.cpp ***/ -BEGIN_JUCE_NAMESPACE - -XmlElement::XmlAttributeNode::XmlAttributeNode (const XmlAttributeNode& other) noexcept - : name (other.name), - value (other.value) -{ -} - -XmlElement::XmlAttributeNode::XmlAttributeNode (const String& name_, const String& value_) noexcept - : name (name_), - value (value_) -{ - #if JUCE_DEBUG - // this checks whether the attribute name string contains any illegal characters.. - for (String::CharPointerType t (name.getCharPointer()); ! t.isEmpty(); ++t) - jassert (t.isLetterOrDigit() || *t == '_' || *t == '-' || *t == ':'); - #endif -} - -inline bool XmlElement::XmlAttributeNode::hasName (const String& nameToMatch) const noexcept -{ - return name.equalsIgnoreCase (nameToMatch); -} - -XmlElement::XmlElement (const String& tagName_) noexcept - : tagName (tagName_) -{ - // the tag name mustn't be empty, or it'll look like a text element! - jassert (tagName_.containsNonWhitespaceChars()) - - // The tag can't contain spaces or other characters that would create invalid XML! - jassert (! tagName_.containsAnyOf (" <>/&")); -} - -XmlElement::XmlElement (int /*dummy*/) noexcept -{ -} - -XmlElement::XmlElement (const XmlElement& other) - : tagName (other.tagName) -{ - copyChildrenAndAttributesFrom (other); -} - -XmlElement& XmlElement::operator= (const XmlElement& other) -{ - if (this != &other) - { - removeAllAttributes(); - deleteAllChildElements(); - - tagName = other.tagName; - - copyChildrenAndAttributesFrom (other); - } - - return *this; -} - -void XmlElement::copyChildrenAndAttributesFrom (const XmlElement& other) -{ - jassert (firstChildElement.get() == nullptr); - firstChildElement.addCopyOfList (other.firstChildElement); - - jassert (attributes.get() == nullptr); - attributes.addCopyOfList (other.attributes); -} - -XmlElement::~XmlElement() noexcept -{ - firstChildElement.deleteAll(); - attributes.deleteAll(); -} - -namespace XmlOutputFunctions -{ - /*bool isLegalXmlCharSlow (const juce_wchar character) noexcept - { - if ((character >= 'a' && character <= 'z') - || (character >= 'A' && character <= 'Z') - || (character >= '0' && character <= '9')) - return true; - - const char* t = " .,;:-()_+=?!'#@[]/\\*%~{}$|"; - - do - { - if (((juce_wchar) (uint8) *t) == character) - return true; - } - while (*++t != 0); - - return false; - } - - void generateLegalCharConstants() - { - uint8 n[32] = { 0 }; - for (int i = 0; i < 256; ++i) - if (isLegalXmlCharSlow (i)) - n[i >> 3] |= (1 << (i & 7)); - - String s; - for (int i = 0; i < 32; ++i) - s << (int) n[i] << ", "; - - DBG (s); - }*/ - - bool isLegalXmlChar (const uint32 c) noexcept - { - static const unsigned char legalChars[] = { 0, 0, 0, 0, 187, 255, 255, 175, 255, 255, 255, 191, 254, 255, 255, 127 }; - - return c < sizeof (legalChars) * 8 - && (legalChars [c >> 3] & (1 << (c & 7))) != 0; - } - - void escapeIllegalXmlChars (OutputStream& outputStream, const String& text, const bool changeNewLines) - { - String::CharPointerType t (text.getCharPointer()); - - for (;;) - { - const uint32 character = (uint32) t.getAndAdvance(); - - if (character == 0) - break; - - if (isLegalXmlChar (character)) - { - outputStream << (char) character; - } - else - { - switch (character) - { - case '&': outputStream << "&"; break; - case '"': outputStream << """; break; - case '>': outputStream << ">"; break; - case '<': outputStream << "<"; break; - - case '\n': - case '\r': - if (! changeNewLines) - { - outputStream << (char) character; - break; - } - // Note: deliberate fall-through here! - default: - outputStream << "&#" << ((int) character) << ';'; - break; - } - } - } - } - - void writeSpaces (OutputStream& out, const int numSpaces) - { - out.writeRepeatedByte (' ', numSpaces); - } -} - -void XmlElement::writeElementAsText (OutputStream& outputStream, - const int indentationLevel, - const int lineWrapLength) const -{ - using namespace XmlOutputFunctions; - writeSpaces (outputStream, indentationLevel); - - if (! isTextElement()) - { - outputStream.writeByte ('<'); - outputStream << tagName; - - { - const int attIndent = indentationLevel + tagName.length() + 1; - int lineLen = 0; - - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - { - if (lineLen > lineWrapLength && indentationLevel >= 0) - { - outputStream << newLine; - writeSpaces (outputStream, attIndent); - lineLen = 0; - } - - const int64 startPos = outputStream.getPosition(); - outputStream.writeByte (' '); - outputStream << att->name; - outputStream.write ("=\"", 2); - escapeIllegalXmlChars (outputStream, att->value, true); - outputStream.writeByte ('"'); - lineLen += (int) (outputStream.getPosition() - startPos); - } - } - - if (firstChildElement != nullptr) - { - outputStream.writeByte ('>'); - - XmlElement* child = firstChildElement; - bool lastWasTextNode = false; - - while (child != nullptr) - { - if (child->isTextElement()) - { - escapeIllegalXmlChars (outputStream, child->getText(), false); - lastWasTextNode = true; - } - else - { - if (indentationLevel >= 0 && ! lastWasTextNode) - outputStream << newLine; - - child->writeElementAsText (outputStream, - lastWasTextNode ? 0 : (indentationLevel + (indentationLevel >= 0 ? 2 : 0)), lineWrapLength); - lastWasTextNode = false; - } - - child = child->getNextElement(); - } - - if (indentationLevel >= 0 && ! lastWasTextNode) - { - outputStream << newLine; - writeSpaces (outputStream, indentationLevel); - } - - outputStream.write ("'); - } - else - { - outputStream.write ("/>", 2); - } - } - else - { - escapeIllegalXmlChars (outputStream, getText(), false); - } -} - -String XmlElement::createDocument (const String& dtdToUse, - const bool allOnOneLine, - const bool includeXmlHeader, - const String& encodingType, - const int lineWrapLength) const -{ - MemoryOutputStream mem (2048); - writeToStream (mem, dtdToUse, allOnOneLine, includeXmlHeader, encodingType, lineWrapLength); - - return mem.toUTF8(); -} - -void XmlElement::writeToStream (OutputStream& output, - const String& dtdToUse, - const bool allOnOneLine, - const bool includeXmlHeader, - const String& encodingType, - const int lineWrapLength) const -{ - using namespace XmlOutputFunctions; - - if (includeXmlHeader) - { - output << ""; - - if (allOnOneLine) - output.writeByte (' '); - else - output << newLine << newLine; - } - - if (dtdToUse.isNotEmpty()) - { - output << dtdToUse; - - if (allOnOneLine) - output.writeByte (' '); - else - output << newLine; - } - - writeElementAsText (output, allOnOneLine ? -1 : 0, lineWrapLength); - - if (! allOnOneLine) - output << newLine; -} - -bool XmlElement::writeToFile (const File& file, - const String& dtdToUse, - const String& encodingType, - const int lineWrapLength) const -{ - if (file.hasWriteAccess()) - { - TemporaryFile tempFile (file); - ScopedPointer out (tempFile.getFile().createOutputStream()); - - if (out != nullptr) - { - writeToStream (*out, dtdToUse, false, true, encodingType, lineWrapLength); - out = nullptr; - - return tempFile.overwriteTargetFileWithTemporary(); - } - } - - return false; -} - -bool XmlElement::hasTagName (const String& tagNameWanted) const noexcept -{ - #if JUCE_DEBUG - // if debugging, check that the case is actually the same, because - // valid xml is case-sensitive, and although this lets it pass, it's - // better not to.. - if (tagName.equalsIgnoreCase (tagNameWanted)) - { - jassert (tagName == tagNameWanted); - return true; - } - else - { - return false; - } - #else - return tagName.equalsIgnoreCase (tagNameWanted); - #endif -} - -XmlElement* XmlElement::getNextElementWithTagName (const String& requiredTagName) const -{ - XmlElement* e = nextListItem; - - while (e != nullptr && ! e->hasTagName (requiredTagName)) - e = e->nextListItem; - - return e; -} - -int XmlElement::getNumAttributes() const noexcept -{ - return attributes.size(); -} - -const String& XmlElement::getAttributeName (const int index) const noexcept -{ - const XmlAttributeNode* const att = attributes [index]; - return att != nullptr ? att->name : String::empty; -} - -const String& XmlElement::getAttributeValue (const int index) const noexcept -{ - const XmlAttributeNode* const att = attributes [index]; - return att != nullptr ? att->value : String::empty; -} - -bool XmlElement::hasAttribute (const String& attributeName) const noexcept -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return true; - - return false; -} - -const String& XmlElement::getStringAttribute (const String& attributeName) const noexcept -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return att->value; - - return String::empty; -} - -String XmlElement::getStringAttribute (const String& attributeName, const String& defaultReturnValue) const -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return att->value; - - return defaultReturnValue; -} - -int XmlElement::getIntAttribute (const String& attributeName, const int defaultReturnValue) const -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return att->value.getIntValue(); - - return defaultReturnValue; -} - -double XmlElement::getDoubleAttribute (const String& attributeName, const double defaultReturnValue) const -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return att->value.getDoubleValue(); - - return defaultReturnValue; -} - -bool XmlElement::getBoolAttribute (const String& attributeName, const bool defaultReturnValue) const -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - { - if (att->hasName (attributeName)) - { - juce_wchar firstChar = att->value[0]; - - if (CharacterFunctions::isWhitespace (firstChar)) - firstChar = att->value.trimStart() [0]; - - return firstChar == '1' - || firstChar == 't' - || firstChar == 'y' - || firstChar == 'T' - || firstChar == 'Y'; - } - } - - return defaultReturnValue; -} - -bool XmlElement::compareAttribute (const String& attributeName, - const String& stringToCompareAgainst, - const bool ignoreCase) const noexcept -{ - for (const XmlAttributeNode* att = attributes; att != nullptr; att = att->nextListItem) - if (att->hasName (attributeName)) - return ignoreCase ? att->value.equalsIgnoreCase (stringToCompareAgainst) - : att->value == stringToCompareAgainst; - - return false; -} - -void XmlElement::setAttribute (const String& attributeName, const String& value) -{ - if (attributes == nullptr) - { - attributes = new XmlAttributeNode (attributeName, value); - } - else - { - XmlAttributeNode* att = attributes; - - for (;;) - { - if (att->hasName (attributeName)) - { - att->value = value; - break; - } - else if (att->nextListItem == nullptr) - { - att->nextListItem = new XmlAttributeNode (attributeName, value); - break; - } - - att = att->nextListItem; - } - } -} - -void XmlElement::setAttribute (const String& attributeName, const int number) -{ - setAttribute (attributeName, String (number)); -} - -void XmlElement::setAttribute (const String& attributeName, const double number) -{ - setAttribute (attributeName, String (number)); -} - -void XmlElement::removeAttribute (const String& attributeName) noexcept -{ - LinkedListPointer* att = &attributes; - - while (att->get() != nullptr) - { - if (att->get()->hasName (attributeName)) - { - delete att->removeNext(); - break; - } - - att = &(att->get()->nextListItem); - } -} - -void XmlElement::removeAllAttributes() noexcept -{ - attributes.deleteAll(); -} - -int XmlElement::getNumChildElements() const noexcept -{ - return firstChildElement.size(); -} - -XmlElement* XmlElement::getChildElement (const int index) const noexcept -{ - return firstChildElement [index].get(); -} - -XmlElement* XmlElement::getChildByName (const String& childName) const noexcept -{ - XmlElement* child = firstChildElement; - - while (child != nullptr) - { - if (child->hasTagName (childName)) - break; - - child = child->nextListItem; - } - - return child; -} - -void XmlElement::addChildElement (XmlElement* const newNode) noexcept -{ - if (newNode != nullptr) - firstChildElement.append (newNode); -} - -void XmlElement::insertChildElement (XmlElement* const newNode, - int indexToInsertAt) noexcept -{ - if (newNode != nullptr) - { - removeChildElement (newNode, false); - firstChildElement.insertAtIndex (indexToInsertAt, newNode); - } -} - -XmlElement* XmlElement::createNewChildElement (const String& childTagName) -{ - XmlElement* const newElement = new XmlElement (childTagName); - addChildElement (newElement); - return newElement; -} - -bool XmlElement::replaceChildElement (XmlElement* const currentChildElement, - XmlElement* const newNode) noexcept -{ - if (newNode != nullptr) - { - LinkedListPointer* const p = firstChildElement.findPointerTo (currentChildElement); - - if (p != nullptr) - { - if (currentChildElement != newNode) - delete p->replaceNext (newNode); - - return true; - } - } - - return false; -} - -void XmlElement::removeChildElement (XmlElement* const childToRemove, - const bool shouldDeleteTheChild) noexcept -{ - if (childToRemove != nullptr) - { - firstChildElement.remove (childToRemove); - - if (shouldDeleteTheChild) - delete childToRemove; - } -} - -bool XmlElement::isEquivalentTo (const XmlElement* const other, - const bool ignoreOrderOfAttributes) const noexcept -{ - if (this != other) - { - if (other == nullptr || tagName != other->tagName) - return false; - - if (ignoreOrderOfAttributes) - { - int totalAtts = 0; - const XmlAttributeNode* att = attributes; - - while (att != nullptr) - { - if (! other->compareAttribute (att->name, att->value)) - return false; - - att = att->nextListItem; - ++totalAtts; - } - - if (totalAtts != other->getNumAttributes()) - return false; - } - else - { - const XmlAttributeNode* thisAtt = attributes; - const XmlAttributeNode* otherAtt = other->attributes; - - for (;;) - { - if (thisAtt == nullptr || otherAtt == nullptr) - { - if (thisAtt == otherAtt) // both 0, so it's a match - break; - - return false; - } - - if (thisAtt->name != otherAtt->name - || thisAtt->value != otherAtt->value) - { - return false; - } - - thisAtt = thisAtt->nextListItem; - otherAtt = otherAtt->nextListItem; - } - } - - const XmlElement* thisChild = firstChildElement; - const XmlElement* otherChild = other->firstChildElement; - - for (;;) - { - if (thisChild == nullptr || otherChild == nullptr) - { - if (thisChild == otherChild) // both 0, so it's a match - break; - - return false; - } - - if (! thisChild->isEquivalentTo (otherChild, ignoreOrderOfAttributes)) - return false; - - thisChild = thisChild->nextListItem; - otherChild = otherChild->nextListItem; - } - } - - return true; -} - -void XmlElement::deleteAllChildElements() noexcept -{ - firstChildElement.deleteAll(); -} - -void XmlElement::deleteAllChildElementsWithTagName (const String& name) noexcept -{ - XmlElement* child = firstChildElement; - - while (child != nullptr) - { - XmlElement* const nextChild = child->nextListItem; - - if (child->hasTagName (name)) - removeChildElement (child, true); - - child = nextChild; - } -} - -bool XmlElement::containsChildElement (const XmlElement* const possibleChild) const noexcept -{ - return firstChildElement.contains (possibleChild); -} - -XmlElement* XmlElement::findParentElementOf (const XmlElement* const elementToLookFor) noexcept -{ - if (this == elementToLookFor || elementToLookFor == nullptr) - return nullptr; - - XmlElement* child = firstChildElement; - - while (child != nullptr) - { - if (elementToLookFor == child) - return this; - - XmlElement* const found = child->findParentElementOf (elementToLookFor); - - if (found != nullptr) - return found; - - child = child->nextListItem; - } - - return nullptr; -} - -void XmlElement::getChildElementsAsArray (XmlElement** elems) const noexcept -{ - firstChildElement.copyToArray (elems); -} - -void XmlElement::reorderChildElements (XmlElement** const elems, const int num) noexcept -{ - XmlElement* e = firstChildElement = elems[0]; - - for (int i = 1; i < num; ++i) - { - e->nextListItem = elems[i]; - e = e->nextListItem; - } - - e->nextListItem = nullptr; -} - -bool XmlElement::isTextElement() const noexcept -{ - return tagName.isEmpty(); -} - -static const String juce_xmltextContentAttributeName ("text"); - -const String& XmlElement::getText() const noexcept -{ - jassert (isTextElement()); // you're trying to get the text from an element that - // isn't actually a text element.. If this contains text sub-nodes, you - // probably want to use getAllSubText instead. - - return getStringAttribute (juce_xmltextContentAttributeName); -} - -void XmlElement::setText (const String& newText) -{ - if (isTextElement()) - setAttribute (juce_xmltextContentAttributeName, newText); - else - jassertfalse; // you can only change the text in a text element, not a normal one. -} - -String XmlElement::getAllSubText() const -{ - if (isTextElement()) - return getText(); - - String result; - String::Concatenator concatenator (result); - const XmlElement* child = firstChildElement; - - while (child != nullptr) - { - concatenator.append (child->getAllSubText()); - child = child->nextListItem; - } - - return result; -} - -String XmlElement::getChildElementAllSubText (const String& childTagName, - const String& defaultReturnValue) const -{ - const XmlElement* const child = getChildByName (childTagName); - - if (child != nullptr) - return child->getAllSubText(); - - return defaultReturnValue; -} - -XmlElement* XmlElement::createTextElement (const String& text) -{ - XmlElement* const e = new XmlElement ((int) 0); - e->setAttribute (juce_xmltextContentAttributeName, text); - return e; -} - -void XmlElement::addTextElement (const String& text) -{ - addChildElement (createTextElement (text)); -} - -void XmlElement::deleteAllTextElements() noexcept -{ - XmlElement* child = firstChildElement; - - while (child != nullptr) - { - XmlElement* const next = child->nextListItem; - - if (child->isTextElement()) - removeChildElement (child, true); - - child = next; - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_XmlElement.cpp ***/ - - -/*** Start of inlined file: juce_JSON.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class JSONParser -{ -public: - static Result parseAny (String::CharPointerType& t, var& result) - { - t = t.findEndOfWhitespace(); - String::CharPointerType t2 (t); - - switch (t2.getAndAdvance()) - { - case '{': t = t2; return parseObject (t, result); - case '[': t = t2; return parseArray (t, result); - case '"': t = t2; return parseString (t, result); - - case '-': - t2 = t2.findEndOfWhitespace(); - if (! CharacterFunctions::isDigit (*t2)) - break; - - t = t2; - return parseNumber (t, result, true); - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - return parseNumber (t, result, false); - - case 't': // "true" - if (t2.getAndAdvance() == 'r' && t2.getAndAdvance() == 'u' && t2.getAndAdvance() == 'e') - { - t = t2; - result = var (true); - return Result::ok(); - } - break; - - case 'f': // "false" - if (t2.getAndAdvance() == 'a' && t2.getAndAdvance() == 'l' - && t2.getAndAdvance() == 's' && t2.getAndAdvance() == 'e') - { - t = t2; - result = var (false); - return Result::ok(); - } - break; - - case 'n': // "null" - if (t2.getAndAdvance() == 'u' && t2.getAndAdvance() == 'l' && t2.getAndAdvance() == 'l') - { - t = t2; - result = var::null; - return Result::ok(); - } - break; - - default: - break; - } - - return createFail ("Syntax error", &t); - } - -private: - static Result createFail (const char* const message, const String::CharPointerType* location = nullptr) - { - String m (message); - if (location != nullptr) - m << ": \"" << String (*location, 20) << '"'; - - return Result::fail (m); - } - - static Result parseNumber (String::CharPointerType& t, var& result, const bool isNegative) - { - String::CharPointerType oldT (t); - - int64 intValue = t.getAndAdvance() - '0'; - jassert (intValue >= 0 && intValue < 10); - - for (;;) - { - String::CharPointerType previousChar (t); - const juce_wchar c = t.getAndAdvance(); - const int digit = ((int) c) - '0'; - - if (isPositiveAndBelow (digit, 10)) - { - intValue = intValue * 10 + digit; - continue; - } - - if (c == 'e' || c == 'E' || c == '.') - { - t = oldT; - const double asDouble = CharacterFunctions::readDoubleValue (t); - result = isNegative ? -asDouble : asDouble; - return Result::ok(); - } - - if (CharacterFunctions::isWhitespace (c) - || c == ',' || c == '}' || c == ']' || c == 0) - { - t = previousChar; - break; - } - - return createFail ("Syntax error in number", &oldT); - } - - const int64 correctedValue = isNegative ? -intValue : intValue; - - if ((intValue >> 31) != 0) - result = correctedValue; - else - result = (int) correctedValue; - - return Result::ok(); - } - - static Result parseObject (String::CharPointerType& t, var& result) - { - DynamicObject* const resultObject = new DynamicObject(); - result = resultObject; - NamedValueSet& resultProperties = resultObject->getProperties(); - - for (;;) - { - t = t.findEndOfWhitespace(); - - String::CharPointerType oldT (t); - const juce_wchar c = t.getAndAdvance(); - - if (c == '}') - break; - - if (c == 0) - return createFail ("Unexpected end-of-input in object declaration"); - - if (c == '"') - { - var propertyNameVar; - Result r (parseString (t, propertyNameVar)); - - if (r.failed()) - return r; - - const String propertyName (propertyNameVar.toString()); - - if (propertyName.isNotEmpty()) - { - t = t.findEndOfWhitespace(); - oldT = t; - - const juce_wchar c2 = t.getAndAdvance(); - if (c2 != ':') - return createFail ("Expected ':', but found", &oldT); - - resultProperties.set (propertyName, var::null); - var* propertyValue = resultProperties.getVarPointer (propertyName); - - Result r2 (parseAny (t, *propertyValue)); - - if (r2.failed()) - return r2; - - t = t.findEndOfWhitespace(); - oldT = t; - - const juce_wchar nextChar = t.getAndAdvance(); - - if (nextChar == ',') - continue; - else if (nextChar == '}') - break; - } - } - - return createFail ("Expected object member declaration, but found", &oldT); - } - - return Result::ok(); - } - - static Result parseArray (String::CharPointerType& t, var& result) - { - result = var (Array()); - Array* const destArray = result.getArray(); - - for (;;) - { - t = t.findEndOfWhitespace(); - - String::CharPointerType oldT (t); - const juce_wchar c = t.getAndAdvance(); - - if (c == ']') - break; - - if (c == 0) - return createFail ("Unexpected end-of-input in array declaration"); - - t = oldT; - destArray->add (var::null); - Result r (parseAny (t, destArray->getReference (destArray->size() - 1))); - - if (r.failed()) - return r; - - t = t.findEndOfWhitespace(); - oldT = t; - - const juce_wchar nextChar = t.getAndAdvance(); - - if (nextChar == ',') - continue; - else if (nextChar == ']') - break; - - return createFail ("Expected object array item, but found", &oldT); - } - - return Result::ok(); - } - - static Result parseString (String::CharPointerType& t, var& result) - { - Array buffer; - buffer.ensureStorageAllocated (256); - - for (;;) - { - juce_wchar c = t.getAndAdvance(); - - if (c == '"') - break; - - if (c == '\\') - { - c = t.getAndAdvance(); - - switch (c) - { - case '"': - case '\\': - case '/': break; - - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - - case 'u': - { - c = 0; - - for (int i = 4; --i >= 0;) - { - const int digitValue = CharacterFunctions::getHexDigitValue (t.getAndAdvance()); - if (digitValue < 0) - return createFail ("Syntax error in unicode escape sequence"); - - c = (juce_wchar) ((c << 4) + digitValue); - } - - break; - } - } - } - - if (c == 0) - return createFail ("Unexpected end-of-input in string constant"); - - buffer.add (c); - } - - buffer.add (0); - result = String (CharPointer_UTF32 (buffer.getRawDataPointer())); - return Result::ok(); - } -}; - -class JSONFormatter -{ -public: - static void write (OutputStream& out, const var& v, - const int indentLevel, const bool allOnOneLine) - { - if (v.isString()) - { - writeString (out, v.toString().getCharPointer()); - } - else if (v.isVoid()) - { - out << "null"; - } - else if (v.isBool()) - { - out << (static_cast (v) ? "true" : "false"); - } - else if (v.isArray()) - { - writeArray (out, *v.getArray(), indentLevel, allOnOneLine); - } - else if (v.isObject()) - { - DynamicObject* object = dynamic_cast (v.getObject()); - - jassert (object != nullptr); // Only DynamicObjects can be converted to JSON! - - writeObject (out, *object, indentLevel, allOnOneLine); - } - else - { - jassert (! v.isMethod()); // Can't convert an object with methods to JSON! - - out << v.toString(); - } - } - -private: - enum { indentSize = 2 }; - - static void writeEscapedChar (OutputStream& out, const unsigned short value) - { - out << "\\u" << String::toHexString ((int) value).paddedLeft ('0', 4); - } - - static void writeString (OutputStream& out, String::CharPointerType t) - { - out << '"'; - - for (;;) - { - const juce_wchar c (t.getAndAdvance()); - - switch (c) - { - case 0: out << '"'; return; - - case '\"': out << "\\\""; break; - case '\\': out << "\\\\"; break; - case '\b': out << "\\b"; break; - case '\f': out << "\\f"; break; - case '\t': out << "\\t"; break; - case '\r': out << "\\r"; break; - case '\n': out << "\\n"; break; - - default: - if (c >= 32 && c < 127) - { - out << (char) c; - } - else - { - if (CharPointer_UTF16::getBytesRequiredFor (c) > 2) - { - CharPointer_UTF16::CharType chars[2]; - CharPointer_UTF16 utf16 (chars); - utf16.write (c); - - for (int i = 0; i < 2; ++i) - writeEscapedChar (out, (unsigned short) chars[i]); - } - else - { - writeEscapedChar (out, (unsigned short) c); - } - } - - break; - } - } - } - - static void writeSpaces (OutputStream& out, int numSpaces) - { - out.writeRepeatedByte (' ', numSpaces); - } - - static void writeArray (OutputStream& out, const Array& array, - const int indentLevel, const bool allOnOneLine) - { - out << '['; - if (! allOnOneLine) - out << newLine; - - for (int i = 0; i < array.size(); ++i) - { - if (! allOnOneLine) - writeSpaces (out, indentLevel + indentSize); - - write (out, array.getReference(i), indentLevel + indentSize, allOnOneLine); - - if (i < array.size() - 1) - { - if (allOnOneLine) - out << ", "; - else - out << ',' << newLine; - } - else if (! allOnOneLine) - out << newLine; - } - - if (! allOnOneLine) - writeSpaces (out, indentLevel); - - out << ']'; - } - - static void writeObject (OutputStream& out, DynamicObject& object, - const int indentLevel, const bool allOnOneLine) - { - NamedValueSet& props = object.getProperties(); - - out << '{'; - if (! allOnOneLine) - out << newLine; - - LinkedListPointer* i = &(props.values); - - for (;;) - { - NamedValueSet::NamedValue* const v = i->get(); - - if (v == nullptr) - break; - - if (! allOnOneLine) - writeSpaces (out, indentLevel + indentSize); - - writeString (out, v->name); - out << ": "; - write (out, v->value, indentLevel + indentSize, allOnOneLine); - - if (v->nextListItem.get() != nullptr) - { - if (allOnOneLine) - out << ", "; - else - out << ',' << newLine; - } - else if (! allOnOneLine) - out << newLine; - - i = &(v->nextListItem); - } - - if (! allOnOneLine) - writeSpaces (out, indentLevel); - - out << '}'; - } -}; - -var JSON::parse (const String& text) -{ - var result; - String::CharPointerType t (text.getCharPointer()); - if (! JSONParser::parseAny (t, result)) - result = var::null; - - return result; -} - -var JSON::parse (InputStream& input) -{ - return parse (input.readEntireStreamAsString()); -} - -var JSON::parse (const File& file) -{ - return parse (file.loadFileAsString()); -} - -Result JSON::parse (const String& text, var& result) -{ - String::CharPointerType t (text.getCharPointer()); - return JSONParser::parseAny (t, result); -} - -String JSON::toString (const var& data, const bool allOnOneLine) -{ - MemoryOutputStream mo (1024); - JSONFormatter::write (mo, data, 0, allOnOneLine); - return mo.toString(); -} - -void JSON::writeToStream (OutputStream& output, const var& data, const bool allOnOneLine) -{ - JSONFormatter::write (output, data, 0, allOnOneLine); -} - -#if JUCE_UNIT_TESTS - -class JSONTests : public UnitTest -{ -public: - JSONTests() : UnitTest ("JSON") {} - - static String createRandomWideCharString (Random& r) - { - juce_wchar buffer[40] = { 0 }; - - for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) - { - if (r.nextBool()) - { - do - { - buffer[i] = (juce_wchar) (1 + r.nextInt (0x10ffff - 1)); - } - while (! CharPointer_UTF16::canRepresent (buffer[i])); - } - else - buffer[i] = (juce_wchar) (1 + r.nextInt (0xff)); - } - - return CharPointer_UTF32 (buffer); - } - - static String createRandomIdentifier (Random& r) - { - char buffer[30] = { 0 }; - - for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) - { - static const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-:"; - buffer[i] = chars [r.nextInt (sizeof (chars) - 1)]; - } - - return CharPointer_ASCII (buffer); - } - - static var createRandomVar (Random& r, int depth) - { - switch (r.nextInt (depth > 3 ? 6 : 8)) - { - case 0: return var::null; - case 1: return r.nextInt(); - case 2: return r.nextInt64(); - case 3: return r.nextBool(); - case 4: return r.nextDouble(); - case 5: return createRandomWideCharString (r); - - case 6: - { - var v (createRandomVar (r, depth + 1)); - - for (int i = 1 + r.nextInt (30); --i >= 0;) - v.append (createRandomVar (r, depth + 1)); - - return v; - } - - case 7: - { - DynamicObject* o = new DynamicObject(); - - for (int i = r.nextInt (30); --i >= 0;) - o->setProperty (createRandomIdentifier (r), createRandomVar (r, depth + 1)); - - return o; - } - - default: - return var::null; - } - } - - void runTest() - { - beginTest ("JSON"); - Random r; - r.setSeedRandomly(); - - expect (JSON::parse (String::empty) == var::null); - expect (JSON::parse ("{}").isObject()); - expect (JSON::parse ("[]").isArray()); - expect (JSON::parse ("1234").isInt()); - expect (JSON::parse ("12345678901234").isInt64()); - expect (JSON::parse ("1.123e3").isDouble()); - expect (JSON::parse ("-1234").isInt()); - expect (JSON::parse ("-12345678901234").isInt64()); - expect (JSON::parse ("-1.123e3").isDouble()); - - for (int i = 100; --i >= 0;) - { - var v; - - if (i > 0) - v = createRandomVar (r, 0); - - const bool oneLine = r.nextBool(); - String asString (JSON::toString (v, oneLine)); - var parsed = JSON::parse (asString); - String parsedString (JSON::toString (parsed, oneLine)); - expect (asString.isNotEmpty() && parsedString == asString); - } - } -}; - -static JSONTests JSONUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_JSON.cpp ***/ - - -/*** Start of inlined file: juce_ReadWriteLock.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ReadWriteLock::ReadWriteLock() noexcept - : numWaitingWriters (0), - numWriters (0), - writerThreadId (0) -{ -} - -ReadWriteLock::~ReadWriteLock() noexcept -{ - jassert (readerThreads.size() == 0); - jassert (numWriters == 0); -} - -void ReadWriteLock::enterRead() const noexcept -{ - const Thread::ThreadID threadId = Thread::getCurrentThreadId(); - const SpinLock::ScopedLockType sl (accessLock); - - for (;;) - { - jassert (readerThreads.size() % 2 == 0); - - int i; - for (i = 0; i < readerThreads.size(); i += 2) - if (readerThreads.getUnchecked(i) == threadId) - break; - - if (i < readerThreads.size() - || numWriters + numWaitingWriters == 0 - || (threadId == writerThreadId && numWriters > 0)) - { - if (i < readerThreads.size()) - { - readerThreads.set (i + 1, (Thread::ThreadID) (1 + (pointer_sized_int) readerThreads.getUnchecked (i + 1))); - } - else - { - readerThreads.add (threadId); - readerThreads.add ((Thread::ThreadID) 1); - } - - return; - } - - const SpinLock::ScopedUnlockType ul (accessLock); - waitEvent.wait (100); - } -} - -void ReadWriteLock::exitRead() const noexcept -{ - const Thread::ThreadID threadId = Thread::getCurrentThreadId(); - const SpinLock::ScopedLockType sl (accessLock); - - for (int i = 0; i < readerThreads.size(); i += 2) - { - if (readerThreads.getUnchecked(i) == threadId) - { - const pointer_sized_int newCount = ((pointer_sized_int) readerThreads.getUnchecked (i + 1)) - 1; - - if (newCount == 0) - { - readerThreads.removeRange (i, 2); - waitEvent.signal(); - } - else - { - readerThreads.set (i + 1, (Thread::ThreadID) newCount); - } - - return; - } - } - - jassertfalse; // unlocking a lock that wasn't locked.. -} - -void ReadWriteLock::enterWrite() const noexcept -{ - const Thread::ThreadID threadId = Thread::getCurrentThreadId(); - const SpinLock::ScopedLockType sl (accessLock); - - for (;;) - { - if (readerThreads.size() + numWriters == 0 - || threadId == writerThreadId - || (readerThreads.size() == 2 - && readerThreads.getUnchecked(0) == threadId)) - { - writerThreadId = threadId; - ++numWriters; - break; - } - - ++numWaitingWriters; - accessLock.exit(); - waitEvent.wait (100); - accessLock.enter(); - --numWaitingWriters; - } -} - -bool ReadWriteLock::tryEnterWrite() const noexcept -{ - const Thread::ThreadID threadId = Thread::getCurrentThreadId(); - const SpinLock::ScopedLockType sl (accessLock); - - if (readerThreads.size() + numWriters == 0 - || threadId == writerThreadId - || (readerThreads.size() == 2 - && readerThreads.getUnchecked(0) == threadId)) - { - writerThreadId = threadId; - ++numWriters; - return true; - } - - return false; -} - -void ReadWriteLock::exitWrite() const noexcept -{ - const SpinLock::ScopedLockType sl (accessLock); - - // check this thread actually had the lock.. - jassert (numWriters > 0 && writerThreadId == Thread::getCurrentThreadId()); - - if (--numWriters == 0) - { - writerThreadId = 0; - waitEvent.signal(); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ReadWriteLock.cpp ***/ - - -/*** Start of inlined file: juce_Thread.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class RunningThreadsList -{ -public: - RunningThreadsList() - { - } - - ~RunningThreadsList() - { - // Some threads are still running! Make sure you stop all your - // threads cleanly before your app quits! - jassert (threads.size() == 0); - } - - void add (Thread* const thread) - { - const SpinLock::ScopedLockType sl (lock); - jassert (! threads.contains (thread)); - threads.add (thread); - } - - void remove (Thread* const thread) - { - const SpinLock::ScopedLockType sl (lock); - jassert (threads.contains (thread)); - threads.removeValue (thread); - } - - int size() const noexcept - { - return threads.size(); - } - - Thread* getThreadWithID (const Thread::ThreadID targetID) const noexcept - { - const SpinLock::ScopedLockType sl (lock); - - for (int i = threads.size(); --i >= 0;) - { - Thread* const t = threads.getUnchecked(i); - - if (t->getThreadId() == targetID) - return t; - } - - return nullptr; - } - - void stopAll (const int timeOutMilliseconds) - { - signalAllThreadsToStop(); - - for (;;) - { - Thread* firstThread = getFirstThread(); - - if (firstThread != nullptr) - firstThread->stopThread (timeOutMilliseconds); - else - break; - } - } - - static RunningThreadsList& getInstance() - { - static RunningThreadsList runningThreads; - return runningThreads; - } - -private: - Array threads; - SpinLock lock; - - void signalAllThreadsToStop() - { - const SpinLock::ScopedLockType sl (lock); - - for (int i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->signalThreadShouldExit(); - } - - Thread* getFirstThread() const - { - const SpinLock::ScopedLockType sl (lock); - return threads.getFirst(); - } -}; - -void Thread::threadEntryPoint() -{ - RunningThreadsList::getInstance().add (this); - - JUCE_TRY - { - if (threadName_.isNotEmpty()) - setCurrentThreadName (threadName_); - - if (startSuspensionEvent_.wait (10000)) - { - jassert (getCurrentThreadId() == threadId_); - - if (affinityMask_ != 0) - setCurrentThreadAffinityMask (affinityMask_); - - run(); - } - } - JUCE_CATCH_ALL_ASSERT - - RunningThreadsList::getInstance().remove (this); - closeThreadHandle(); -} - -// used to wrap the incoming call from the platform-specific code -void JUCE_API juce_threadEntryPoint (void* userData) -{ - static_cast (userData)->threadEntryPoint(); -} - -Thread::Thread (const String& threadName) - : threadName_ (threadName), - threadHandle_ (nullptr), - threadId_ (0), - threadPriority_ (5), - affinityMask_ (0), - threadShouldExit_ (false) -{ -} - -Thread::~Thread() -{ - /* If your thread class's destructor has been called without first stopping the thread, that - means that this partially destructed object is still performing some work - and that's - probably a Bad Thing! - - To avoid this type of nastiness, always make sure you call stopThread() before or during - your subclass's destructor. - */ - jassert (! isThreadRunning()); - - stopThread (100); -} - -void Thread::startThread() -{ - const ScopedLock sl (startStopLock); - - threadShouldExit_ = false; - - if (threadHandle_ == nullptr) - { - launchThread(); - setThreadPriority (threadHandle_, threadPriority_); - startSuspensionEvent_.signal(); - } -} - -void Thread::startThread (const int priority) -{ - const ScopedLock sl (startStopLock); - - if (threadHandle_ == nullptr) - { - threadPriority_ = priority; - startThread(); - } - else - { - setPriority (priority); - } -} - -bool Thread::isThreadRunning() const -{ - return threadHandle_ != nullptr; -} - -void Thread::signalThreadShouldExit() -{ - threadShouldExit_ = true; -} - -bool Thread::waitForThreadToExit (const int timeOutMilliseconds) const -{ - // Doh! So how exactly do you expect this thread to wait for itself to stop?? - jassert (getThreadId() != getCurrentThreadId() || getCurrentThreadId() == 0); - - const int sleepMsPerIteration = 5; - int count = timeOutMilliseconds / sleepMsPerIteration; - - while (isThreadRunning()) - { - if (timeOutMilliseconds > 0 && --count < 0) - return false; - - sleep (sleepMsPerIteration); - } - - return true; -} - -void Thread::stopThread (const int timeOutMilliseconds) -{ - // agh! You can't stop the thread that's calling this method! How on earth - // would that work?? - jassert (getCurrentThreadId() != getThreadId()); - - const ScopedLock sl (startStopLock); - - if (isThreadRunning()) - { - signalThreadShouldExit(); - notify(); - - if (timeOutMilliseconds != 0) - waitForThreadToExit (timeOutMilliseconds); - - if (isThreadRunning()) - { - // very bad karma if this point is reached, as there are bound to be - // locks and events left in silly states when a thread is killed by force.. - jassertfalse; - Logger::writeToLog ("!! killing thread by force !!"); - - killThread(); - - RunningThreadsList::getInstance().remove (this); - threadHandle_ = nullptr; - threadId_ = 0; - } - } -} - -bool Thread::setPriority (const int priority) -{ - const ScopedLock sl (startStopLock); - - if (setThreadPriority (threadHandle_, priority)) - { - threadPriority_ = priority; - return true; - } - - return false; -} - -bool Thread::setCurrentThreadPriority (const int priority) -{ - return setThreadPriority (0, priority); -} - -void Thread::setAffinityMask (const uint32 affinityMask) -{ - affinityMask_ = affinityMask; -} - -bool Thread::wait (const int timeOutMilliseconds) const -{ - return defaultEvent_.wait (timeOutMilliseconds); -} - -void Thread::notify() const -{ - defaultEvent_.signal(); -} - -int Thread::getNumRunningThreads() -{ - return RunningThreadsList::getInstance().size(); -} - -Thread* Thread::getCurrentThread() -{ - return RunningThreadsList::getInstance().getThreadWithID (getCurrentThreadId()); -} - -void Thread::stopAllThreads (const int timeOutMilliseconds) -{ - RunningThreadsList::getInstance().stopAll (timeOutMilliseconds); -} - -void SpinLock::enter() const noexcept -{ - if (! tryEnter()) - { - for (int i = 20; --i >= 0;) - if (tryEnter()) - return; - - while (! tryEnter()) - Thread::yield(); - } -} - -#if JUCE_UNIT_TESTS - -class AtomicTests : public UnitTest -{ -public: - AtomicTests() : UnitTest ("Atomics") {} - - void runTest() - { - beginTest ("Misc"); - - char a1[7]; - expect (numElementsInArray(a1) == 7); - int a2[3]; - expect (numElementsInArray(a2) == 3); - - expect (ByteOrder::swap ((uint16) 0x1122) == 0x2211); - expect (ByteOrder::swap ((uint32) 0x11223344) == 0x44332211); - expect (ByteOrder::swap ((uint64) literal64bit (0x1122334455667788)) == literal64bit (0x8877665544332211)); - - beginTest ("Atomic int"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic unsigned int"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic int32"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic uint32"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic long"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic void*"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic int*"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic float"); - AtomicTester ::testFloat (*this); - #if ! JUCE_64BIT_ATOMICS_UNAVAILABLE // 64-bit intrinsics aren't available on some old platforms - beginTest ("Atomic int64"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic uint64"); - AtomicTester ::testInteger (*this); - beginTest ("Atomic double"); - AtomicTester ::testFloat (*this); - #endif - } - - template - class AtomicTester - { - public: - AtomicTester() {} - - static void testInteger (UnitTest& test) - { - Atomic a, b; - a.set ((Type) 10); - test.expect (a.value == (Type) 10); - test.expect (a.get() == (Type) 10); - a += (Type) 15; - test.expect (a.get() == (Type) 25); - a.memoryBarrier(); - a -= (Type) 5; - test.expect (a.get() == (Type) 20); - test.expect (++a == (Type) 21); - ++a; - test.expect (--a == (Type) 21); - test.expect (a.get() == (Type) 21); - a.memoryBarrier(); - - testFloat (test); - } - - static void testFloat (UnitTest& test) - { - Atomic a, b; - a = (Type) 21; - a.memoryBarrier(); - - /* These are some simple test cases to check the atomics - let me know - if any of these assertions fail on your system! - */ - test.expect (a.get() == (Type) 21); - test.expect (a.compareAndSetValue ((Type) 100, (Type) 50) == (Type) 21); - test.expect (a.get() == (Type) 21); - test.expect (a.compareAndSetValue ((Type) 101, a.get()) == (Type) 21); - test.expect (a.get() == (Type) 101); - test.expect (! a.compareAndSetBool ((Type) 300, (Type) 200)); - test.expect (a.get() == (Type) 101); - test.expect (a.compareAndSetBool ((Type) 200, a.get())); - test.expect (a.get() == (Type) 200); - - test.expect (a.exchange ((Type) 300) == (Type) 200); - test.expect (a.get() == (Type) 300); - - b = a; - test.expect (b.get() == a.get()); - } - }; -}; - -static AtomicTests atomicUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Thread.cpp ***/ - - -/*** Start of inlined file: juce_ThreadPool.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ThreadPoolJob::ThreadPoolJob (const String& name) - : jobName (name), - pool (nullptr), - shouldStop (false), - isActive (false), - shouldBeDeleted (false) -{ -} - -ThreadPoolJob::~ThreadPoolJob() -{ - // you mustn't delete a job while it's still in a pool! Use ThreadPool::removeJob() - // to remove it first! - jassert (pool == nullptr || ! pool->contains (this)); -} - -String ThreadPoolJob::getJobName() const -{ - return jobName; -} - -void ThreadPoolJob::setJobName (const String& newName) -{ - jobName = newName; -} - -void ThreadPoolJob::signalJobShouldExit() -{ - shouldStop = true; -} - -class ThreadPool::ThreadPoolThread : public Thread -{ -public: - ThreadPoolThread (ThreadPool& pool_) - : Thread ("Pool"), - pool (pool_), - busy (false) - { - } - - void run() - { - while (! threadShouldExit()) - { - if (! pool.runNextJob()) - wait (500); - } - } - -private: - ThreadPool& pool; - bool volatile busy; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ThreadPoolThread); -}; - -ThreadPool::ThreadPool (const int numThreads, - const bool startThreadsOnlyWhenNeeded, - const int stopThreadsWhenNotUsedTimeoutMs) - : threadStopTimeout (stopThreadsWhenNotUsedTimeoutMs), - priority (5) -{ - jassert (numThreads > 0); // not much point having one of these with no threads in it. - - for (int i = jmax (1, numThreads); --i >= 0;) - threads.add (new ThreadPoolThread (*this)); - - if (! startThreadsOnlyWhenNeeded) - for (int i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->startThread (priority); -} - -ThreadPool::~ThreadPool() -{ - removeAllJobs (true, 4000); - - int i; - for (i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->signalThreadShouldExit(); - - for (i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->stopThread (500); -} - -void ThreadPool::addJob (ThreadPoolJob* const job) -{ - jassert (job != nullptr); - jassert (job->pool == nullptr); - - if (job->pool == nullptr) - { - job->pool = this; - job->shouldStop = false; - job->isActive = false; - - { - const ScopedLock sl (lock); - jobs.add (job); - - int numRunning = 0; - - for (int i = threads.size(); --i >= 0;) - if (threads.getUnchecked(i)->isThreadRunning() && ! threads.getUnchecked(i)->threadShouldExit()) - ++numRunning; - - if (numRunning < threads.size()) - { - bool startedOne = false; - int n = 1000; - - while (--n >= 0 && ! startedOne) - { - for (int i = threads.size(); --i >= 0;) - { - if (! threads.getUnchecked(i)->isThreadRunning()) - { - threads.getUnchecked(i)->startThread (priority); - startedOne = true; - break; - } - } - - if (! startedOne) - Thread::sleep (2); - } - } - } - - for (int i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->notify(); - } -} - -int ThreadPool::getNumJobs() const -{ - return jobs.size(); -} - -ThreadPoolJob* ThreadPool::getJob (const int index) const -{ - const ScopedLock sl (lock); - return jobs [index]; -} - -bool ThreadPool::contains (const ThreadPoolJob* const job) const -{ - const ScopedLock sl (lock); - return jobs.contains (const_cast (job)); -} - -bool ThreadPool::isJobRunning (const ThreadPoolJob* const job) const -{ - const ScopedLock sl (lock); - return jobs.contains (const_cast (job)) && job->isActive; -} - -bool ThreadPool::waitForJobToFinish (const ThreadPoolJob* const job, - const int timeOutMs) const -{ - if (job != nullptr) - { - const uint32 start = Time::getMillisecondCounter(); - - while (contains (job)) - { - if (timeOutMs >= 0 && Time::getMillisecondCounter() >= start + timeOutMs) - return false; - - jobFinishedSignal.wait (2); - } - } - - return true; -} - -bool ThreadPool::removeJob (ThreadPoolJob* const job, - const bool interruptIfRunning, - const int timeOutMs) -{ - bool dontWait = true; - - if (job != nullptr) - { - const ScopedLock sl (lock); - - if (jobs.contains (job)) - { - if (job->isActive) - { - if (interruptIfRunning) - job->signalJobShouldExit(); - - dontWait = false; - } - else - { - jobs.removeValue (job); - job->pool = nullptr; - } - } - } - - return dontWait || waitForJobToFinish (job, timeOutMs); -} - -bool ThreadPool::removeAllJobs (const bool interruptRunningJobs, - const int timeOutMs, - const bool deleteInactiveJobs, - ThreadPool::JobSelector* selectedJobsToRemove) -{ - Array jobsToWaitFor; - - { - const ScopedLock sl (lock); - - for (int i = jobs.size(); --i >= 0;) - { - ThreadPoolJob* const job = jobs.getUnchecked(i); - - if (selectedJobsToRemove == nullptr || selectedJobsToRemove->isJobSuitable (job)) - { - if (job->isActive) - { - jobsToWaitFor.add (job); - - if (interruptRunningJobs) - job->signalJobShouldExit(); - } - else - { - jobs.remove (i); - - if (deleteInactiveJobs) - delete job; - else - job->pool = nullptr; - } - } - } - } - - const uint32 start = Time::getMillisecondCounter(); - - for (;;) - { - for (int i = jobsToWaitFor.size(); --i >= 0;) - if (! isJobRunning (jobsToWaitFor.getUnchecked (i))) - jobsToWaitFor.remove (i); - - if (jobsToWaitFor.size() == 0) - break; - - if (timeOutMs >= 0 && Time::getMillisecondCounter() >= start + timeOutMs) - return false; - - jobFinishedSignal.wait (20); - } - - return true; -} - -StringArray ThreadPool::getNamesOfAllJobs (const bool onlyReturnActiveJobs) const -{ - StringArray s; - const ScopedLock sl (lock); - - for (int i = 0; i < jobs.size(); ++i) - { - const ThreadPoolJob* const job = jobs.getUnchecked(i); - if (job->isActive || ! onlyReturnActiveJobs) - s.add (job->getJobName()); - } - - return s; -} - -bool ThreadPool::setThreadPriorities (const int newPriority) -{ - bool ok = true; - - if (priority != newPriority) - { - priority = newPriority; - - for (int i = threads.size(); --i >= 0;) - if (! threads.getUnchecked(i)->setPriority (newPriority)) - ok = false; - } - - return ok; -} - -bool ThreadPool::runNextJob() -{ - ThreadPoolJob* job = nullptr; - - { - const ScopedLock sl (lock); - - for (int i = 0; i < jobs.size(); ++i) - { - job = jobs[i]; - - if (job != nullptr && ! (job->isActive || job->shouldStop)) - break; - - job = nullptr; - } - - if (job != nullptr) - job->isActive = true; - - } - - if (job != nullptr) - { - JUCE_TRY - { - ThreadPoolJob::JobStatus result = job->runJob(); - - lastJobEndTime = Time::getApproximateMillisecondCounter(); - - const ScopedLock sl (lock); - - if (jobs.contains (job)) - { - job->isActive = false; - - if (result != ThreadPoolJob::jobNeedsRunningAgain || job->shouldStop) - { - job->pool = nullptr; - job->shouldStop = true; - jobs.removeValue (job); - - if (result == ThreadPoolJob::jobHasFinishedAndShouldBeDeleted) - delete job; - - jobFinishedSignal.signal(); - } - else - { - // move the job to the end of the queue if it wants another go - jobs.move (jobs.indexOf (job), -1); - } - } - } -#if JUCE_CATCH_UNHANDLED_EXCEPTIONS - catch (...) - { - const ScopedLock sl (lock); - jobs.removeValue (job); - } -#endif - } - else - { - if (threadStopTimeout > 0 - && Time::getApproximateMillisecondCounter() > lastJobEndTime + threadStopTimeout) - { - const ScopedLock sl (lock); - - if (jobs.size() == 0) - for (int i = threads.size(); --i >= 0;) - threads.getUnchecked(i)->signalThreadShouldExit(); - } - else - { - return false; - } - } - - return true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ThreadPool.cpp ***/ - - -/*** Start of inlined file: juce_TimeSliceThread.cpp ***/ -BEGIN_JUCE_NAMESPACE - -TimeSliceThread::TimeSliceThread (const String& threadName) - : Thread (threadName), - clientBeingCalled (nullptr) -{ -} - -TimeSliceThread::~TimeSliceThread() -{ - stopThread (2000); -} - -void TimeSliceThread::addTimeSliceClient (TimeSliceClient* const client, int millisecondsBeforeStarting) -{ - if (client != nullptr) - { - const ScopedLock sl (listLock); - client->nextCallTime = Time::getCurrentTime() + RelativeTime::milliseconds (millisecondsBeforeStarting); - clients.addIfNotAlreadyThere (client); - notify(); - } -} - -void TimeSliceThread::removeTimeSliceClient (TimeSliceClient* const client) -{ - const ScopedLock sl1 (listLock); - - // if there's a chance we're in the middle of calling this client, we need to - // also lock the outer lock.. - if (clientBeingCalled == client) - { - const ScopedUnlock ul (listLock); // unlock first to get the order right.. - - const ScopedLock sl2 (callbackLock); - const ScopedLock sl3 (listLock); - - clients.removeValue (client); - } - else - { - clients.removeValue (client); - } -} - -int TimeSliceThread::getNumClients() const -{ - return clients.size(); -} - -TimeSliceClient* TimeSliceThread::getClient (const int i) const -{ - const ScopedLock sl (listLock); - return clients [i]; -} - -TimeSliceClient* TimeSliceThread::getNextClient (int index) const -{ - Time soonest; - TimeSliceClient* client = nullptr; - - for (int i = clients.size(); --i >= 0;) - { - TimeSliceClient* const c = clients.getUnchecked ((i + index) % clients.size()); - - if (client == nullptr || c->nextCallTime < soonest) - { - client = c; - soonest = c->nextCallTime; - } - } - - return client; -} - -void TimeSliceThread::run() -{ - int index = 0; - - while (! threadShouldExit()) - { - int timeToWait = 500; - - { - Time nextClientTime; - - { - const ScopedLock sl2 (listLock); - - index = clients.size() > 0 ? ((index + 1) % clients.size()) : 0; - - TimeSliceClient* const firstClient = getNextClient (index); - if (firstClient != nullptr) - nextClientTime = firstClient->nextCallTime; - } - - const Time now (Time::getCurrentTime()); - - if (nextClientTime > now) - { - timeToWait = (int) jmin ((int64) 500, (nextClientTime - now).inMilliseconds()); - } - else - { - timeToWait = index == 0 ? 1 : 0; - - const ScopedLock sl (callbackLock); - - { - const ScopedLock sl2 (listLock); - clientBeingCalled = getNextClient (index); - } - - if (clientBeingCalled != nullptr) - { - const int msUntilNextCall = clientBeingCalled->useTimeSlice(); - - const ScopedLock sl2 (listLock); - - if (msUntilNextCall >= 0) - clientBeingCalled->nextCallTime += RelativeTime::milliseconds (msUntilNextCall); - else - clients.removeValue (clientBeingCalled); - - clientBeingCalled = nullptr; - } - } - } - - if (timeToWait > 0) - wait (timeToWait); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_TimeSliceThread.cpp ***/ - -#endif - -#if JUCE_BUILD_MISC - -/*** Start of inlined file: juce_ValueTree.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class ValueTree::SetPropertyAction : public UndoableAction -{ -public: - SetPropertyAction (const SharedObjectPtr& target_, const Identifier& name_, - const var& newValue_, const var& oldValue_, - const bool isAddingNewProperty_, const bool isDeletingProperty_) - : target (target_), name (name_), newValue (newValue_), oldValue (oldValue_), - isAddingNewProperty (isAddingNewProperty_), isDeletingProperty (isDeletingProperty_) - { - } - - bool perform() - { - jassert (! (isAddingNewProperty && target->hasProperty (name))); - - if (isDeletingProperty) - target->removeProperty (name, nullptr); - else - target->setProperty (name, newValue, nullptr); - - return true; - } - - bool undo() - { - if (isAddingNewProperty) - target->removeProperty (name, nullptr); - else - target->setProperty (name, oldValue, nullptr); - - return true; - } - - int getSizeInUnits() - { - return (int) sizeof (*this); //xxx should be more accurate - } - - UndoableAction* createCoalescedAction (UndoableAction* nextAction) - { - if (! (isAddingNewProperty || isDeletingProperty)) - { - SetPropertyAction* next = dynamic_cast (nextAction); - - if (next != nullptr && next->target == target && next->name == name - && ! (next->isAddingNewProperty || next->isDeletingProperty)) - { - return new SetPropertyAction (target, name, next->newValue, oldValue, false, false); - } - } - - return nullptr; - } - -private: - const SharedObjectPtr target; - const Identifier name; - const var newValue; - var oldValue; - const bool isAddingNewProperty : 1, isDeletingProperty : 1; - - JUCE_DECLARE_NON_COPYABLE (SetPropertyAction); -}; - -class ValueTree::AddOrRemoveChildAction : public UndoableAction -{ -public: - AddOrRemoveChildAction (const SharedObjectPtr& target_, const int childIndex_, - const SharedObjectPtr& newChild_) - : target (target_), - child (newChild_ != nullptr ? newChild_ : target_->children [childIndex_]), - childIndex (childIndex_), - isDeleting (newChild_ == nullptr) - { - jassert (child != nullptr); - } - - bool perform() - { - if (isDeleting) - target->removeChild (childIndex, nullptr); - else - target->addChild (child, childIndex, nullptr); - - return true; - } - - bool undo() - { - if (isDeleting) - { - target->addChild (child, childIndex, nullptr); - } - else - { - // If you hit this, it seems that your object's state is getting confused - probably - // because you've interleaved some undoable and non-undoable operations? - jassert (childIndex < target->children.size()); - target->removeChild (childIndex, nullptr); - } - - return true; - } - - int getSizeInUnits() - { - return (int) sizeof (*this); //xxx should be more accurate - } - -private: - const SharedObjectPtr target, child; - const int childIndex; - const bool isDeleting; - - JUCE_DECLARE_NON_COPYABLE (AddOrRemoveChildAction); -}; - -class ValueTree::MoveChildAction : public UndoableAction -{ -public: - MoveChildAction (const SharedObjectPtr& parent_, - const int startIndex_, const int endIndex_) - : parent (parent_), - startIndex (startIndex_), - endIndex (endIndex_) - { - } - - bool perform() - { - parent->moveChild (startIndex, endIndex, nullptr); - return true; - } - - bool undo() - { - parent->moveChild (endIndex, startIndex, nullptr); - return true; - } - - int getSizeInUnits() - { - return (int) sizeof (*this); //xxx should be more accurate - } - - UndoableAction* createCoalescedAction (UndoableAction* nextAction) - { - MoveChildAction* next = dynamic_cast (nextAction); - - if (next != nullptr && next->parent == parent && next->startIndex == endIndex) - return new MoveChildAction (parent, startIndex, next->endIndex); - - return nullptr; - } - -private: - const SharedObjectPtr parent; - const int startIndex, endIndex; - - JUCE_DECLARE_NON_COPYABLE (MoveChildAction); -}; - -ValueTree::SharedObject::SharedObject (const Identifier& type_) - : type (type_), parent (nullptr) -{ -} - -ValueTree::SharedObject::SharedObject (const SharedObject& other) - : type (other.type), properties (other.properties), parent (nullptr) -{ - for (int i = 0; i < other.children.size(); ++i) - { - SharedObject* const child = new SharedObject (*other.children.getUnchecked(i)); - child->parent = this; - children.add (child); - } -} - -ValueTree::SharedObject::~SharedObject() -{ - jassert (parent == nullptr); // this should never happen unless something isn't obeying the ref-counting! - - for (int i = children.size(); --i >= 0;) - { - const SharedObjectPtr c (children.getUnchecked(i)); - c->parent = nullptr; - children.remove (i); - c->sendParentChangeMessage(); - } -} - -void ValueTree::SharedObject::sendPropertyChangeMessage (ValueTree& tree, const Identifier& property) -{ - for (int i = valueTreesWithListeners.size(); --i >= 0;) - { - ValueTree* const v = valueTreesWithListeners[i]; - if (v != nullptr) - v->listeners.call (&ValueTree::Listener::valueTreePropertyChanged, tree, property); - } -} - -void ValueTree::SharedObject::sendPropertyChangeMessage (const Identifier& property) -{ - ValueTree tree (this); - - for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent) - t->sendPropertyChangeMessage (tree, property); -} - -void ValueTree::SharedObject::sendChildAddedMessage (ValueTree& tree, ValueTree& child) -{ - for (int i = valueTreesWithListeners.size(); --i >= 0;) - { - ValueTree* const v = valueTreesWithListeners[i]; - if (v != nullptr) - v->listeners.call (&ValueTree::Listener::valueTreeChildAdded, tree, child); - } -} - -void ValueTree::SharedObject::sendChildAddedMessage (ValueTree child) -{ - ValueTree tree (this); - - for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent) - t->sendChildAddedMessage (tree, child); -} - -void ValueTree::SharedObject::sendChildRemovedMessage (ValueTree& tree, ValueTree& child) -{ - for (int i = valueTreesWithListeners.size(); --i >= 0;) - { - ValueTree* const v = valueTreesWithListeners[i]; - if (v != nullptr) - v->listeners.call (&ValueTree::Listener::valueTreeChildRemoved, tree, child); - } -} - -void ValueTree::SharedObject::sendChildRemovedMessage (ValueTree child) -{ - ValueTree tree (this); - - for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent) - t->sendChildRemovedMessage (tree, child); -} - -void ValueTree::SharedObject::sendChildOrderChangedMessage (ValueTree& tree) -{ - for (int i = valueTreesWithListeners.size(); --i >= 0;) - { - ValueTree* const v = valueTreesWithListeners[i]; - if (v != nullptr) - v->listeners.call (&ValueTree::Listener::valueTreeChildOrderChanged, tree); - } -} - -void ValueTree::SharedObject::sendChildOrderChangedMessage() -{ - ValueTree tree (this); - - for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent) - t->sendChildOrderChangedMessage (tree); -} - -void ValueTree::SharedObject::sendParentChangeMessage() -{ - ValueTree tree (this); - - int i; - for (i = children.size(); --i >= 0;) - { - SharedObject* const t = children[i]; - if (t != nullptr) - t->sendParentChangeMessage(); - } - - for (i = valueTreesWithListeners.size(); --i >= 0;) - { - ValueTree* const v = valueTreesWithListeners[i]; - if (v != nullptr) - v->listeners.call (&ValueTree::Listener::valueTreeParentChanged, tree); - } -} - -const var& ValueTree::SharedObject::getProperty (const Identifier& name) const -{ - return properties [name]; -} - -var ValueTree::SharedObject::getProperty (const Identifier& name, const var& defaultReturnValue) const -{ - return properties.getWithDefault (name, defaultReturnValue); -} - -void ValueTree::SharedObject::setProperty (const Identifier& name, const var& newValue, UndoManager* const undoManager) -{ - if (undoManager == nullptr) - { - if (properties.set (name, newValue)) - sendPropertyChangeMessage (name); - } - else - { - const var* const existingValue = properties.getVarPointer (name); - - if (existingValue != nullptr) - { - if (*existingValue != newValue) - undoManager->perform (new SetPropertyAction (this, name, newValue, *existingValue, false, false)); - } - else - { - undoManager->perform (new SetPropertyAction (this, name, newValue, var::null, true, false)); - } - } -} - -bool ValueTree::SharedObject::hasProperty (const Identifier& name) const -{ - return properties.contains (name); -} - -void ValueTree::SharedObject::removeProperty (const Identifier& name, UndoManager* const undoManager) -{ - if (undoManager == nullptr) - { - if (properties.remove (name)) - sendPropertyChangeMessage (name); - } - else - { - if (properties.contains (name)) - undoManager->perform (new SetPropertyAction (this, name, var::null, properties [name], false, true)); - } -} - -void ValueTree::SharedObject::removeAllProperties (UndoManager* const undoManager) -{ - if (undoManager == nullptr) - { - while (properties.size() > 0) - { - const Identifier name (properties.getName (properties.size() - 1)); - properties.remove (name); - sendPropertyChangeMessage (name); - } - } - else - { - for (int i = properties.size(); --i >= 0;) - undoManager->perform (new SetPropertyAction (this, properties.getName(i), var::null, properties.getValueAt(i), false, true)); - } -} - -ValueTree ValueTree::SharedObject::getChildWithName (const Identifier& typeToMatch) const -{ - for (int i = 0; i < children.size(); ++i) - if (children.getUnchecked(i)->type == typeToMatch) - return ValueTree (children.getUnchecked(i).getObject()); - - return ValueTree::invalid; -} - -ValueTree ValueTree::SharedObject::getOrCreateChildWithName (const Identifier& typeToMatch, UndoManager* undoManager) -{ - for (int i = 0; i < children.size(); ++i) - if (children.getUnchecked(i)->type == typeToMatch) - return ValueTree (children.getUnchecked(i).getObject()); - - SharedObject* const newObject = new SharedObject (typeToMatch); - addChild (newObject, -1, undoManager); - return ValueTree (newObject); - -} - -ValueTree ValueTree::SharedObject::getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const -{ - for (int i = 0; i < children.size(); ++i) - if (children.getUnchecked(i)->getProperty (propertyName) == propertyValue) - return ValueTree (children.getUnchecked(i).getObject()); - - return ValueTree::invalid; -} - -bool ValueTree::SharedObject::isAChildOf (const SharedObject* const possibleParent) const -{ - const SharedObject* p = parent; - - while (p != nullptr) - { - if (p == possibleParent) - return true; - - p = p->parent; - } - - return false; -} - -int ValueTree::SharedObject::indexOf (const ValueTree& child) const -{ - return children.indexOf (child.object); -} - -void ValueTree::SharedObject::addChild (SharedObject* child, int index, UndoManager* const undoManager) -{ - if (child != nullptr && child->parent != this) - { - if (child != this && ! isAChildOf (child)) - { - // You should always make sure that a child is removed from its previous parent before - // adding it somewhere else - otherwise, it's ambiguous as to whether a different - // undomanager should be used when removing it from its current parent.. - jassert (child->parent == nullptr); - - if (child->parent != nullptr) - { - jassert (child->parent->children.indexOf (child) >= 0); - child->parent->removeChild (child->parent->children.indexOf (child), undoManager); - } - - if (undoManager == nullptr) - { - children.insert (index, child); - child->parent = this; - sendChildAddedMessage (ValueTree (child)); - child->sendParentChangeMessage(); - } - else - { - if (index < 0) - index = children.size(); - - undoManager->perform (new AddOrRemoveChildAction (this, index, child)); - } - } - else - { - // You're attempting to create a recursive loop! A node - // can't be a child of one of its own children! - jassertfalse; - } - } -} - -void ValueTree::SharedObject::removeChild (const int childIndex, UndoManager* const undoManager) -{ - const SharedObjectPtr child (children [childIndex]); - - if (child != nullptr) - { - if (undoManager == nullptr) - { - children.remove (childIndex); - child->parent = nullptr; - sendChildRemovedMessage (ValueTree (child)); - child->sendParentChangeMessage(); - } - else - { - undoManager->perform (new AddOrRemoveChildAction (this, childIndex, nullptr)); - } - } -} - -void ValueTree::SharedObject::removeAllChildren (UndoManager* const undoManager) -{ - while (children.size() > 0) - removeChild (children.size() - 1, undoManager); -} - -void ValueTree::SharedObject::moveChild (int currentIndex, int newIndex, UndoManager* undoManager) -{ - // The source index must be a valid index! - jassert (isPositiveAndBelow (currentIndex, children.size())); - - if (currentIndex != newIndex - && isPositiveAndBelow (currentIndex, children.size())) - { - if (undoManager == nullptr) - { - children.move (currentIndex, newIndex); - sendChildOrderChangedMessage(); - } - else - { - if (! isPositiveAndBelow (newIndex, children.size())) - newIndex = children.size() - 1; - - undoManager->perform (new MoveChildAction (this, currentIndex, newIndex)); - } - } -} - -void ValueTree::SharedObject::reorderChildren (const ReferenceCountedArray & newOrder, UndoManager* undoManager) -{ - jassert (newOrder.size() == children.size()); - - if (undoManager == nullptr) - { - children = newOrder; - sendChildOrderChangedMessage(); - } - else - { - for (int i = 0; i < children.size(); ++i) - { - const SharedObjectPtr child (newOrder.getUnchecked(i)); - - if (children.getUnchecked(i) != child) - { - const int oldIndex = children.indexOf (child); - jassert (oldIndex >= 0); - moveChild (oldIndex, i, undoManager); - } - } - } -} - -bool ValueTree::SharedObject::isEquivalentTo (const SharedObject& other) const -{ - if (type != other.type - || properties.size() != other.properties.size() - || children.size() != other.children.size() - || properties != other.properties) - return false; - - for (int i = 0; i < children.size(); ++i) - if (! children.getUnchecked(i)->isEquivalentTo (*other.children.getUnchecked(i))) - return false; - - return true; -} - -ValueTree::ValueTree() noexcept -{ -} - -const ValueTree ValueTree::invalid; - -ValueTree::ValueTree (const Identifier& type_) - : object (new ValueTree::SharedObject (type_)) -{ - jassert (type_.toString().isNotEmpty()); // All objects should be given a sensible type name! -} - -ValueTree::ValueTree (SharedObject* const object_) - : object (object_) -{ -} - -ValueTree::ValueTree (const ValueTree& other) - : object (other.object) -{ -} - -ValueTree& ValueTree::operator= (const ValueTree& other) -{ - if (listeners.size() > 0) - { - if (object != nullptr) - object->valueTreesWithListeners.removeValue (this); - - if (other.object != nullptr) - other.object->valueTreesWithListeners.add (this); - } - - object = other.object; - - return *this; -} - -ValueTree::~ValueTree() -{ - if (listeners.size() > 0 && object != nullptr) - object->valueTreesWithListeners.removeValue (this); -} - -bool ValueTree::operator== (const ValueTree& other) const noexcept -{ - return object == other.object; -} - -bool ValueTree::operator!= (const ValueTree& other) const noexcept -{ - return object != other.object; -} - -bool ValueTree::isEquivalentTo (const ValueTree& other) const -{ - return object == other.object - || (object != nullptr && other.object != nullptr && object->isEquivalentTo (*other.object)); -} - -ValueTree ValueTree::createCopy() const -{ - return ValueTree (object != nullptr ? new SharedObject (*object) : nullptr); -} - -bool ValueTree::hasType (const Identifier& typeName) const -{ - return object != nullptr && object->type == typeName; -} - -Identifier ValueTree::getType() const -{ - return object != nullptr ? object->type : Identifier(); -} - -ValueTree ValueTree::getParent() const -{ - return ValueTree (object != nullptr ? object->parent : (SharedObject*) nullptr); -} - -ValueTree ValueTree::getSibling (const int delta) const -{ - if (object == nullptr || object->parent == nullptr) - return invalid; - - const int index = object->parent->indexOf (*this) + delta; - return ValueTree (object->parent->children [index].getObject()); -} - -const var& ValueTree::operator[] (const Identifier& name) const -{ - return object == nullptr ? var::null : object->getProperty (name); -} - -const var& ValueTree::getProperty (const Identifier& name) const -{ - return object == nullptr ? var::null : object->getProperty (name); -} - -var ValueTree::getProperty (const Identifier& name, const var& defaultReturnValue) const -{ - return object == nullptr ? defaultReturnValue : object->getProperty (name, defaultReturnValue); -} - -void ValueTree::setProperty (const Identifier& name, const var& newValue, UndoManager* const undoManager) -{ - jassert (name.toString().isNotEmpty()); - - if (object != nullptr && name.toString().isNotEmpty()) - object->setProperty (name, newValue, undoManager); -} - -bool ValueTree::hasProperty (const Identifier& name) const -{ - return object != nullptr && object->hasProperty (name); -} - -void ValueTree::removeProperty (const Identifier& name, UndoManager* const undoManager) -{ - if (object != nullptr) - object->removeProperty (name, undoManager); -} - -void ValueTree::removeAllProperties (UndoManager* const undoManager) -{ - if (object != nullptr) - object->removeAllProperties (undoManager); -} - -int ValueTree::getNumProperties() const -{ - return object == nullptr ? 0 : object->properties.size(); -} - -Identifier ValueTree::getPropertyName (const int index) const -{ - return object == nullptr ? Identifier() - : object->properties.getName (index); -} - -class ValueTreePropertyValueSource : public Value::ValueSource, - public ValueTree::Listener -{ -public: - ValueTreePropertyValueSource (const ValueTree& tree_, - const Identifier& property_, - UndoManager* const undoManager_) - : tree (tree_), - property (property_), - undoManager (undoManager_) - { - tree.addListener (this); - } - - ~ValueTreePropertyValueSource() - { - tree.removeListener (this); - } - - var getValue() const - { - return tree [property]; - } - - void setValue (const var& newValue) - { - tree.setProperty (property, newValue, undoManager); - } - - void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged, const Identifier& changedProperty) - { - if (tree == treeWhosePropertyHasChanged && property == changedProperty) - sendChangeMessage (false); - } - - void valueTreeChildAdded (ValueTree&, ValueTree&) {} - void valueTreeChildRemoved (ValueTree&, ValueTree&) {} - void valueTreeChildOrderChanged (ValueTree&) {} - void valueTreeParentChanged (ValueTree&) {} - -private: - ValueTree tree; - const Identifier property; - UndoManager* const undoManager; - - ValueTreePropertyValueSource& operator= (const ValueTreePropertyValueSource&); -}; - -Value ValueTree::getPropertyAsValue (const Identifier& name, UndoManager* const undoManager) const -{ - return Value (new ValueTreePropertyValueSource (*this, name, undoManager)); -} - -int ValueTree::getNumChildren() const -{ - return object == nullptr ? 0 : object->children.size(); -} - -ValueTree ValueTree::getChild (int index) const -{ - return ValueTree (object != nullptr ? (SharedObject*) object->children [index] : (SharedObject*) nullptr); -} - -ValueTree ValueTree::getChildWithName (const Identifier& type) const -{ - return object != nullptr ? object->getChildWithName (type) : ValueTree::invalid; -} - -ValueTree ValueTree::getOrCreateChildWithName (const Identifier& type, UndoManager* undoManager) -{ - return object != nullptr ? object->getOrCreateChildWithName (type, undoManager) : ValueTree::invalid; -} - -ValueTree ValueTree::getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const -{ - return object != nullptr ? object->getChildWithProperty (propertyName, propertyValue) : ValueTree::invalid; -} - -bool ValueTree::isAChildOf (const ValueTree& possibleParent) const -{ - return object != nullptr && object->isAChildOf (possibleParent.object); -} - -int ValueTree::indexOf (const ValueTree& child) const -{ - return object != nullptr ? object->indexOf (child) : -1; -} - -void ValueTree::addChild (const ValueTree& child, int index, UndoManager* const undoManager) -{ - if (object != nullptr) - object->addChild (child.object, index, undoManager); -} - -void ValueTree::removeChild (const int childIndex, UndoManager* const undoManager) -{ - if (object != nullptr) - object->removeChild (childIndex, undoManager); -} - -void ValueTree::removeChild (const ValueTree& child, UndoManager* const undoManager) -{ - if (object != nullptr) - object->removeChild (object->children.indexOf (child.object), undoManager); -} - -void ValueTree::removeAllChildren (UndoManager* const undoManager) -{ - if (object != nullptr) - object->removeAllChildren (undoManager); -} - -void ValueTree::moveChild (int currentIndex, int newIndex, UndoManager* undoManager) -{ - if (object != nullptr) - object->moveChild (currentIndex, newIndex, undoManager); -} - -void ValueTree::addListener (Listener* listener) -{ - if (listener != nullptr) - { - if (listeners.size() == 0 && object != nullptr) - object->valueTreesWithListeners.add (this); - - listeners.add (listener); - } -} - -void ValueTree::removeListener (Listener* listener) -{ - listeners.remove (listener); - - if (listeners.size() == 0 && object != nullptr) - object->valueTreesWithListeners.removeValue (this); -} - -XmlElement* ValueTree::SharedObject::createXml() const -{ - XmlElement* const xml = new XmlElement (type.toString()); - properties.copyToXmlAttributes (*xml); - - for (int i = 0; i < children.size(); ++i) - xml->addChildElement (children.getUnchecked(i)->createXml()); - - return xml; -} - -XmlElement* ValueTree::createXml() const -{ - return object != nullptr ? object->createXml() : nullptr; -} - -ValueTree ValueTree::fromXml (const XmlElement& xml) -{ - ValueTree v (xml.getTagName()); - v.object->properties.setFromXmlAttributes (xml); - - forEachXmlChildElement (xml, e) - v.addChild (fromXml (*e), -1, nullptr); - - return v; -} - -void ValueTree::writeToStream (OutputStream& output) -{ - output.writeString (getType().toString()); - - const int numProps = getNumProperties(); - output.writeCompressedInt (numProps); - - int i; - for (i = 0; i < numProps; ++i) - { - const Identifier name (getPropertyName(i)); - output.writeString (name.toString()); - getProperty(name).writeToStream (output); - } - - const int numChildren = getNumChildren(); - output.writeCompressedInt (numChildren); - - for (i = 0; i < numChildren; ++i) - getChild (i).writeToStream (output); -} - -ValueTree ValueTree::readFromStream (InputStream& input) -{ - const String type (input.readString()); - - if (type.isEmpty()) - return ValueTree::invalid; - - ValueTree v (type); - - const int numProps = input.readCompressedInt(); - - if (numProps < 0) - { - jassertfalse; // trying to read corrupted data! - return v; - } - - int i; - for (i = 0; i < numProps; ++i) - { - const String name (input.readString()); - jassert (name.isNotEmpty()); - const var value (var::readFromStream (input)); - v.object->properties.set (name, value); - } - - const int numChildren = input.readCompressedInt(); - - for (i = 0; i < numChildren; ++i) - { - ValueTree child (readFromStream (input)); - - v.object->children.add (child.object); - child.object->parent = v.object; - } - - return v; -} - -ValueTree ValueTree::readFromData (const void* const data, const size_t numBytes) -{ - MemoryInputStream in (data, numBytes, false); - return readFromStream (in); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ValueTree.cpp ***/ - - - -/*** Start of inlined file: juce_Value.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Value::ValueSource::ValueSource() -{ -} - -Value::ValueSource::~ValueSource() -{ -} - -void Value::ValueSource::sendChangeMessage (const bool synchronous) -{ - if (synchronous) - { - // (hold a local reference to this object in case it's freed during the callbacks) - const ReferenceCountedObjectPtr localRef (this); - - for (int i = valuesWithListeners.size(); --i >= 0;) - { - Value* const v = valuesWithListeners[i]; - - if (v != nullptr) - v->callListeners(); - } - } - else - { - triggerAsyncUpdate(); - } -} - -void Value::ValueSource::handleAsyncUpdate() -{ - sendChangeMessage (true); -} - -class SimpleValueSource : public Value::ValueSource -{ -public: - SimpleValueSource() - { - } - - SimpleValueSource (const var& initialValue) - : value (initialValue) - { - } - - var getValue() const - { - return value; - } - - void setValue (const var& newValue) - { - if (! newValue.equalsWithSameType (value)) - { - value = newValue; - sendChangeMessage (false); - } - } - -private: - var value; - - JUCE_DECLARE_NON_COPYABLE (SimpleValueSource); -}; - -Value::Value() - : value (new SimpleValueSource()) -{ -} - -Value::Value (ValueSource* const value_) - : value (value_) -{ - jassert (value_ != nullptr); -} - -Value::Value (const var& initialValue) - : value (new SimpleValueSource (initialValue)) -{ -} - -Value::Value (const Value& other) - : value (other.value) -{ -} - -Value& Value::operator= (const Value& other) -{ - value = other.value; - return *this; -} - -Value::~Value() -{ - if (listeners.size() > 0) - value->valuesWithListeners.removeValue (this); -} - -var Value::getValue() const -{ - return value->getValue(); -} - -Value::operator var() const -{ - return getValue(); -} - -void Value::setValue (const var& newValue) -{ - value->setValue (newValue); -} - -String Value::toString() const -{ - return value->getValue().toString(); -} - -Value& Value::operator= (const var& newValue) -{ - value->setValue (newValue); - return *this; -} - -void Value::referTo (const Value& valueToReferTo) -{ - if (valueToReferTo.value != value) - { - if (listeners.size() > 0) - { - value->valuesWithListeners.removeValue (this); - valueToReferTo.value->valuesWithListeners.add (this); - } - - value = valueToReferTo.value; - callListeners(); - } -} - -bool Value::refersToSameSourceAs (const Value& other) const -{ - return value == other.value; -} - -bool Value::operator== (const Value& other) const -{ - return value == other.value || value->getValue() == other.getValue(); -} - -bool Value::operator!= (const Value& other) const -{ - return value != other.value && value->getValue() != other.getValue(); -} - -void Value::addListener (ValueListener* const listener) -{ - if (listener != nullptr) - { - if (listeners.size() == 0) - value->valuesWithListeners.add (this); - - listeners.add (listener); - } -} - -void Value::removeListener (ValueListener* const listener) -{ - listeners.remove (listener); - - if (listeners.size() == 0) - value->valuesWithListeners.removeValue (this); -} - -void Value::callListeners() -{ - Value v (*this); // (create a copy in case this gets deleted by a callback) - listeners.call (&ValueListener::valueChanged, v); -} - -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value) -{ - return stream << value.toString(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Value.cpp ***/ - - -/*** Start of inlined file: juce_Application.cpp ***/ -BEGIN_JUCE_NAMESPACE - -#if JUCE_MAC - extern void juce_initialiseMacMainMenu(); -#endif - -class AppBroadcastCallback : public ActionListener -{ -public: - AppBroadcastCallback() { MessageManager::getInstance()->registerBroadcastListener (this); } - ~AppBroadcastCallback() { MessageManager::getInstance()->deregisterBroadcastListener (this); } - - void actionListenerCallback (const String& message) - { - JUCEApplication* const app = JUCEApplication::getInstance(); - - if (app != 0 && message.startsWith (app->getApplicationName() + "/")) - app->anotherInstanceStarted (message.substring (app->getApplicationName().length() + 1)); - } -}; - -JUCEApplication::JUCEApplication() - : appReturnValue (0), - stillInitialising (true) -{ - jassert (isStandaloneApp() && appInstance == nullptr); - appInstance = this; -} - -JUCEApplication::~JUCEApplication() -{ - if (appLock != nullptr) - { - appLock->exit(); - appLock = nullptr; - } - - jassert (appInstance == this); - appInstance = nullptr; -} - -JUCEApplication::CreateInstanceFunction JUCEApplication::createInstance = 0; -JUCEApplication* JUCEApplication::appInstance = nullptr; - -bool JUCEApplication::moreThanOneInstanceAllowed() -{ - return true; -} - -void JUCEApplication::anotherInstanceStarted (const String&) -{ -} - -void JUCEApplication::systemRequestedQuit() -{ - quit(); -} - -void JUCEApplication::quit() -{ - MessageManager::getInstance()->stopDispatchLoop(); -} - -void JUCEApplication::setApplicationReturnValue (const int newReturnValue) noexcept -{ - appReturnValue = newReturnValue; -} - -void JUCEApplication::unhandledException (const std::exception*, - const String&, - const int) -{ - jassertfalse; -} - -void JUCEApplication::sendUnhandledException (const std::exception* const e, - const char* const sourceFile, - const int lineNumber) -{ - if (appInstance != nullptr) - appInstance->unhandledException (e, sourceFile, lineNumber); -} - -ApplicationCommandTarget* JUCEApplication::getNextCommandTarget() -{ - return nullptr; -} - -void JUCEApplication::getAllCommands (Array & commands) -{ - commands.add (StandardApplicationCommandIDs::quit); -} - -void JUCEApplication::getCommandInfo (const CommandID commandID, ApplicationCommandInfo& result) -{ - if (commandID == StandardApplicationCommandIDs::quit) - { - result.setInfo (TRANS("Quit"), - TRANS("Quits the application"), - "Application", - 0); - - result.defaultKeypresses.add (KeyPress ('q', ModifierKeys::commandModifier, 0)); - } -} - -bool JUCEApplication::perform (const InvocationInfo& info) -{ - if (info.commandID == StandardApplicationCommandIDs::quit) - { - systemRequestedQuit(); - return true; - } - - return false; -} - -bool JUCEApplication::initialiseApp (const String& commandLine) -{ - commandLineParameters = commandLine.trim(); - - #if ! JUCE_IOS - jassert (appLock == nullptr); // initialiseApp must only be called once! - - if (! moreThanOneInstanceAllowed()) - { - appLock = new InterProcessLock ("juceAppLock_" + getApplicationName()); - - if (! appLock->enter(0)) - { - appLock = nullptr; - MessageManager::broadcastMessage (getApplicationName() + "/" + commandLineParameters); - - DBG ("Another instance is running - quitting..."); - return false; - } - } - #endif - - // let the app do its setting-up.. - initialise (commandLineParameters); - - #if JUCE_MAC - juce_initialiseMacMainMenu(); // needs to be called after the app object has created, to get its name - #endif - - #if ! JUCE_IOS - broadcastCallback = new AppBroadcastCallback(); - #endif - - stillInitialising = false; - return true; -} - -int JUCEApplication::shutdownApp() -{ - jassert (appInstance == this); - - broadcastCallback = nullptr; - - JUCE_TRY - { - // give the app a chance to clean up.. - shutdown(); - } - JUCE_CATCH_EXCEPTION - - return getApplicationReturnValue(); -} - -// This is called on the Mac and iOS where the OS doesn't allow the stack to unwind on shutdown.. -void JUCEApplication::appWillTerminateByForce() -{ - { - const ScopedPointer app (JUCEApplication::getInstance()); - - if (app != nullptr) - app->shutdownApp(); - } - - shutdownJuce_GUI(); -} - -#if ! JUCE_ANDROID -int JUCEApplication::main (const String& commandLine) -{ - ScopedJuceInitialiser_GUI libraryInitialiser; - jassert (createInstance != nullptr); - int returnCode = 0; - - { - const ScopedPointer app (createInstance()); - - if (! app->initialiseApp (commandLine)) - return 0; - - JUCE_TRY - { - // loop until a quit message is received.. - MessageManager::getInstance()->runDispatchLoop(); - } - JUCE_CATCH_EXCEPTION - - returnCode = app->shutdownApp(); - } - - return returnCode; -} - -#if JUCE_IOS - extern int juce_iOSMain (int argc, const char* argv[]); -#endif - -#if ! JUCE_WINDOWS - extern const char* juce_Argv0; -#endif - -#if JUCE_MAC - extern void initialiseNSApplication(); -#endif - -int JUCEApplication::main (int argc, const char* argv[]) -{ - JUCE_AUTORELEASEPOOL - - #if JUCE_MAC - initialiseNSApplication(); - #endif - - #if ! JUCE_WINDOWS - jassert (createInstance != nullptr); - juce_Argv0 = argv[0]; - #endif - - #if JUCE_IOS - return juce_iOSMain (argc, argv); - #else - String cmd; - for (int i = 1; i < argc; ++i) - cmd << argv[i] << ' '; - - return JUCEApplication::main (cmd); - #endif -} -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Application.cpp ***/ - - -/*** Start of inlined file: juce_ApplicationCommandInfo.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ApplicationCommandInfo::ApplicationCommandInfo (const CommandID commandID_) noexcept - : commandID (commandID_), - flags (0) -{ -} - -void ApplicationCommandInfo::setInfo (const String& shortName_, - const String& description_, - const String& categoryName_, - const int flags_) noexcept -{ - shortName = shortName_; - description = description_; - categoryName = categoryName_; - flags = flags_; -} - -void ApplicationCommandInfo::setActive (const bool b) noexcept -{ - if (b) - flags &= ~isDisabled; - else - flags |= isDisabled; -} - -void ApplicationCommandInfo::setTicked (const bool b) noexcept -{ - if (b) - flags |= isTicked; - else - flags &= ~isTicked; -} - -void ApplicationCommandInfo::addDefaultKeypress (const int keyCode, const ModifierKeys& modifiers) noexcept -{ - defaultKeypresses.add (KeyPress (keyCode, modifiers, 0)); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ApplicationCommandInfo.cpp ***/ - - -/*** Start of inlined file: juce_ApplicationCommandManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ApplicationCommandManager::ApplicationCommandManager() - : firstTarget (nullptr) -{ - keyMappings = new KeyPressMappingSet (this); - - Desktop::getInstance().addFocusChangeListener (this); -} - -ApplicationCommandManager::~ApplicationCommandManager() -{ - Desktop::getInstance().removeFocusChangeListener (this); - keyMappings = nullptr; -} - -void ApplicationCommandManager::clearCommands() -{ - commands.clear(); - keyMappings->clearAllKeyPresses(); - triggerAsyncUpdate(); -} - -void ApplicationCommandManager::registerCommand (const ApplicationCommandInfo& newCommand) -{ - // zero isn't a valid command ID! - jassert (newCommand.commandID != 0); - - // the name isn't optional! - jassert (newCommand.shortName.isNotEmpty()); - - if (getCommandForID (newCommand.commandID) == 0) - { - ApplicationCommandInfo* const newInfo = new ApplicationCommandInfo (newCommand); - newInfo->flags &= ~ApplicationCommandInfo::isTicked; - commands.add (newInfo); - - keyMappings->resetToDefaultMapping (newCommand.commandID); - - triggerAsyncUpdate(); - } - else - { - // trying to re-register the same command with different parameters? - jassert (newCommand.shortName == getCommandForID (newCommand.commandID)->shortName - && (newCommand.description == getCommandForID (newCommand.commandID)->description || newCommand.description.isEmpty()) - && newCommand.categoryName == getCommandForID (newCommand.commandID)->categoryName - && newCommand.defaultKeypresses == getCommandForID (newCommand.commandID)->defaultKeypresses - && (newCommand.flags & (ApplicationCommandInfo::wantsKeyUpDownCallbacks | ApplicationCommandInfo::hiddenFromKeyEditor | ApplicationCommandInfo::readOnlyInKeyEditor)) - == (getCommandForID (newCommand.commandID)->flags & (ApplicationCommandInfo::wantsKeyUpDownCallbacks | ApplicationCommandInfo::hiddenFromKeyEditor | ApplicationCommandInfo::readOnlyInKeyEditor))); - } -} - -void ApplicationCommandManager::registerAllCommandsForTarget (ApplicationCommandTarget* target) -{ - if (target != nullptr) - { - Array commandIDs; - target->getAllCommands (commandIDs); - - for (int i = 0; i < commandIDs.size(); ++i) - { - ApplicationCommandInfo info (commandIDs.getUnchecked(i)); - target->getCommandInfo (info.commandID, info); - - registerCommand (info); - } - } -} - -void ApplicationCommandManager::removeCommand (const CommandID commandID) -{ - for (int i = commands.size(); --i >= 0;) - { - if (commands.getUnchecked (i)->commandID == commandID) - { - commands.remove (i); - triggerAsyncUpdate(); - - const Array keys (keyMappings->getKeyPressesAssignedToCommand (commandID)); - - for (int j = keys.size(); --j >= 0;) - keyMappings->removeKeyPress (keys.getReference (j)); - } - } -} - -void ApplicationCommandManager::commandStatusChanged() -{ - triggerAsyncUpdate(); -} - -const ApplicationCommandInfo* ApplicationCommandManager::getCommandForID (const CommandID commandID) const noexcept -{ - for (int i = commands.size(); --i >= 0;) - if (commands.getUnchecked(i)->commandID == commandID) - return commands.getUnchecked(i); - - return nullptr; -} - -String ApplicationCommandManager::getNameOfCommand (const CommandID commandID) const noexcept -{ - const ApplicationCommandInfo* const ci = getCommandForID (commandID); - - return ci != nullptr ? ci->shortName : String::empty; -} - -String ApplicationCommandManager::getDescriptionOfCommand (const CommandID commandID) const noexcept -{ - const ApplicationCommandInfo* const ci = getCommandForID (commandID); - - return ci != nullptr ? (ci->description.isNotEmpty() ? ci->description : ci->shortName) - : String::empty; -} - -StringArray ApplicationCommandManager::getCommandCategories() const -{ - StringArray s; - - for (int i = 0; i < commands.size(); ++i) - s.addIfNotAlreadyThere (commands.getUnchecked(i)->categoryName, false); - - return s; -} - -Array ApplicationCommandManager::getCommandsInCategory (const String& categoryName) const -{ - Array results; - - for (int i = 0; i < commands.size(); ++i) - if (commands.getUnchecked(i)->categoryName == categoryName) - results.add (commands.getUnchecked(i)->commandID); - - return results; -} - -bool ApplicationCommandManager::invokeDirectly (const CommandID commandID, const bool asynchronously) -{ - ApplicationCommandTarget::InvocationInfo info (commandID); - info.invocationMethod = ApplicationCommandTarget::InvocationInfo::direct; - - return invoke (info, asynchronously); -} - -bool ApplicationCommandManager::invoke (const ApplicationCommandTarget::InvocationInfo& info_, const bool asynchronously) -{ - // This call isn't thread-safe for use from a non-UI thread without locking the message - // manager first.. - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - ApplicationCommandInfo commandInfo (0); - ApplicationCommandTarget* const target = getTargetForCommand (info_.commandID, commandInfo); - - if (target == nullptr) - return false; - - ApplicationCommandTarget::InvocationInfo info (info_); - info.commandFlags = commandInfo.flags; - - sendListenerInvokeCallback (info); - - const bool ok = target->invoke (info, asynchronously); - - commandStatusChanged(); - - return ok; -} - -ApplicationCommandTarget* ApplicationCommandManager::getFirstCommandTarget (const CommandID) -{ - return firstTarget != nullptr ? firstTarget - : findDefaultComponentTarget(); -} - -void ApplicationCommandManager::setFirstCommandTarget (ApplicationCommandTarget* const newTarget) noexcept -{ - firstTarget = newTarget; -} - -ApplicationCommandTarget* ApplicationCommandManager::getTargetForCommand (const CommandID commandID, - ApplicationCommandInfo& upToDateInfo) -{ - ApplicationCommandTarget* target = getFirstCommandTarget (commandID); - - if (target == nullptr) - target = JUCEApplication::getInstance(); - - if (target != nullptr) - target = target->getTargetForCommand (commandID); - - if (target != nullptr) - target->getCommandInfo (commandID, upToDateInfo); - - return target; -} - -ApplicationCommandTarget* ApplicationCommandManager::findTargetForComponent (Component* c) -{ - ApplicationCommandTarget* target = dynamic_cast (c); - - if (target == nullptr && c != nullptr) - // (unable to use the syntax findParentComponentOfClass () because of a VC6 compiler bug) - target = c->findParentComponentOfClass ((ApplicationCommandTarget*) nullptr); - - return target; -} - -ApplicationCommandTarget* ApplicationCommandManager::findDefaultComponentTarget() -{ - Component* c = Component::getCurrentlyFocusedComponent(); - - if (c == nullptr) - { - TopLevelWindow* const activeWindow = TopLevelWindow::getActiveTopLevelWindow(); - - if (activeWindow != nullptr) - { - c = activeWindow->getPeer()->getLastFocusedSubcomponent(); - - if (c == nullptr) - c = activeWindow; - } - } - - if (c == nullptr && Process::isForegroundProcess()) - { - // getting a bit desperate now - try all desktop comps.. - for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;) - { - ApplicationCommandTarget* const target - = findTargetForComponent (Desktop::getInstance().getComponent (i) - ->getPeer()->getLastFocusedSubcomponent()); - - if (target != nullptr) - return target; - } - } - - if (c != nullptr) - { - ResizableWindow* const resizableWindow = dynamic_cast (c); - - // if we're focused on a ResizableWindow, chances are that it's the content - // component that really should get the event. And if not, the event will - // still be passed up to the top level window anyway, so let's send it to the - // content comp. - if (resizableWindow != nullptr && resizableWindow->getContentComponent() != nullptr) - c = resizableWindow->getContentComponent(); - - ApplicationCommandTarget* const target = findTargetForComponent (c); - - if (target != nullptr) - return target; - } - - return JUCEApplication::getInstance(); -} - -void ApplicationCommandManager::addListener (ApplicationCommandManagerListener* const listener) -{ - listeners.add (listener); -} - -void ApplicationCommandManager::removeListener (ApplicationCommandManagerListener* const listener) -{ - listeners.remove (listener); -} - -void ApplicationCommandManager::sendListenerInvokeCallback (const ApplicationCommandTarget::InvocationInfo& info) -{ - listeners.call (&ApplicationCommandManagerListener::applicationCommandInvoked, info); -} - -void ApplicationCommandManager::handleAsyncUpdate() -{ - listeners.call (&ApplicationCommandManagerListener::applicationCommandListChanged); -} - -void ApplicationCommandManager::globalFocusChanged (Component*) -{ - commandStatusChanged(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ApplicationCommandManager.cpp ***/ - - -/*** Start of inlined file: juce_ApplicationCommandTarget.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ApplicationCommandTarget::ApplicationCommandTarget() -{ -} - -ApplicationCommandTarget::~ApplicationCommandTarget() -{ - messageInvoker = nullptr; -} - -bool ApplicationCommandTarget::tryToInvoke (const InvocationInfo& info, const bool async) -{ - if (isCommandActive (info.commandID)) - { - if (async) - { - if (messageInvoker == nullptr) - messageInvoker = new CommandTargetMessageInvoker (this); - - messageInvoker->postMessage (new Message (0, 0, 0, new ApplicationCommandTarget::InvocationInfo (info))); - return true; - } - else - { - const bool success = perform (info); - - jassert (success); // hmm - your target should have been able to perform this command. If it can't - // do it at the moment for some reason, it should clear the 'isActive' flag when it - // returns the command's info. - return success; - } - } - - return false; -} - -ApplicationCommandTarget* ApplicationCommandTarget::findFirstTargetParentComponent() -{ - Component* c = dynamic_cast (this); - - if (c != nullptr) - // (unable to use the syntax findParentComponentOfClass () because of a VC6 compiler bug) - return c->findParentComponentOfClass ((ApplicationCommandTarget*) nullptr); - - return nullptr; -} - -ApplicationCommandTarget* ApplicationCommandTarget::getTargetForCommand (const CommandID commandID) -{ - ApplicationCommandTarget* target = this; - int depth = 0; - - while (target != nullptr) - { - Array commandIDs; - target->getAllCommands (commandIDs); - - if (commandIDs.contains (commandID)) - return target; - - target = target->getNextCommandTarget(); - - ++depth; - jassert (depth < 100); // could be a recursive command chain?? - jassert (target != this); // definitely a recursive command chain! - - if (depth > 100 || target == this) - break; - } - - if (target == nullptr) - { - target = JUCEApplication::getInstance(); - - if (target != nullptr) - { - Array commandIDs; - target->getAllCommands (commandIDs); - - if (commandIDs.contains (commandID)) - return target; - } - } - - return nullptr; -} - -bool ApplicationCommandTarget::isCommandActive (const CommandID commandID) -{ - ApplicationCommandInfo info (commandID); - info.flags = ApplicationCommandInfo::isDisabled; - - getCommandInfo (commandID, info); - - return (info.flags & ApplicationCommandInfo::isDisabled) == 0; -} - -bool ApplicationCommandTarget::invoke (const InvocationInfo& info, const bool async) -{ - ApplicationCommandTarget* target = this; - int depth = 0; - - while (target != nullptr) - { - if (target->tryToInvoke (info, async)) - return true; - - target = target->getNextCommandTarget(); - - ++depth; - jassert (depth < 100); // could be a recursive command chain?? - jassert (target != this); // definitely a recursive command chain! - - if (depth > 100 || target == this) - break; - } - - if (target == nullptr) - { - target = JUCEApplication::getInstance(); - - if (target != nullptr) - return target->tryToInvoke (info, async); - } - - return false; -} - -bool ApplicationCommandTarget::invokeDirectly (const CommandID commandID, const bool asynchronously) -{ - ApplicationCommandTarget::InvocationInfo info (commandID); - info.invocationMethod = ApplicationCommandTarget::InvocationInfo::direct; - - return invoke (info, asynchronously); -} - -ApplicationCommandTarget::InvocationInfo::InvocationInfo (const CommandID commandID_) - : commandID (commandID_), - commandFlags (0), - invocationMethod (direct), - originatingComponent (nullptr), - isKeyDown (false), - millisecsSinceKeyPressed (0) -{ -} - -ApplicationCommandTarget::CommandTargetMessageInvoker::CommandTargetMessageInvoker (ApplicationCommandTarget* const owner_) - : owner (owner_) -{ -} - -ApplicationCommandTarget::CommandTargetMessageInvoker::~CommandTargetMessageInvoker() -{ -} - -void ApplicationCommandTarget::CommandTargetMessageInvoker::handleMessage (const Message& message) -{ - const ScopedPointer info (static_cast (message.pointerParameter)); - owner->tryToInvoke (*info, false); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ApplicationCommandTarget.cpp ***/ - - -/*** Start of inlined file: juce_ApplicationProperties.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ApplicationProperties::ApplicationProperties() - : commonSettingsAreReadOnly (0) -{ -} - -ApplicationProperties::~ApplicationProperties() -{ - closeFiles(); -} - -void ApplicationProperties::setStorageParameters (const PropertiesFile::Options& newOptions) -{ - options = newOptions; -} - -bool ApplicationProperties::testWriteAccess (const bool testUserSettings, - const bool testCommonSettings, - const bool showWarningDialogOnFailure) -{ - const bool userOk = (! testUserSettings) || getUserSettings()->save(); - const bool commonOk = (! testCommonSettings) || getCommonSettings (false)->save(); - - if (! (userOk && commonOk)) - { - if (showWarningDialogOnFailure) - { - String filenames; - - if (userProps != nullptr && ! userOk) - filenames << '\n' << userProps->getFile().getFullPathName(); - - if (commonProps != nullptr && ! commonOk) - filenames << '\n' << commonProps->getFile().getFullPathName(); - - AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, - options.applicationName + TRANS(" - Unable to save settings"), - TRANS("An error occurred when trying to save the application's settings file...\n\nIn order to save and restore its settings, ") - + options.applicationName + TRANS(" needs to be able to write to the following files:\n") - + filenames - + TRANS("\n\nMake sure that these files aren't read-only, and that the disk isn't full.")); - } - - return false; - } - - return true; -} - -void ApplicationProperties::openFiles() -{ - // You need to call setStorageParameters() before trying to get hold of the properties! - jassert (options.applicationName.isNotEmpty()); - - if (options.applicationName.isNotEmpty()) - { - PropertiesFile::Options o (options); - - if (userProps == nullptr) - { - o.commonToAllUsers = false; - userProps = new PropertiesFile (o); - } - - if (commonProps == nullptr) - { - o.commonToAllUsers = true; - commonProps = new PropertiesFile (o); - } - - userProps->setFallbackPropertySet (commonProps); - } -} - -PropertiesFile* ApplicationProperties::getUserSettings() -{ - if (userProps == nullptr) - openFiles(); - - return userProps; -} - -PropertiesFile* ApplicationProperties::getCommonSettings (const bool returnUserPropsIfReadOnly) -{ - if (commonProps == nullptr) - openFiles(); - - if (returnUserPropsIfReadOnly) - { - if (commonSettingsAreReadOnly == 0) - commonSettingsAreReadOnly = commonProps->save() ? -1 : 1; - - if (commonSettingsAreReadOnly > 0) - return userProps; - } - - return commonProps; -} - -bool ApplicationProperties::saveIfNeeded() -{ - return (userProps == nullptr || userProps->saveIfNeeded()) - && (commonProps == nullptr || commonProps->saveIfNeeded()); -} - -void ApplicationProperties::closeFiles() -{ - userProps = nullptr; - commonProps = nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ApplicationProperties.cpp ***/ - - -/*** Start of inlined file: juce_PropertiesFile.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace PropertyFileConstants -{ - static const int magicNumber = (int) ByteOrder::littleEndianInt ("PROP"); - static const int magicNumberCompressed = (int) ByteOrder::littleEndianInt ("CPRP"); - - static const char* const fileTag = "PROPERTIES"; - static const char* const valueTag = "VALUE"; - static const char* const nameAttribute = "name"; - static const char* const valueAttribute = "val"; -} - -PropertiesFile::Options::Options() - : commonToAllUsers (false), - ignoreCaseOfKeyNames (false), - millisecondsBeforeSaving (3000), - storageFormat (PropertiesFile::storeAsXML), - processLock (nullptr) -{ -} - -File PropertiesFile::Options::getDefaultFile() const -{ - // mustn't have illegal characters in this name.. - jassert (applicationName == File::createLegalFileName (applicationName)); - - #if JUCE_MAC || JUCE_IOS - File dir (commonToAllUsers ? "/Library/" - : "~/Library/"); - - if (osxLibrarySubFolder != "Preferences" && osxLibrarySubFolder != "Application Support") - { - /* The PropertiesFile class always used to put its settings files in "Library/Preferences", but Apple - have changed their advice, and now stipulate that settings should go in "Library/Application Support". - - Because older apps would be broken by a silent change in this class's behaviour, you must now - explicitly set the osxLibrarySubFolder value to indicate which path you want to use. - - In newer apps, you should always set this to "Application Support". - - If your app needs to load settings files that were created by older versions of juce and - you want to maintain backwards-compatibility, then you can set this to "Preferences". - But.. for better Apple-compliance, the recommended approach would be to write some code that - finds your old settings files in ~/Library/Preferences, moves them to ~/Library/Application Support, - and then uses the new path. - */ - jassertfalse; - - dir = dir.getChildFile ("Application Support"); - } - else - { - dir = dir.getChildFile (osxLibrarySubFolder); - } - - if (folderName.isNotEmpty()) - dir = dir.getChildFile (folderName); - - #elif JUCE_LINUX || JUCE_ANDROID - const File dir ((commonToAllUsers ? "/var/" : "~/") - + (folderName.isNotEmpty() ? folderName - : ("." + applicationName))); - - #elif JUCE_WINDOWS - File dir (File::getSpecialLocation (commonToAllUsers ? File::commonApplicationDataDirectory - : File::userApplicationDataDirectory)); - - if (dir == File::nonexistent) - return File::nonexistent; - - dir = dir.getChildFile (folderName.isNotEmpty() ? folderName - : applicationName); - #endif - - return dir.getChildFile (applicationName) - .withFileExtension (filenameSuffix); -} - -PropertiesFile::PropertiesFile (const File& file_, const Options& options_) - : PropertySet (options_.ignoreCaseOfKeyNames), - file (file_), options (options_), - loadedOk (false), needsWriting (false) -{ - initialise(); -} - -PropertiesFile::PropertiesFile (const Options& options_) - : PropertySet (options_.ignoreCaseOfKeyNames), - file (options_.getDefaultFile()), options (options_), - loadedOk (false), needsWriting (false) -{ - initialise(); -} - -void PropertiesFile::initialise() -{ - // You need to correctly specify just one storage format for the file - ProcessScopedLock pl (createProcessLock()); - - if (pl != nullptr && ! pl->isLocked()) - return; // locking failure.. - - ScopedPointer fileStream (file.createInputStream()); - - if (fileStream != nullptr) - { - int magicNumber = fileStream->readInt(); - - if (magicNumber == PropertyFileConstants::magicNumberCompressed) - { - fileStream = new GZIPDecompressorInputStream (new SubregionStream (fileStream.release(), 4, -1, true), true); - magicNumber = PropertyFileConstants::magicNumber; - } - - if (magicNumber == PropertyFileConstants::magicNumber) - { - loadedOk = true; - BufferedInputStream in (fileStream.release(), 2048, true); - - int numValues = in.readInt(); - - while (--numValues >= 0 && ! in.isExhausted()) - { - const String key (in.readString()); - const String value (in.readString()); - - jassert (key.isNotEmpty()); - if (key.isNotEmpty()) - getAllProperties().set (key, value); - } - } - else - { - // Not a binary props file - let's see if it's XML.. - fileStream = nullptr; - - XmlDocument parser (file); - ScopedPointer doc (parser.getDocumentElement (true)); - - if (doc != nullptr && doc->hasTagName (PropertyFileConstants::fileTag)) - { - doc = parser.getDocumentElement(); - - if (doc != nullptr) - { - loadedOk = true; - - forEachXmlChildElementWithTagName (*doc, e, PropertyFileConstants::valueTag) - { - const String name (e->getStringAttribute (PropertyFileConstants::nameAttribute)); - - if (name.isNotEmpty()) - { - getAllProperties().set (name, - e->getFirstChildElement() != nullptr - ? e->getFirstChildElement()->createDocument (String::empty, true) - : e->getStringAttribute (PropertyFileConstants::valueAttribute)); - } - } - } - else - { - // must be a pretty broken XML file we're trying to parse here, - // or a sign that this object needs an InterProcessLock, - // or just a failure reading the file. This last reason is why - // we don't jassertfalse here. - } - } - } - } - else - { - loadedOk = ! file.exists(); - } -} - -PropertiesFile::~PropertiesFile() -{ - if (! saveIfNeeded()) - jassertfalse; -} - -InterProcessLock::ScopedLockType* PropertiesFile::createProcessLock() const -{ - return options.processLock != nullptr ? new InterProcessLock::ScopedLockType (*options.processLock) : nullptr; -} - -bool PropertiesFile::saveIfNeeded() -{ - const ScopedLock sl (getLock()); - return (! needsWriting) || save(); -} - -bool PropertiesFile::needsToBeSaved() const -{ - const ScopedLock sl (getLock()); - return needsWriting; -} - -void PropertiesFile::setNeedsToBeSaved (const bool needsToBeSaved_) -{ - const ScopedLock sl (getLock()); - needsWriting = needsToBeSaved_; -} - -bool PropertiesFile::save() -{ - const ScopedLock sl (getLock()); - - stopTimer(); - - if (file == File::nonexistent - || file.isDirectory() - || ! file.getParentDirectory().createDirectory()) - return false; - - if (options.storageFormat == storeAsXML) - { - XmlElement doc (PropertyFileConstants::fileTag); - - for (int i = 0; i < getAllProperties().size(); ++i) - { - XmlElement* const e = doc.createNewChildElement (PropertyFileConstants::valueTag); - e->setAttribute (PropertyFileConstants::nameAttribute, getAllProperties().getAllKeys() [i]); - - // if the value seems to contain xml, store it as such.. - XmlElement* const childElement = XmlDocument::parse (getAllProperties().getAllValues() [i]); - - if (childElement != nullptr) - e->addChildElement (childElement); - else - e->setAttribute (PropertyFileConstants::valueAttribute, - getAllProperties().getAllValues() [i]); - } - - ProcessScopedLock pl (createProcessLock()); - - if (pl != nullptr && ! pl->isLocked()) - return false; // locking failure.. - - if (doc.writeToFile (file, String::empty)) - { - needsWriting = false; - return true; - } - } - else - { - ProcessScopedLock pl (createProcessLock()); - - if (pl != nullptr && ! pl->isLocked()) - return false; // locking failure.. - - TemporaryFile tempFile (file); - ScopedPointer out (tempFile.getFile().createOutputStream()); - - if (out != nullptr) - { - if (options.storageFormat == storeAsCompressedBinary) - { - out->writeInt (PropertyFileConstants::magicNumberCompressed); - out->flush(); - - out = new GZIPCompressorOutputStream (out.release(), 9, true); - } - else - { - // have you set up the storage option flags correctly? - jassert (options.storageFormat == storeAsBinary); - - out->writeInt (PropertyFileConstants::magicNumber); - } - - const int numProperties = getAllProperties().size(); - - out->writeInt (numProperties); - - for (int i = 0; i < numProperties; ++i) - { - out->writeString (getAllProperties().getAllKeys() [i]); - out->writeString (getAllProperties().getAllValues() [i]); - } - - out = nullptr; - - if (tempFile.overwriteTargetFileWithTemporary()) - { - needsWriting = false; - return true; - } - } - } - - return false; -} - -void PropertiesFile::timerCallback() -{ - saveIfNeeded(); -} - -void PropertiesFile::propertyChanged() -{ - sendChangeMessage(); - - needsWriting = true; - - if (options.millisecondsBeforeSaving > 0) - startTimer (options.millisecondsBeforeSaving); - else if (options.millisecondsBeforeSaving == 0) - saveIfNeeded(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PropertiesFile.cpp ***/ - - -/*** Start of inlined file: juce_FileBasedDocument.cpp ***/ -BEGIN_JUCE_NAMESPACE - -FileBasedDocument::FileBasedDocument (const String& fileExtension_, - const String& fileWildcard_, - const String& openFileDialogTitle_, - const String& saveFileDialogTitle_) - : changedSinceSave (false), - fileExtension (fileExtension_), - fileWildcard (fileWildcard_), - openFileDialogTitle (openFileDialogTitle_), - saveFileDialogTitle (saveFileDialogTitle_) -{ -} - -FileBasedDocument::~FileBasedDocument() -{ -} - -void FileBasedDocument::setChangedFlag (const bool hasChanged) -{ - if (changedSinceSave != hasChanged) - { - changedSinceSave = hasChanged; - sendChangeMessage(); - } -} - -void FileBasedDocument::changed() -{ - changedSinceSave = true; - sendChangeMessage(); -} - -void FileBasedDocument::setFile (const File& newFile) -{ - if (documentFile != newFile) - { - documentFile = newFile; - changed(); - } -} - -#if JUCE_MODAL_LOOPS_PERMITTED -bool FileBasedDocument::loadFrom (const File& newFile, - const bool showMessageOnFailure) -{ - MouseCursor::showWaitCursor(); - - const File oldFile (documentFile); - documentFile = newFile; - - String error; - - if (newFile.existsAsFile()) - { - error = loadDocument (newFile); - - if (error.isEmpty()) - { - setChangedFlag (false); - MouseCursor::hideWaitCursor(); - - setLastDocumentOpened (newFile); - return true; - } - } - else - { - error = "The file doesn't exist"; - } - - documentFile = oldFile; - MouseCursor::hideWaitCursor(); - - if (showMessageOnFailure) - { - AlertWindow::showMessageBox (AlertWindow::WarningIcon, - TRANS("Failed to open file..."), - TRANS("There was an error while trying to load the file:\n\n") - + newFile.getFullPathName() - + "\n\n" - + error); - } - - return false; -} - -bool FileBasedDocument::loadFromUserSpecifiedFile (const bool showMessageOnFailure) -{ - FileChooser fc (openFileDialogTitle, - getLastDocumentOpened(), - fileWildcard); - - if (fc.browseForFileToOpen()) - return loadFrom (fc.getResult(), showMessageOnFailure); - - return false; -} - -FileBasedDocument::SaveResult FileBasedDocument::save (const bool askUserForFileIfNotSpecified, - const bool showMessageOnFailure) -{ - return saveAs (documentFile, - false, - askUserForFileIfNotSpecified, - showMessageOnFailure); -} - -FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile, - const bool warnAboutOverwritingExistingFiles, - const bool askUserForFileIfNotSpecified, - const bool showMessageOnFailure) -{ - if (newFile == File::nonexistent) - { - if (askUserForFileIfNotSpecified) - { - return saveAsInteractive (true); - } - else - { - // can't save to an unspecified file - jassertfalse; - return failedToWriteToFile; - } - } - - if (warnAboutOverwritingExistingFiles && newFile.exists()) - { - if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, - TRANS("File already exists"), - TRANS("There's already a file called:\n\n") - + newFile.getFullPathName() - + TRANS("\n\nAre you sure you want to overwrite it?"), - TRANS("overwrite"), - TRANS("cancel"))) - { - return userCancelledSave; - } - } - - MouseCursor::showWaitCursor(); - - const File oldFile (documentFile); - documentFile = newFile; - - String error (saveDocument (newFile)); - - if (error.isEmpty()) - { - setChangedFlag (false); - MouseCursor::hideWaitCursor(); - - return savedOk; - } - - documentFile = oldFile; - MouseCursor::hideWaitCursor(); - - if (showMessageOnFailure) - { - AlertWindow::showMessageBox (AlertWindow::WarningIcon, - TRANS("Error writing to file..."), - TRANS("An error occurred while trying to save \"") - + getDocumentTitle() - + TRANS("\" to the file:\n\n") - + newFile.getFullPathName() - + "\n\n" - + error); - } - - return failedToWriteToFile; -} - -FileBasedDocument::SaveResult FileBasedDocument::saveIfNeededAndUserAgrees() -{ - if (! hasChangedSinceSaved()) - return savedOk; - - const int r = AlertWindow::showYesNoCancelBox (AlertWindow::QuestionIcon, - TRANS("Closing document..."), - TRANS("Do you want to save the changes to \"") - + getDocumentTitle() + "\"?", - TRANS("save"), - TRANS("discard changes"), - TRANS("cancel")); - - if (r == 1) - { - // save changes - return save (true, true); - } - else if (r == 2) - { - // discard changes - return savedOk; - } - - return userCancelledSave; -} - -FileBasedDocument::SaveResult FileBasedDocument::saveAsInteractive (const bool warnAboutOverwritingExistingFiles) -{ - File f; - - if (documentFile.existsAsFile()) - f = documentFile; - else - f = getLastDocumentOpened(); - - String legalFilename (File::createLegalFileName (getDocumentTitle())); - - if (legalFilename.isEmpty()) - legalFilename = "unnamed"; - - if (f.existsAsFile() || f.getParentDirectory().isDirectory()) - f = f.getSiblingFile (legalFilename); - else - f = File::getSpecialLocation (File::userDocumentsDirectory).getChildFile (legalFilename); - - f = f.withFileExtension (fileExtension) - .getNonexistentSibling (true); - - FileChooser fc (saveFileDialogTitle, f, fileWildcard); - - if (fc.browseForFileToSave (warnAboutOverwritingExistingFiles)) - { - File chosen (fc.getResult()); - if (chosen.getFileExtension().isEmpty()) - { - chosen = chosen.withFileExtension (fileExtension); - - if (chosen.exists()) - { - if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, - TRANS("File already exists"), - TRANS("There's already a file called:") - + "\n\n" + chosen.getFullPathName() - + "\n\n" + TRANS("Are you sure you want to overwrite it?"), - TRANS("overwrite"), - TRANS("cancel"))) - { - return userCancelledSave; - } - } - } - - setLastDocumentOpened (chosen); - return saveAs (chosen, false, false, true); - } - - return userCancelledSave; -} -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_FileBasedDocument.cpp ***/ - - -/*** Start of inlined file: juce_RecentlyOpenedFilesList.cpp ***/ -BEGIN_JUCE_NAMESPACE - -RecentlyOpenedFilesList::RecentlyOpenedFilesList() - : maxNumberOfItems (10) -{ -} - -RecentlyOpenedFilesList::~RecentlyOpenedFilesList() -{ -} - -void RecentlyOpenedFilesList::setMaxNumberOfItems (const int newMaxNumber) -{ - maxNumberOfItems = jmax (1, newMaxNumber); - - files.removeRange (maxNumberOfItems, getNumFiles()); -} - -int RecentlyOpenedFilesList::getNumFiles() const -{ - return files.size(); -} - -File RecentlyOpenedFilesList::getFile (const int index) const -{ - return File (files [index]); -} - -void RecentlyOpenedFilesList::clear() -{ - files.clear(); -} - -void RecentlyOpenedFilesList::addFile (const File& file) -{ - removeFile (file); - files.insert (0, file.getFullPathName()); - - setMaxNumberOfItems (maxNumberOfItems); -} - -void RecentlyOpenedFilesList::removeFile (const File& file) -{ - files.removeString (file.getFullPathName()); -} - -void RecentlyOpenedFilesList::removeNonExistentFiles() -{ - for (int i = getNumFiles(); --i >= 0;) - if (! getFile(i).exists()) - files.remove (i); -} - -int RecentlyOpenedFilesList::createPopupMenuItems (PopupMenu& menuToAddTo, - const int baseItemId, - const bool showFullPaths, - const bool dontAddNonExistentFiles, - const File** filesToAvoid) -{ - int num = 0; - - for (int i = 0; i < getNumFiles(); ++i) - { - const File f (getFile(i)); - - if ((! dontAddNonExistentFiles) || f.exists()) - { - bool needsAvoiding = false; - - if (filesToAvoid != nullptr) - { - for (const File** avoid = filesToAvoid; *avoid != nullptr; ++avoid) - { - if (f == **avoid) - { - needsAvoiding = true; - break; - } - } - } - - if (! needsAvoiding) - { - menuToAddTo.addItem (baseItemId + i, - showFullPaths ? f.getFullPathName() - : f.getFileName()); - ++num; - } - } - } - - return num; -} - -String RecentlyOpenedFilesList::toString() const -{ - return files.joinIntoString ("\n"); -} - -void RecentlyOpenedFilesList::restoreFromString (const String& stringifiedVersion) -{ - clear(); - files.addLines (stringifiedVersion); - - setMaxNumberOfItems (maxNumberOfItems); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_RecentlyOpenedFilesList.cpp ***/ - - -/*** Start of inlined file: juce_UndoManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -UndoManager::UndoManager (const int maxNumberOfUnitsToKeep, - const int minimumTransactions) - : totalUnitsStored (0), - nextIndex (0), - newTransaction (true), - reentrancyCheck (false) -{ - setMaxNumberOfStoredUnits (maxNumberOfUnitsToKeep, - minimumTransactions); -} - -UndoManager::~UndoManager() -{ - clearUndoHistory(); -} - -void UndoManager::clearUndoHistory() -{ - transactions.clear(); - transactionNames.clear(); - totalUnitsStored = 0; - nextIndex = 0; - sendChangeMessage(); -} - -int UndoManager::getNumberOfUnitsTakenUpByStoredCommands() const -{ - return totalUnitsStored; -} - -void UndoManager::setMaxNumberOfStoredUnits (const int maxNumberOfUnitsToKeep, - const int minimumTransactions) -{ - maxNumUnitsToKeep = jmax (1, maxNumberOfUnitsToKeep); - minimumTransactionsToKeep = jmax (1, minimumTransactions); -} - -bool UndoManager::perform (UndoableAction* const command_, const String& actionName) -{ - if (command_ != nullptr) - { - ScopedPointer command (command_); - - if (actionName.isNotEmpty()) - currentTransactionName = actionName; - - if (reentrancyCheck) - { - jassertfalse; // don't call perform() recursively from the UndoableAction::perform() or - // undo() methods, or else these actions won't actually get done. - - return false; - } - else if (command->perform()) - { - OwnedArray* commandSet = transactions [nextIndex - 1]; - - if (commandSet != nullptr && ! newTransaction) - { - UndoableAction* lastAction = commandSet->getLast(); - - if (lastAction != nullptr) - { - UndoableAction* coalescedAction = lastAction->createCoalescedAction (command); - - if (coalescedAction != nullptr) - { - command = coalescedAction; - totalUnitsStored -= lastAction->getSizeInUnits(); - commandSet->removeLast(); - } - } - } - else - { - commandSet = new OwnedArray(); - transactions.insert (nextIndex, commandSet); - transactionNames.insert (nextIndex, currentTransactionName); - ++nextIndex; - } - - totalUnitsStored += command->getSizeInUnits(); - commandSet->add (command.release()); - newTransaction = false; - - while (nextIndex < transactions.size()) - { - const OwnedArray * const lastSet = transactions.getLast(); - - for (int i = lastSet->size(); --i >= 0;) - totalUnitsStored -= lastSet->getUnchecked (i)->getSizeInUnits(); - - transactions.removeLast(); - transactionNames.remove (transactionNames.size() - 1); - } - - while (nextIndex > 0 - && totalUnitsStored > maxNumUnitsToKeep - && transactions.size() > minimumTransactionsToKeep) - { - const OwnedArray * const firstSet = transactions.getFirst(); - - for (int i = firstSet->size(); --i >= 0;) - totalUnitsStored -= firstSet->getUnchecked (i)->getSizeInUnits(); - - jassert (totalUnitsStored >= 0); // something fishy going on if this fails! - - transactions.remove (0); - transactionNames.remove (0); - --nextIndex; - } - - sendChangeMessage(); - - return true; - } - } - - return false; -} - -void UndoManager::beginNewTransaction (const String& actionName) -{ - newTransaction = true; - currentTransactionName = actionName; -} - -void UndoManager::setCurrentTransactionName (const String& newName) -{ - currentTransactionName = newName; -} - -bool UndoManager::canUndo() const -{ - return nextIndex > 0; -} - -bool UndoManager::canRedo() const -{ - return nextIndex < transactions.size(); -} - -String UndoManager::getUndoDescription() const -{ - return transactionNames [nextIndex - 1]; -} - -String UndoManager::getRedoDescription() const -{ - return transactionNames [nextIndex]; -} - -bool UndoManager::undo() -{ - const OwnedArray* const commandSet = transactions [nextIndex - 1]; - - if (commandSet == nullptr) - return false; - - bool failed = false; - - { - const ScopedValueSetter setter (reentrancyCheck, true); - - for (int i = commandSet->size(); --i >= 0;) - { - if (! commandSet->getUnchecked(i)->undo()) - { - jassertfalse; - failed = true; - break; - } - } - } - - if (failed) - clearUndoHistory(); - else - --nextIndex; - - beginNewTransaction(); - - sendChangeMessage(); - return true; -} - -bool UndoManager::redo() -{ - const OwnedArray* const commandSet = transactions [nextIndex]; - - if (commandSet == nullptr) - return false; - - bool failed = false; - - { - const ScopedValueSetter setter (reentrancyCheck, true); - - for (int i = 0; i < commandSet->size(); ++i) - { - if (! commandSet->getUnchecked(i)->perform()) - { - jassertfalse; - failed = true; - break; - } - } - } - - if (failed) - clearUndoHistory(); - else - ++nextIndex; - - beginNewTransaction(); - - sendChangeMessage(); - return true; -} - -bool UndoManager::undoCurrentTransactionOnly() -{ - return newTransaction ? false : undo(); -} - -void UndoManager::getActionsInCurrentTransaction (Array & actionsFound) const -{ - const OwnedArray * const commandSet = transactions [nextIndex - 1]; - - if (commandSet != nullptr && ! newTransaction) - { - for (int i = 0; i < commandSet->size(); ++i) - actionsFound.add (commandSet->getUnchecked(i)); - } -} - -int UndoManager::getNumActionsInCurrentTransaction() const -{ - const OwnedArray * const commandSet = transactions [nextIndex - 1]; - - if (commandSet != nullptr && ! newTransaction) - return commandSet->size(); - - return 0; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_UndoManager.cpp ***/ - - -/*** Start of inlined file: juce_UnitTest.cpp ***/ -BEGIN_JUCE_NAMESPACE - -UnitTest::UnitTest (const String& name_) - : name (name_), runner (nullptr) -{ - getAllTests().add (this); -} - -UnitTest::~UnitTest() -{ - getAllTests().removeValue (this); -} - -Array& UnitTest::getAllTests() -{ - static Array tests; - return tests; -} - -void UnitTest::initialise() {} -void UnitTest::shutdown() {} - -void UnitTest::performTest (UnitTestRunner* const runner_) -{ - jassert (runner_ != nullptr); - runner = runner_; - - initialise(); - runTest(); - shutdown(); -} - -void UnitTest::logMessage (const String& message) -{ - runner->logMessage (message); -} - -void UnitTest::beginTest (const String& testName) -{ - runner->beginNewTest (this, testName); -} - -void UnitTest::expect (const bool result, const String& failureMessage) -{ - if (result) - runner->addPass(); - else - runner->addFail (failureMessage); -} - -UnitTestRunner::UnitTestRunner() - : currentTest (nullptr), assertOnFailure (false) -{ -} - -UnitTestRunner::~UnitTestRunner() -{ -} - -int UnitTestRunner::getNumResults() const noexcept -{ - return results.size(); -} - -const UnitTestRunner::TestResult* UnitTestRunner::getResult (int index) const noexcept -{ - return results [index]; -} - -void UnitTestRunner::resultsUpdated() -{ -} - -void UnitTestRunner::runTests (const Array& tests, const bool assertOnFailure_) -{ - results.clear(); - assertOnFailure = assertOnFailure_; - resultsUpdated(); - - for (int i = 0; i < tests.size(); ++i) - { - try - { - tests.getUnchecked(i)->performTest (this); - } - catch (...) - { - addFail ("An unhandled exception was thrown!"); - } - } - - endTest(); -} - -void UnitTestRunner::runAllTests (const bool assertOnFailure_) -{ - runTests (UnitTest::getAllTests(), assertOnFailure_); -} - -void UnitTestRunner::logMessage (const String& message) -{ - Logger::writeToLog (message); -} - -void UnitTestRunner::beginNewTest (UnitTest* const test, const String& subCategory) -{ - endTest(); - currentTest = test; - - TestResult* const r = new TestResult(); - r->unitTestName = test->getName(); - r->subcategoryName = subCategory; - r->passes = 0; - r->failures = 0; - results.add (r); - - logMessage ("-----------------------------------------------------------------"); - logMessage ("Starting test: " + r->unitTestName + " / " + subCategory + "..."); - - resultsUpdated(); -} - -void UnitTestRunner::endTest() -{ - if (results.size() > 0) - { - TestResult* const r = results.getLast(); - - if (r->failures > 0) - { - String m ("FAILED!! "); - m << r->failures << (r->failures == 1 ? " test" : " tests") - << " failed, out of a total of " << (r->passes + r->failures); - - logMessage (String::empty); - logMessage (m); - logMessage (String::empty); - } - else - { - logMessage ("All tests completed successfully"); - } - } -} - -void UnitTestRunner::addPass() -{ - { - const ScopedLock sl (results.getLock()); - - TestResult* const r = results.getLast(); - jassert (r != nullptr); // You need to call UnitTest::beginTest() before performing any tests! - - r->passes++; - - String message ("Test "); - message << (r->failures + r->passes) << " passed"; - logMessage (message); - } - - resultsUpdated(); -} - -void UnitTestRunner::addFail (const String& failureMessage) -{ - { - const ScopedLock sl (results.getLock()); - - TestResult* const r = results.getLast(); - jassert (r != nullptr); // You need to call UnitTest::beginTest() before performing any tests! - - r->failures++; - - String message ("!!! Test "); - message << (r->failures + r->passes) << " failed"; - - if (failureMessage.isNotEmpty()) - message << ": " << failureMessage; - - r->messages.add (message); - - logMessage (message); - } - - resultsUpdated(); - - if (assertOnFailure) { jassertfalse } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_UnitTest.cpp ***/ - - -/*** Start of inlined file: juce_DeletedAtShutdown.cpp ***/ -BEGIN_JUCE_NAMESPACE - -static SpinLock deletedAtShutdownLock; - -DeletedAtShutdown::DeletedAtShutdown() -{ - const SpinLock::ScopedLockType sl (deletedAtShutdownLock); - getObjects().add (this); -} - -DeletedAtShutdown::~DeletedAtShutdown() -{ - const SpinLock::ScopedLockType sl (deletedAtShutdownLock); - getObjects().removeValue (this); -} - -void DeletedAtShutdown::deleteAll() -{ - // make a local copy of the array, so it can't get into a loop if something - // creates another DeletedAtShutdown object during its destructor. - Array localCopy; - - { - const SpinLock::ScopedLockType sl (deletedAtShutdownLock); - localCopy = getObjects(); - } - - for (int i = localCopy.size(); --i >= 0;) - { - JUCE_TRY - { - DeletedAtShutdown* deletee = localCopy.getUnchecked(i); - - // double-check that it's not already been deleted during another object's destructor. - { - const SpinLock::ScopedLockType sl (deletedAtShutdownLock); - if (! getObjects().contains (deletee)) - deletee = nullptr; - } - - delete deletee; - } - JUCE_CATCH_EXCEPTION - } - - // if no objects got re-created during shutdown, this should have been emptied by their - // destructors - jassert (getObjects().size() == 0); - - getObjects().clear(); // just to make sure the array doesn't have any memory still allocated -} - -Array & DeletedAtShutdown::getObjects() -{ - static Array objects; - return objects; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_DeletedAtShutdown.cpp ***/ - - -/*** Start of inlined file: juce_AiffAudioFormat.cpp ***/ -BEGIN_JUCE_NAMESPACE - -static const char* const aiffFormatName = "AIFF file"; -static const char* const aiffExtensions[] = { ".aiff", ".aif", 0 }; - -namespace AiffFileHelpers -{ - inline int chunkName (const char* const name) { return (int) ByteOrder::littleEndianInt (name); } - -#if JUCE_MSVC - #pragma pack (push, 1) - #define PACKED -#elif JUCE_GCC - #define PACKED __attribute__((packed)) -#else - #define PACKED -#endif - -struct InstChunk -{ - struct Loop - { - uint16 type; // these are different in AIFF and WAV - uint16 startIdentifier; - uint16 endIdentifier; - } PACKED; - - int8 baseNote; - int8 detune; - int8 lowNote; - int8 highNote; - int8 lowVelocity; - int8 highVelocity; - int16 gain; - Loop sustainLoop; - Loop releaseLoop; - - void copyTo (StringPairArray& values) const - { - values.set ("MidiUnityNote", String (baseNote)); - values.set ("Detune", String (detune)); - - values.set ("LowNote", String (lowNote)); - values.set ("HighNote", String (highNote)); - values.set ("LowVelocity", String (lowVelocity)); - values.set ("HighVelocity", String (highVelocity)); - - values.set ("Gain", String ((int16) ByteOrder::swapIfLittleEndian ((uint16) gain))); - - values.set ("NumSampleLoops", String (2)); // always 2 with AIFF, WAV can have more - values.set ("Loop0Type", String (ByteOrder::swapIfLittleEndian (sustainLoop.type))); - values.set ("Loop0StartIdentifier", String (ByteOrder::swapIfLittleEndian (sustainLoop.startIdentifier))); - values.set ("Loop0EndIdentifier", String (ByteOrder::swapIfLittleEndian (sustainLoop.endIdentifier))); - values.set ("Loop1Type", String (ByteOrder::swapIfLittleEndian (releaseLoop.type))); - values.set ("Loop1StartIdentifier", String (ByteOrder::swapIfLittleEndian (releaseLoop.startIdentifier))); - values.set ("Loop1EndIdentifier", String (ByteOrder::swapIfLittleEndian (releaseLoop.endIdentifier))); - } - - static void create (MemoryBlock& block, const StringPairArray& values) - { - if (values.getAllKeys().contains ("MidiUnityNote", true)) - { - block.setSize ((sizeof (InstChunk) + 3) & ~3, true); - InstChunk* const inst = static_cast (block.getData()); - - inst->baseNote = (int8) values.getValue ("MidiUnityNote", "60").getIntValue(); - inst->detune = (int8) values.getValue ("Detune", "0").getIntValue(); - inst->lowNote = (int8) values.getValue ("LowNote", "0").getIntValue(); - inst->highNote = (int8) values.getValue ("HighNote", "127").getIntValue(); - inst->lowVelocity = (int8) values.getValue ("LowVelocity", "1").getIntValue(); - inst->highVelocity = (int8) values.getValue ("HighVelocity", "127").getIntValue(); - inst->gain = (int16) ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Gain", "0").getIntValue()); - - inst->sustainLoop.type = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop0Type", "0").getIntValue()); - inst->sustainLoop.startIdentifier = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop0StartIdentifier", "0").getIntValue()); - inst->sustainLoop.endIdentifier = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop0EndIdentifier", "0").getIntValue()); - inst->releaseLoop.type = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop1Type", "0").getIntValue()); - inst->releaseLoop.startIdentifier = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop1StartIdentifier", "0").getIntValue()); - inst->releaseLoop.endIdentifier = ByteOrder::swapIfLittleEndian ((uint16) values.getValue ("Loop1EndIdentifier", "0").getIntValue()); - } - } - -} PACKED; - -#if JUCE_MSVC - #pragma pack (pop) -#endif - -#undef PACKED - -namespace MarkChunk -{ - bool metaDataContainsZeroIdentifiers (const StringPairArray& values) - { - // (zero cue identifiers are valid for WAV but not for AIFF) - const String cueString ("Cue"); - const String noteString ("CueNote"); - const String identifierString ("Identifier"); - - const StringArray& keys = values.getAllKeys(); - - for (int i = 0; i < keys.size(); ++i) - { - const String key (keys[i]); - - if (key.startsWith (noteString)) - continue; // zero identifier IS valid in a COMT chunk - - if (key.startsWith (cueString) && key.contains (identifierString)) - { - const int value = values.getValue (key, "-1").getIntValue(); - - if (value == 0) - return true; - } - } - - return false; - } - - void create (MemoryBlock& block, const StringPairArray& values) - { - const int numCues = values.getValue ("NumCuePoints", "0").getIntValue(); - - if (numCues > 0) - { - MemoryOutputStream out (block, false); - - out.writeShortBigEndian ((short) numCues); - - const int numCueLabels = values.getValue ("NumCueLabels", "0").getIntValue(); - const int idOffset = metaDataContainsZeroIdentifiers (values) ? 1 : 0; // can't have zero IDs in AIFF - - #if JUCE_DEBUG - Array identifiers; - #endif - - for (int i = 0; i < numCues; ++i) - { - const String prefixCue ("Cue" + String (i)); - const int identifier = idOffset + values.getValue (prefixCue + "Identifier", "1").getIntValue(); - - #if JUCE_DEBUG - jassert (! identifiers.contains (identifier)); - identifiers.add (identifier); - #endif - - const int offset = values.getValue (prefixCue + "Offset", "0").getIntValue(); - String label ("CueLabel" + String (i)); - - for (int labelIndex = 0; labelIndex < numCueLabels; ++labelIndex) - { - const String prefixLabel ("CueLabel" + String (labelIndex)); - const int labelIdentifier = idOffset + values.getValue (prefixLabel + "Identifier", "1").getIntValue(); - - if (labelIdentifier == identifier) - { - label = values.getValue (prefixLabel + "Text", label); - break; - } - } - - out.writeShortBigEndian ((short) identifier); - out.writeIntBigEndian (offset); - - const int labelLength = jmin (254, label.getNumBytesAsUTF8()); // seems to need null terminator even though it's a pstring - out.writeByte ((char) labelLength + 1); - out.write (label.toUTF8(), labelLength); - out.writeByte (0); - } - - if ((out.getDataSize() & 1) != 0) - out.writeByte (0); - } - } -} - -namespace COMTChunk -{ - void create (MemoryBlock& block, const StringPairArray& values) - { - const int numNotes = values.getValue ("NumCueNotes", "0").getIntValue(); - - if (numNotes > 0) - { - MemoryOutputStream out (block, false); - out.writeShortBigEndian ((short) numNotes); - - for (int i = 0; i < numNotes; ++i) - { - const String prefix ("CueNote" + String (i)); - - out.writeIntBigEndian (values.getValue (prefix + "TimeStamp", "0").getIntValue()); - out.writeShortBigEndian ((short) values.getValue (prefix + "Identifier", "0").getIntValue()); - - const String comment (values.getValue (prefix + "Text", String::empty)); - out.write (comment.toUTF8(), jmin (comment.getNumBytesAsUTF8(), 65534)); - out.writeByte (0); - - if ((out.getDataSize() & 1) != 0) - out.writeByte (0); - } - } - } -} - -} - -class AiffAudioFormatReader : public AudioFormatReader -{ -public: - int bytesPerFrame; - int64 dataChunkStart; - bool littleEndian; - - AiffAudioFormatReader (InputStream* in) - : AudioFormatReader (in, TRANS (aiffFormatName)) - { - using namespace AiffFileHelpers; - - if (input->readInt() == chunkName ("FORM")) - { - const int len = input->readIntBigEndian(); - const int64 end = input->getPosition() + len; - - const int nextType = input->readInt(); - if (nextType == chunkName ("AIFF") || nextType == chunkName ("AIFC")) - { - bool hasGotVer = false; - bool hasGotData = false; - bool hasGotType = false; - - while (input->getPosition() < end) - { - const int type = input->readInt(); - const uint32 length = (uint32) input->readIntBigEndian(); - const int64 chunkEnd = input->getPosition() + length; - - if (type == chunkName ("FVER")) - { - hasGotVer = true; - - const int ver = input->readIntBigEndian(); - if (ver != 0 && ver != (int) 0xa2805140) - break; - } - else if (type == chunkName ("COMM")) - { - hasGotType = true; - - numChannels = (unsigned int) input->readShortBigEndian(); - lengthInSamples = input->readIntBigEndian(); - bitsPerSample = input->readShortBigEndian(); - bytesPerFrame = (numChannels * bitsPerSample) >> 3; - - unsigned char sampleRateBytes[10]; - input->read (sampleRateBytes, 10); - const int byte0 = sampleRateBytes[0]; - - if ((byte0 & 0x80) != 0 - || byte0 <= 0x3F || byte0 > 0x40 - || (byte0 == 0x40 && sampleRateBytes[1] > 0x1C)) - break; - - unsigned int sampRate = ByteOrder::bigEndianInt (sampleRateBytes + 2); - sampRate >>= (16414 - ByteOrder::bigEndianShort (sampleRateBytes)); - sampleRate = (int) sampRate; - - if (length <= 18) - { - // some types don't have a chunk large enough to include a compression - // type, so assume it's just big-endian pcm - littleEndian = false; - } - else - { - const int compType = input->readInt(); - - if (compType == chunkName ("NONE") || compType == chunkName ("twos")) - { - littleEndian = false; - } - else if (compType == chunkName ("sowt")) - { - littleEndian = true; - } - else - { - sampleRate = 0; - break; - } - } - } - else if (type == chunkName ("SSND")) - { - hasGotData = true; - - const int offset = input->readIntBigEndian(); - dataChunkStart = input->getPosition() + 4 + offset; - lengthInSamples = (bytesPerFrame > 0) ? jmin (lengthInSamples, (int64) (length / bytesPerFrame)) : 0; - } - else if (type == chunkName ("MARK")) - { - const uint16 numCues = (uint16) input->readShortBigEndian(); - - // these two are always the same for AIFF-read files - metadataValues.set ("NumCuePoints", String (numCues)); - metadataValues.set ("NumCueLabels", String (numCues)); - - for (uint16 i = 0; i < numCues; ++i) - { - uint16 identifier = (uint16) input->readShortBigEndian(); - uint32 offset = (uint32) input->readIntBigEndian(); - uint8 stringLength = (uint8) input->readByte(); - MemoryBlock textBlock; - input->readIntoMemoryBlock (textBlock, stringLength); - - // if the stringLength is even then read one more byte as the - // string needs to be an even number of bytes INCLUDING the - // leading length character in the pascal string - if ((stringLength & 1) == 0) - input->readByte(); - - const String prefixCue ("Cue" + String (i)); - metadataValues.set (prefixCue + "Identifier", String (identifier)); - metadataValues.set (prefixCue + "Offset", String (offset)); - - const String prefixLabel ("CueLabel" + String (i)); - metadataValues.set (prefixLabel + "Identifier", String (identifier)); - metadataValues.set (prefixLabel + "Text", textBlock.toString()); - } - } - else if (type == chunkName ("COMT")) - { - const uint16 numNotes = (uint16) input->readShortBigEndian(); - metadataValues.set ("NumCueNotes", String (numNotes)); - - for (uint16 i = 0; i < numNotes; ++i) - { - uint32 timestamp = (uint32) input->readIntBigEndian(); - uint16 identifier = (uint16) input->readShortBigEndian(); // may be zero in this case - uint16 stringLength = (uint16) input->readShortBigEndian(); - - MemoryBlock textBlock; - input->readIntoMemoryBlock (textBlock, stringLength + (stringLength & 1)); - - const String prefix ("CueNote" + String (i)); - metadataValues.set (prefix + "TimeStamp", String (timestamp)); - metadataValues.set (prefix + "Identifier", String (identifier)); - metadataValues.set (prefix + "Text", textBlock.toString()); - } - } - else if (type == chunkName ("INST")) - { - HeapBlock inst; - inst.calloc (jmax ((size_t) length + 1, sizeof (InstChunk)), 1); - input->read (inst, length); - inst->copyTo (metadataValues); - } - else if ((hasGotVer && hasGotData && hasGotType) - || chunkEnd < input->getPosition() - || input->isExhausted()) - { - break; - } - - input->setPosition (chunkEnd); - } - } - } - - if (metadataValues.size() > 0) - metadataValues.set ("MetaDataSource", "AIFF"); - } - - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - const int64 samplesAvailable = lengthInSamples - startSampleInFile; - - if (samplesAvailable < numSamples) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != nullptr) - zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples); - - numSamples = (int) samplesAvailable; - } - - if (numSamples <= 0) - return true; - - input->setPosition (dataChunkStart + startSampleInFile * bytesPerFrame); - - while (numSamples > 0) - { - const int tempBufSize = 480 * 3 * 4; // (keep this a multiple of 3) - char tempBuffer [tempBufSize]; - - const int numThisTime = jmin (tempBufSize / bytesPerFrame, numSamples); - const int bytesRead = input->read (tempBuffer, numThisTime * bytesPerFrame); - - if (bytesRead < numThisTime * bytesPerFrame) - { - jassert (bytesRead >= 0); - zeromem (tempBuffer + bytesRead, numThisTime * bytesPerFrame - bytesRead); - } - - jassert (! usesFloatingPointData); // (would need to add support for this if it's possible) - - if (littleEndian) - { - switch (bitsPerSample) - { - case 8: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 16: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 24: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 32: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - default: jassertfalse; break; - } - } - else - { - switch (bitsPerSample) - { - case 8: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 16: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 24: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 32: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - default: jassertfalse; break; - } - } - - startOffsetInDestBuffer += numThisTime; - numSamples -= numThisTime; - } - - return true; - } - -private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AiffAudioFormatReader); -}; - -class AiffAudioFormatWriter : public AudioFormatWriter -{ -public: - - AiffAudioFormatWriter (OutputStream* out, double sampleRate_, - unsigned int numChans, int bits, - const StringPairArray& metadataValues) - : AudioFormatWriter (out, TRANS (aiffFormatName), sampleRate_, numChans, bits), - lengthInSamples (0), - bytesWritten (0), - writeFailed (false) - { - using namespace AiffFileHelpers; - - if (metadataValues.size() > 0) - { - // The meta data should have been santised for the AIFF format. - // If it was originally sourced from a WAV file the MetaDataSource - // key should be removed (or set to "AIFF") once this has been done - jassert (metadataValues.getValue ("MetaDataSource", "None") != "WAV"); - - MarkChunk::create (markChunk, metadataValues); - COMTChunk::create (comtChunk, metadataValues); - InstChunk::create (instChunk, metadataValues); - } - - headerPosition = out->getPosition(); - writeHeader(); - } - - ~AiffAudioFormatWriter() - { - if ((bytesWritten & 1) != 0) - output->writeByte (0); - - writeHeader(); - } - - bool write (const int** data, int numSamples) - { - jassert (data != nullptr && *data != nullptr); // the input must contain at least one channel! - - if (writeFailed) - return false; - - const int bytes = numChannels * numSamples * bitsPerSample / 8; - tempBlock.ensureSize (bytes, false); - - switch (bitsPerSample) - { - case 8: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 16: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 24: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 32: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - default: jassertfalse; break; - } - - if (bytesWritten + bytes >= (uint32) 0xfff00000 - || ! output->write (tempBlock.getData(), bytes)) - { - // failed to write to disk, so let's try writing the header. - // If it's just run out of disk space, then if it does manage - // to write the header, we'll still have a useable file.. - writeHeader(); - writeFailed = true; - return false; - } - else - { - bytesWritten += bytes; - lengthInSamples += numSamples; - - return true; - } - } - -private: - MemoryBlock tempBlock, markChunk, comtChunk, instChunk; - uint32 lengthInSamples, bytesWritten; - int64 headerPosition; - bool writeFailed; - - void writeHeader() - { - using namespace AiffFileHelpers; - - const bool couldSeekOk = output->setPosition (headerPosition); - (void) couldSeekOk; - - // if this fails, you've given it an output stream that can't seek! It needs - // to be able to seek back to write the header - jassert (couldSeekOk); - - const int headerLen = (int) (54 + (markChunk.getSize() > 0 ? markChunk.getSize() + 8 : 0) - + (comtChunk.getSize() > 0 ? comtChunk.getSize() + 8 : 0) - + (instChunk.getSize() > 0 ? instChunk.getSize() + 8 : 0)); - int audioBytes = lengthInSamples * ((bitsPerSample * numChannels) / 8); - audioBytes += (audioBytes & 1); - - output->writeInt (chunkName ("FORM")); - output->writeIntBigEndian (headerLen + audioBytes - 8); - output->writeInt (chunkName ("AIFF")); - output->writeInt (chunkName ("COMM")); - output->writeIntBigEndian (18); - output->writeShortBigEndian ((short) numChannels); - output->writeIntBigEndian (lengthInSamples); - output->writeShortBigEndian ((short) bitsPerSample); - - uint8 sampleRateBytes[10] = { 0 }; - - if (sampleRate <= 1) - { - sampleRateBytes[0] = 0x3f; - sampleRateBytes[1] = 0xff; - sampleRateBytes[2] = 0x80; - } - else - { - int mask = 0x40000000; - sampleRateBytes[0] = 0x40; - - if (sampleRate >= mask) - { - jassertfalse; - sampleRateBytes[1] = 0x1d; - } - else - { - int n = (int) sampleRate; - - int i; - for (i = 0; i <= 32 ; ++i) - { - if ((n & mask) != 0) - break; - - mask >>= 1; - } - - n = n << (i + 1); - - sampleRateBytes[1] = (uint8) (29 - i); - sampleRateBytes[2] = (uint8) ((n >> 24) & 0xff); - sampleRateBytes[3] = (uint8) ((n >> 16) & 0xff); - sampleRateBytes[4] = (uint8) ((n >> 8) & 0xff); - sampleRateBytes[5] = (uint8) (n & 0xff); - } - } - - output->write (sampleRateBytes, 10); - - if (markChunk.getSize() > 0) - { - output->writeInt (chunkName ("MARK")); - output->writeIntBigEndian ((int) markChunk.getSize()); - output->write (markChunk.getData(), (int) markChunk.getSize()); - } - - if (comtChunk.getSize() > 0) - { - output->writeInt (chunkName ("COMT")); - output->writeIntBigEndian ((int) comtChunk.getSize()); - output->write (comtChunk.getData(), (int) comtChunk.getSize()); - } - - if (instChunk.getSize() > 0) - { - output->writeInt (chunkName ("INST")); - output->writeIntBigEndian ((int) instChunk.getSize()); - output->write (instChunk.getData(), (int) instChunk.getSize()); - } - - output->writeInt (chunkName ("SSND")); - output->writeIntBigEndian (audioBytes + 8); - output->writeInt (0); - output->writeInt (0); - - jassert (output->getPosition() == headerLen); - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AiffAudioFormatWriter); -}; - -AiffAudioFormat::AiffAudioFormat() - : AudioFormat (TRANS (aiffFormatName), StringArray (aiffExtensions)) -{ -} - -AiffAudioFormat::~AiffAudioFormat() -{ -} - -const Array AiffAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000, 0 }; - return Array (rates); -} - -const Array AiffAudioFormat::getPossibleBitDepths() -{ - const int depths[] = { 8, 16, 24, 0 }; - return Array (depths); -} - -bool AiffAudioFormat::canDoStereo() { return true; } -bool AiffAudioFormat::canDoMono() { return true; } - -#if JUCE_MAC -bool AiffAudioFormat::canHandleFile (const File& f) -{ - if (AudioFormat::canHandleFile (f)) - return true; - - const OSType type = f.getMacOSType(); - return type == 'AIFF' || type == 'AIFC' - || type == 'aiff' || type == 'aifc'; -} -#endif - -AudioFormatReader* AiffAudioFormat::createReaderFor (InputStream* sourceStream, const bool deleteStreamIfOpeningFails) -{ - ScopedPointer w (new AiffAudioFormatReader (sourceStream)); - - if (w->sampleRate > 0) - return w.release(); - - if (! deleteStreamIfOpeningFails) - w->input = nullptr; - - return nullptr; -} - -AudioFormatWriter* AiffAudioFormat::createWriterFor (OutputStream* out, - double sampleRate, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int /*qualityOptionIndex*/) -{ - if (getPossibleBitDepths().contains (bitsPerSample)) - return new AiffAudioFormatWriter (out, sampleRate, numberOfChannels, bitsPerSample, metadataValues); - - return nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AiffAudioFormat.cpp ***/ - - -/*** Start of inlined file: juce_AudioFormat.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioFormat::AudioFormat (const String& name, const StringArray& extensions) - : formatName (name), - fileExtensions (extensions) -{ -} - -AudioFormat::~AudioFormat() -{ -} - -bool AudioFormat::canHandleFile (const File& f) -{ - for (int i = 0; i < fileExtensions.size(); ++i) - if (f.hasFileExtension (fileExtensions[i])) - return true; - - return false; -} - -const String& AudioFormat::getFormatName() const { return formatName; } -const StringArray& AudioFormat::getFileExtensions() const { return fileExtensions; } -bool AudioFormat::isCompressed() { return false; } -StringArray AudioFormat::getQualityOptions() { return StringArray(); } - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioFormat.cpp ***/ - - -/*** Start of inlined file: juce_AudioFormatReader.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioFormatReader::AudioFormatReader (InputStream* const in, - const String& formatName_) - : sampleRate (0), - bitsPerSample (0), - lengthInSamples (0), - numChannels (0), - usesFloatingPointData (false), - input (in), - formatName (formatName_) -{ -} - -AudioFormatReader::~AudioFormatReader() -{ - delete input; -} - -bool AudioFormatReader::read (int* const* destSamples, - int numDestChannels, - int64 startSampleInSource, - int numSamplesToRead, - const bool fillLeftoverChannelsWithCopies) -{ - jassert (numDestChannels > 0); // you have to actually give this some channels to work with! - - int startOffsetInDestBuffer = 0; - - if (startSampleInSource < 0) - { - const int silence = (int) jmin (-startSampleInSource, (int64) numSamplesToRead); - - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != nullptr) - zeromem (destSamples[i], sizeof (int) * silence); - - startOffsetInDestBuffer += silence; - numSamplesToRead -= silence; - startSampleInSource = 0; - } - - if (numSamplesToRead <= 0) - return true; - - if (! readSamples (const_cast (destSamples), - jmin ((int) numChannels, numDestChannels), startOffsetInDestBuffer, - startSampleInSource, numSamplesToRead)) - return false; - - if (numDestChannels > (int) numChannels) - { - if (fillLeftoverChannelsWithCopies) - { - int* lastFullChannel = destSamples[0]; - - for (int i = (int) numChannels; --i > 0;) - { - if (destSamples[i] != nullptr) - { - lastFullChannel = destSamples[i]; - break; - } - } - - if (lastFullChannel != nullptr) - for (int i = numChannels; i < numDestChannels; ++i) - if (destSamples[i] != nullptr) - memcpy (destSamples[i], lastFullChannel, sizeof (int) * numSamplesToRead); - } - else - { - for (int i = numChannels; i < numDestChannels; ++i) - if (destSamples[i] != nullptr) - zeromem (destSamples[i], sizeof (int) * numSamplesToRead); - } - } - - return true; -} - -void AudioFormatReader::readMaxLevels (int64 startSampleInFile, - int64 numSamples, - float& lowestLeft, float& highestLeft, - float& lowestRight, float& highestRight) -{ - if (numSamples <= 0) - { - lowestLeft = 0; - lowestRight = 0; - highestLeft = 0; - highestRight = 0; - return; - } - - const int bufferSize = (int) jmin (numSamples, (int64) 4096); - HeapBlock tempSpace (bufferSize * 2 + 64); - - int* tempBuffer[3]; - tempBuffer[0] = tempSpace.getData(); - tempBuffer[1] = tempSpace.getData() + bufferSize; - tempBuffer[2] = 0; - - if (usesFloatingPointData) - { - float lmin = 1.0e6f; - float lmax = -lmin; - float rmin = lmin; - float rmax = lmax; - - while (numSamples > 0) - { - const int numToDo = (int) jmin (numSamples, (int64) bufferSize); - read (tempBuffer, 2, startSampleInFile, numToDo, false); - - numSamples -= numToDo; - startSampleInFile += numToDo; - - float bufMin, bufMax; - findMinAndMax (reinterpret_cast (tempBuffer[0]), numToDo, bufMin, bufMax); - lmin = jmin (lmin, bufMin); - lmax = jmax (lmax, bufMax); - - if (numChannels > 1) - { - findMinAndMax (reinterpret_cast (tempBuffer[1]), numToDo, bufMin, bufMax); - rmin = jmin (rmin, bufMin); - rmax = jmax (rmax, bufMax); - } - } - - if (numChannels <= 1) - { - rmax = lmax; - rmin = lmin; - } - - lowestLeft = lmin; - highestLeft = lmax; - lowestRight = rmin; - highestRight = rmax; - } - else - { - int lmax = std::numeric_limits::min(); - int lmin = std::numeric_limits::max(); - int rmax = std::numeric_limits::min(); - int rmin = std::numeric_limits::max(); - - while (numSamples > 0) - { - const int numToDo = (int) jmin (numSamples, (int64) bufferSize); - if (! read (tempBuffer, 2, startSampleInFile, numToDo, false)) - break; - - numSamples -= numToDo; - startSampleInFile += numToDo; - - for (int j = numChannels; --j >= 0;) - { - int bufMin, bufMax; - findMinAndMax (tempBuffer[j], numToDo, bufMin, bufMax); - - if (j == 0) - { - lmax = jmax (lmax, bufMax); - lmin = jmin (lmin, bufMin); - } - else - { - rmax = jmax (rmax, bufMax); - rmin = jmin (rmin, bufMin); - } - } - } - - if (numChannels <= 1) - { - rmax = lmax; - rmin = lmin; - } - - lowestLeft = lmin / (float) std::numeric_limits::max(); - highestLeft = lmax / (float) std::numeric_limits::max(); - lowestRight = rmin / (float) std::numeric_limits::max(); - highestRight = rmax / (float) std::numeric_limits::max(); - } -} - -int64 AudioFormatReader::searchForLevel (int64 startSample, - int64 numSamplesToSearch, - const double magnitudeRangeMinimum, - const double magnitudeRangeMaximum, - const int minimumConsecutiveSamples) -{ - if (numSamplesToSearch == 0) - return -1; - - const int bufferSize = 4096; - HeapBlock tempSpace (bufferSize * 2 + 64); - - int* tempBuffer[3]; - tempBuffer[0] = tempSpace.getData(); - tempBuffer[1] = tempSpace.getData() + bufferSize; - tempBuffer[2] = 0; - - int consecutive = 0; - int64 firstMatchPos = -1; - - jassert (magnitudeRangeMaximum > magnitudeRangeMinimum); - - const double doubleMin = jlimit (0.0, (double) std::numeric_limits::max(), magnitudeRangeMinimum * std::numeric_limits::max()); - const double doubleMax = jlimit (doubleMin, (double) std::numeric_limits::max(), magnitudeRangeMaximum * std::numeric_limits::max()); - const int intMagnitudeRangeMinimum = roundToInt (doubleMin); - const int intMagnitudeRangeMaximum = roundToInt (doubleMax); - - while (numSamplesToSearch != 0) - { - const int numThisTime = (int) jmin (abs64 (numSamplesToSearch), (int64) bufferSize); - int64 bufferStart = startSample; - - if (numSamplesToSearch < 0) - bufferStart -= numThisTime; - - if (bufferStart >= (int) lengthInSamples) - break; - - read (tempBuffer, 2, bufferStart, numThisTime, false); - - int num = numThisTime; - while (--num >= 0) - { - if (numSamplesToSearch < 0) - --startSample; - - bool matches = false; - const int index = (int) (startSample - bufferStart); - - if (usesFloatingPointData) - { - const float sample1 = std::abs (((float*) tempBuffer[0]) [index]); - - if (sample1 >= magnitudeRangeMinimum - && sample1 <= magnitudeRangeMaximum) - { - matches = true; - } - else if (numChannels > 1) - { - const float sample2 = std::abs (((float*) tempBuffer[1]) [index]); - - matches = (sample2 >= magnitudeRangeMinimum - && sample2 <= magnitudeRangeMaximum); - } - } - else - { - const int sample1 = abs (tempBuffer[0] [index]); - - if (sample1 >= intMagnitudeRangeMinimum - && sample1 <= intMagnitudeRangeMaximum) - { - matches = true; - } - else if (numChannels > 1) - { - const int sample2 = abs (tempBuffer[1][index]); - - matches = (sample2 >= intMagnitudeRangeMinimum - && sample2 <= intMagnitudeRangeMaximum); - } - } - - if (matches) - { - if (firstMatchPos < 0) - firstMatchPos = startSample; - - if (++consecutive >= minimumConsecutiveSamples) - { - if (firstMatchPos < 0 || firstMatchPos >= lengthInSamples) - return -1; - - return firstMatchPos; - } - } - else - { - consecutive = 0; - firstMatchPos = -1; - } - - if (numSamplesToSearch > 0) - ++startSample; - } - - if (numSamplesToSearch > 0) - numSamplesToSearch -= numThisTime; - else - numSamplesToSearch += numThisTime; - } - - return -1; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioFormatReader.cpp ***/ - - -/*** Start of inlined file: juce_AudioFormatWriter.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioFormatWriter::AudioFormatWriter (OutputStream* const out, - const String& formatName_, - const double rate, - const unsigned int numChannels_, - const unsigned int bitsPerSample_) - : sampleRate (rate), - numChannels (numChannels_), - bitsPerSample (bitsPerSample_), - usesFloatingPointData (false), - output (out), - formatName (formatName_) -{ -} - -AudioFormatWriter::~AudioFormatWriter() -{ - delete output; -} - -bool AudioFormatWriter::writeFromAudioReader (AudioFormatReader& reader, - int64 startSample, - int64 numSamplesToRead) -{ - const int bufferSize = 16384; - AudioSampleBuffer tempBuffer (numChannels, bufferSize); - - int* buffers [128] = { 0 }; - - for (int i = tempBuffer.getNumChannels(); --i >= 0;) - buffers[i] = reinterpret_cast (tempBuffer.getSampleData (i, 0)); - - if (numSamplesToRead < 0) - numSamplesToRead = reader.lengthInSamples; - - while (numSamplesToRead > 0) - { - const int numToDo = (int) jmin (numSamplesToRead, (int64) bufferSize); - - if (! reader.read (buffers, numChannels, startSample, numToDo, false)) - return false; - - if (reader.usesFloatingPointData != isFloatingPoint()) - { - int** bufferChan = buffers; - - while (*bufferChan != nullptr) - { - int* b = *bufferChan++; - - if (isFloatingPoint()) - { - // int -> float - const double factor = 1.0 / std::numeric_limits::max(); - - for (int i = 0; i < numToDo; ++i) - reinterpret_cast (b)[i] = (float) (factor * b[i]); - } - else - { - // float -> int - for (int i = 0; i < numToDo; ++i) - { - const double samp = *(const float*) b; - - if (samp <= -1.0) - *b++ = std::numeric_limits::min(); - else if (samp >= 1.0) - *b++ = std::numeric_limits::max(); - else - *b++ = roundToInt (std::numeric_limits::max() * samp); - } - } - } - } - - if (! write (const_cast (buffers), numToDo)) - return false; - - numSamplesToRead -= numToDo; - startSample += numToDo; - } - - return true; -} - -bool AudioFormatWriter::writeFromAudioSource (AudioSource& source, int numSamplesToRead, const int samplesPerBlock) -{ - AudioSampleBuffer tempBuffer (getNumChannels(), samplesPerBlock); - - while (numSamplesToRead > 0) - { - const int numToDo = jmin (numSamplesToRead, samplesPerBlock); - - AudioSourceChannelInfo info; - info.buffer = &tempBuffer; - info.startSample = 0; - info.numSamples = numToDo; - info.clearActiveBufferRegion(); - - source.getNextAudioBlock (info); - - if (! writeFromAudioSampleBuffer (tempBuffer, 0, numToDo)) - return false; - - numSamplesToRead -= numToDo; - } - - return true; -} - -bool AudioFormatWriter::writeFromAudioSampleBuffer (const AudioSampleBuffer& source, int startSample, int numSamples) -{ - jassert (startSample >= 0 && startSample + numSamples <= source.getNumSamples() && source.getNumChannels() > 0); - - if (numSamples <= 0) - return true; - - HeapBlock tempBuffer; - HeapBlock chans (numChannels + 1); - chans [numChannels] = 0; - - if (isFloatingPoint()) - { - for (int i = numChannels; --i >= 0;) - chans[i] = reinterpret_cast (source.getSampleData (i, startSample)); - } - else - { - tempBuffer.malloc (numSamples * numChannels); - - for (unsigned int i = 0; i < numChannels; ++i) - { - typedef AudioData::Pointer DestSampleType; - typedef AudioData::Pointer SourceSampleType; - - DestSampleType destData (chans[i] = tempBuffer + i * numSamples); - SourceSampleType sourceData (source.getSampleData (i, startSample)); - destData.convertSamples (sourceData, numSamples); - } - } - - return write ((const int**) chans.getData(), numSamples); -} - -class AudioFormatWriter::ThreadedWriter::Buffer : public TimeSliceClient, - public AbstractFifo -{ -public: - Buffer (TimeSliceThread& timeSliceThread_, AudioFormatWriter* writer_, int numChannels, int bufferSize_) - : AbstractFifo (bufferSize_), - buffer (numChannels, bufferSize_), - timeSliceThread (timeSliceThread_), - writer (writer_), - thumbnailToUpdate (nullptr), - samplesWritten (0), - isRunning (true) - { - timeSliceThread.addTimeSliceClient (this); - } - - ~Buffer() - { - isRunning = false; - timeSliceThread.removeTimeSliceClient (this); - - while (writePendingData() == 0) - {} - } - - bool write (const float** data, int numSamples) - { - if (numSamples <= 0 || ! isRunning) - return true; - - jassert (timeSliceThread.isThreadRunning()); // you need to get your thread running before pumping data into this! - - int start1, size1, start2, size2; - prepareToWrite (numSamples, start1, size1, start2, size2); - - if (size1 + size2 < numSamples) - return false; - - for (int i = buffer.getNumChannels(); --i >= 0;) - { - buffer.copyFrom (i, start1, data[i], size1); - buffer.copyFrom (i, start2, data[i] + size1, size2); - } - - finishedWrite (size1 + size2); - timeSliceThread.notify(); - return true; - } - - int useTimeSlice() - { - return writePendingData(); - } - - int writePendingData() - { - const int numToDo = getTotalSize() / 4; - - int start1, size1, start2, size2; - prepareToRead (numToDo, start1, size1, start2, size2); - - if (size1 <= 0) - return 10; - - writer->writeFromAudioSampleBuffer (buffer, start1, size1); - - const ScopedLock sl (thumbnailLock); - if (thumbnailToUpdate != nullptr) - thumbnailToUpdate->addBlock (samplesWritten, buffer, start1, size1); - - samplesWritten += size1; - - if (size2 > 0) - { - writer->writeFromAudioSampleBuffer (buffer, start2, size2); - - if (thumbnailToUpdate != nullptr) - thumbnailToUpdate->addBlock (samplesWritten, buffer, start2, size2); - - samplesWritten += size2; - } - - finishedRead (size1 + size2); - return 0; - } - - void setThumbnail (AudioThumbnail* thumb) - { - if (thumb != nullptr) - thumb->reset (buffer.getNumChannels(), writer->getSampleRate(), 0); - - const ScopedLock sl (thumbnailLock); - thumbnailToUpdate = thumb; - samplesWritten = 0; - } - -private: - AudioSampleBuffer buffer; - TimeSliceThread& timeSliceThread; - ScopedPointer writer; - CriticalSection thumbnailLock; - AudioThumbnail* thumbnailToUpdate; - int64 samplesWritten; - volatile bool isRunning; - - JUCE_DECLARE_NON_COPYABLE (Buffer); -}; - -AudioFormatWriter::ThreadedWriter::ThreadedWriter (AudioFormatWriter* writer, TimeSliceThread& backgroundThread, int numSamplesToBuffer) - : buffer (new AudioFormatWriter::ThreadedWriter::Buffer (backgroundThread, writer, writer->numChannels, numSamplesToBuffer)) -{ -} - -AudioFormatWriter::ThreadedWriter::~ThreadedWriter() -{ -} - -bool AudioFormatWriter::ThreadedWriter::write (const float** data, int numSamples) -{ - return buffer->write (data, numSamples); -} - -void AudioFormatWriter::ThreadedWriter::setThumbnailToUpdate (AudioThumbnail* thumb) -{ - buffer->setThumbnail (thumb); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioFormatWriter.cpp ***/ - - -/*** Start of inlined file: juce_AudioFormatManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioFormatManager::AudioFormatManager() - : defaultFormatIndex (0) -{ -} - -AudioFormatManager::~AudioFormatManager() -{ -} - -void AudioFormatManager::registerFormat (AudioFormat* newFormat, const bool makeThisTheDefaultFormat) -{ - jassert (newFormat != nullptr); - - if (newFormat != nullptr) - { - #if JUCE_DEBUG - for (int i = getNumKnownFormats(); --i >= 0;) - { - if (getKnownFormat (i)->getFormatName() == newFormat->getFormatName()) - { - jassertfalse; // trying to add the same format twice! - } - } - #endif - - if (makeThisTheDefaultFormat) - defaultFormatIndex = getNumKnownFormats(); - - knownFormats.add (newFormat); - } -} - -void AudioFormatManager::registerBasicFormats() -{ - #if JUCE_MAC - registerFormat (new AiffAudioFormat(), true); - registerFormat (new WavAudioFormat(), false); - registerFormat (new CoreAudioFormat(), false); - #else - registerFormat (new WavAudioFormat(), true); - registerFormat (new AiffAudioFormat(), false); - #endif - - #if JUCE_USE_FLAC - registerFormat (new FlacAudioFormat(), false); - #endif - - #if JUCE_USE_OGGVORBIS - registerFormat (new OggVorbisAudioFormat(), false); - #endif -} - -void AudioFormatManager::clearFormats() -{ - knownFormats.clear(); - defaultFormatIndex = 0; -} - -int AudioFormatManager::getNumKnownFormats() const -{ - return knownFormats.size(); -} - -AudioFormat* AudioFormatManager::getKnownFormat (const int index) const -{ - return knownFormats [index]; -} - -AudioFormat* AudioFormatManager::getDefaultFormat() const -{ - return getKnownFormat (defaultFormatIndex); -} - -AudioFormat* AudioFormatManager::findFormatForFileExtension (const String& fileExtension) const -{ - String e (fileExtension); - if (! e.startsWithChar ('.')) - e = "." + e; - - for (int i = 0; i < getNumKnownFormats(); ++i) - if (getKnownFormat(i)->getFileExtensions().contains (e, true)) - return getKnownFormat(i); - - return nullptr; -} - -String AudioFormatManager::getWildcardForAllFormats() const -{ - StringArray allExtensions; - - int i; - for (i = 0; i < getNumKnownFormats(); ++i) - allExtensions.addArray (getKnownFormat (i)->getFileExtensions()); - - allExtensions.trim(); - allExtensions.removeEmptyStrings(); - - String s; - for (i = 0; i < allExtensions.size(); ++i) - { - s << '*'; - - if (! allExtensions[i].startsWithChar ('.')) - s << '.'; - - s << allExtensions[i]; - - if (i < allExtensions.size() - 1) - s << ';'; - } - - return s; -} - -AudioFormatReader* AudioFormatManager::createReaderFor (const File& file) -{ - // you need to actually register some formats before the manager can - // use them to open a file! - jassert (getNumKnownFormats() > 0); - - for (int i = 0; i < getNumKnownFormats(); ++i) - { - AudioFormat* const af = getKnownFormat(i); - - if (af->canHandleFile (file)) - { - InputStream* const in = file.createInputStream(); - - if (in != nullptr) - { - AudioFormatReader* const r = af->createReaderFor (in, true); - - if (r != nullptr) - return r; - } - } - } - - return nullptr; -} - -AudioFormatReader* AudioFormatManager::createReaderFor (InputStream* audioFileStream) -{ - // you need to actually register some formats before the manager can - // use them to open a file! - jassert (getNumKnownFormats() > 0); - - ScopedPointer in (audioFileStream); - - if (in != nullptr) - { - const int64 originalStreamPos = in->getPosition(); - - for (int i = 0; i < getNumKnownFormats(); ++i) - { - AudioFormatReader* const r = getKnownFormat(i)->createReaderFor (in, false); - - if (r != nullptr) - { - in.release(); - return r; - } - - in->setPosition (originalStreamPos); - - // the stream that is passed-in must be capable of being repositioned so - // that all the formats can have a go at opening it. - jassert (in->getPosition() == originalStreamPos); - } - } - - return nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioFormatManager.cpp ***/ - - -/*** Start of inlined file: juce_AudioSubsectionReader.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioSubsectionReader::AudioSubsectionReader (AudioFormatReader* const source_, - const int64 startSample_, - const int64 length_, - const bool deleteSourceWhenDeleted_) - : AudioFormatReader (0, source_->getFormatName()), - source (source_), - startSample (startSample_), - deleteSourceWhenDeleted (deleteSourceWhenDeleted_) -{ - length = jmin (jmax ((int64) 0, source->lengthInSamples - startSample), length_); - - sampleRate = source->sampleRate; - bitsPerSample = source->bitsPerSample; - lengthInSamples = length; - numChannels = source->numChannels; - usesFloatingPointData = source->usesFloatingPointData; -} - -AudioSubsectionReader::~AudioSubsectionReader() -{ - if (deleteSourceWhenDeleted) - delete source; -} - -bool AudioSubsectionReader::readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) -{ - if (startSampleInFile + numSamples > length) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != nullptr) - zeromem (destSamples[i], sizeof (int) * numSamples); - - numSamples = jmin (numSamples, (int) (length - startSampleInFile)); - - if (numSamples <= 0) - return true; - } - - return source->readSamples (destSamples, numDestChannels, startOffsetInDestBuffer, - startSampleInFile + startSample, numSamples); -} - -void AudioSubsectionReader::readMaxLevels (int64 startSampleInFile, - int64 numSamples, - float& lowestLeft, - float& highestLeft, - float& lowestRight, - float& highestRight) -{ - startSampleInFile = jmax ((int64) 0, startSampleInFile); - numSamples = jmax ((int64) 0, jmin (numSamples, length - startSampleInFile)); - - source->readMaxLevels (startSampleInFile + startSample, numSamples, - lowestLeft, highestLeft, - lowestRight, highestRight); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioSubsectionReader.cpp ***/ - - -/*** Start of inlined file: juce_AudioThumbnail.cpp ***/ -BEGIN_JUCE_NAMESPACE - -struct AudioThumbnail::MinMaxValue -{ - MinMaxValue() noexcept - { - values[0] = 0; - values[1] = 0; - } - - inline void set (const char newMin, const char newMax) noexcept - { - values[0] = newMin; - values[1] = newMax; - } - - inline char getMinValue() const noexcept { return values[0]; } - inline char getMaxValue() const noexcept { return values[1]; } - - inline void setFloat (const float newMin, const float newMax) noexcept - { - values[0] = (char) jlimit (-128, 127, roundFloatToInt (newMin * 127.0f)); - values[1] = (char) jlimit (-128, 127, roundFloatToInt (newMax * 127.0f)); - - if (values[0] == values[1]) - { - if (values[1] == 127) - values[0]--; - else - values[1]++; - } - } - - inline bool isNonZero() const noexcept - { - return values[1] > values[0]; - } - - inline int getPeak() const noexcept - { - return jmax (std::abs ((int) values[0]), - std::abs ((int) values[1])); - } - - inline void read (InputStream& input) { input.read (values, 2); } - inline void write (OutputStream& output) { output.write (values, 2); } - -private: - char values[2]; -}; - -class AudioThumbnail::LevelDataSource : public TimeSliceClient -{ -public: - LevelDataSource (AudioThumbnail& owner_, AudioFormatReader* newReader, int64 hash) - : lengthInSamples (0), numSamplesFinished (0), sampleRate (0), numChannels (0), - hashCode (hash), owner (owner_), reader (newReader) - { - } - - LevelDataSource (AudioThumbnail& owner_, InputSource* source_) - : lengthInSamples (0), numSamplesFinished (0), sampleRate (0), numChannels (0), - hashCode (source_->hashCode()), owner (owner_), source (source_) - { - } - - ~LevelDataSource() - { - owner.cache.removeTimeSliceClient (this); - } - - enum { timeBeforeDeletingReader = 1000 }; - - void initialise (int64 numSamplesFinished_) - { - const ScopedLock sl (readerLock); - - numSamplesFinished = numSamplesFinished_; - - createReader(); - - if (reader != nullptr) - { - lengthInSamples = reader->lengthInSamples; - numChannels = reader->numChannels; - sampleRate = reader->sampleRate; - - if (lengthInSamples <= 0 || isFullyLoaded()) - reader = nullptr; - else - owner.cache.addTimeSliceClient (this); - } - } - - void getLevels (int64 startSample, int numSamples, Array& levels) - { - const ScopedLock sl (readerLock); - - if (reader == nullptr) - { - createReader(); - - if (reader != nullptr) - owner.cache.addTimeSliceClient (this); - } - - if (reader != nullptr) - { - float l[4] = { 0 }; - reader->readMaxLevels (startSample, numSamples, l[0], l[1], l[2], l[3]); - - levels.clearQuick(); - levels.addArray ((const float*) l, 4); - } - } - - void releaseResources() - { - const ScopedLock sl (readerLock); - reader = nullptr; - } - - int useTimeSlice() - { - if (isFullyLoaded()) - { - if (reader != nullptr && source != nullptr) - releaseResources(); - - return -1; - } - - bool justFinished = false; - - { - const ScopedLock sl (readerLock); - - createReader(); - - if (reader != nullptr) - { - if (! readNextBlock()) - return 0; - - justFinished = true; - } - } - - if (justFinished) - owner.cache.storeThumb (owner, hashCode); - - return timeBeforeDeletingReader; - } - - bool isFullyLoaded() const noexcept - { - return numSamplesFinished >= lengthInSamples; - } - - inline int sampleToThumbSample (const int64 originalSample) const noexcept - { - return (int) (originalSample / owner.samplesPerThumbSample); - } - - int64 lengthInSamples, numSamplesFinished; - double sampleRate; - int numChannels; - int64 hashCode; - -private: - AudioThumbnail& owner; - ScopedPointer source; - ScopedPointer reader; - CriticalSection readerLock; - - void createReader() - { - if (reader == nullptr && source != nullptr) - { - InputStream* audioFileStream = source->createInputStream(); - - if (audioFileStream != nullptr) - reader = owner.formatManagerToUse.createReaderFor (audioFileStream); - } - } - - bool readNextBlock() - { - jassert (reader != nullptr); - - if (! isFullyLoaded()) - { - const int numToDo = (int) jmin (256 * (int64) owner.samplesPerThumbSample, lengthInSamples - numSamplesFinished); - - if (numToDo > 0) - { - int64 startSample = numSamplesFinished; - - const int firstThumbIndex = sampleToThumbSample (startSample); - const int lastThumbIndex = sampleToThumbSample (startSample + numToDo); - const int numThumbSamps = lastThumbIndex - firstThumbIndex; - - HeapBlock levelData (numThumbSamps * 2); - MinMaxValue* levels[2] = { levelData, levelData + numThumbSamps }; - - for (int i = 0; i < numThumbSamps; ++i) - { - float lowestLeft, highestLeft, lowestRight, highestRight; - - reader->readMaxLevels ((firstThumbIndex + i) * owner.samplesPerThumbSample, owner.samplesPerThumbSample, - lowestLeft, highestLeft, lowestRight, highestRight); - - levels[0][i].setFloat (lowestLeft, highestLeft); - levels[1][i].setFloat (lowestRight, highestRight); - } - - { - const ScopedUnlock su (readerLock); - owner.setLevels (levels, firstThumbIndex, 2, numThumbSamps); - } - - numSamplesFinished += numToDo; - } - } - - return isFullyLoaded(); - } -}; - -class AudioThumbnail::ThumbData -{ -public: - ThumbData (const int numThumbSamples) - : peakLevel (-1) - { - ensureSize (numThumbSamples); - } - - inline MinMaxValue* getData (const int thumbSampleIndex) noexcept - { - jassert (thumbSampleIndex < data.size()); - return data.getRawDataPointer() + thumbSampleIndex; - } - - int getSize() const noexcept - { - return data.size(); - } - - void getMinMax (int startSample, int endSample, MinMaxValue& result) const noexcept - { - if (startSample >= 0) - { - endSample = jmin (endSample, data.size() - 1); - - char mx = -128; - char mn = 127; - - while (startSample <= endSample) - { - const MinMaxValue& v = data.getReference (startSample); - - if (v.getMinValue() < mn) mn = v.getMinValue(); - if (v.getMaxValue() > mx) mx = v.getMaxValue(); - - ++startSample; - } - - if (mn <= mx) - { - result.set (mn, mx); - return; - } - } - - result.set (1, 0); - } - - void write (const MinMaxValue* const source, const int startIndex, const int numValues) - { - resetPeak(); - - if (startIndex + numValues > data.size()) - ensureSize (startIndex + numValues); - - MinMaxValue* const dest = getData (startIndex); - - for (int i = 0; i < numValues; ++i) - dest[i] = source[i]; - } - - void resetPeak() noexcept - { - peakLevel = -1; - } - - int getPeak() noexcept - { - if (peakLevel < 0) - { - for (int i = 0; i < data.size(); ++i) - { - const int peak = data[i].getPeak(); - if (peak > peakLevel) - peakLevel = peak; - } - } - - return peakLevel; - } - -private: - Array data; - int peakLevel; - - void ensureSize (const int thumbSamples) - { - const int extraNeeded = thumbSamples - data.size(); - if (extraNeeded > 0) - data.insertMultiple (-1, MinMaxValue(), extraNeeded); - } -}; - -class AudioThumbnail::CachedWindow -{ -public: - CachedWindow() - : cachedStart (0), cachedTimePerPixel (0), - numChannelsCached (0), numSamplesCached (0), - cacheNeedsRefilling (true) - { - } - - void invalidate() - { - cacheNeedsRefilling = true; - } - - void drawChannel (Graphics& g, const Rectangle& area, - const double startTime, const double endTime, - const int channelNum, const float verticalZoomFactor, - const double sampleRate, const int numChannels, const int samplesPerThumbSample, - LevelDataSource* levelData, const OwnedArray& channels) - { - refillCache (area.getWidth(), startTime, endTime, sampleRate, - numChannels, samplesPerThumbSample, levelData, channels); - - if (isPositiveAndBelow (channelNum, numChannelsCached)) - { - const Rectangle clip (g.getClipBounds().getIntersection (area.withWidth (jmin (numSamplesCached, area.getWidth())))); - - if (! clip.isEmpty()) - { - const float topY = (float) area.getY(); - const float bottomY = (float) area.getBottom(); - const float midY = (topY + bottomY) * 0.5f; - const float vscale = verticalZoomFactor * (bottomY - topY) / 256.0f; - - const MinMaxValue* cacheData = getData (channelNum, clip.getX() - area.getX()); - - int x = clip.getX(); - for (int w = clip.getWidth(); --w >= 0;) - { - if (cacheData->isNonZero()) - g.drawVerticalLine (x, jmax (midY - cacheData->getMaxValue() * vscale - 0.3f, topY), - jmin (midY - cacheData->getMinValue() * vscale + 0.3f, bottomY)); - - ++x; - ++cacheData; - } - } - } - } - -private: - Array data; - double cachedStart, cachedTimePerPixel; - int numChannelsCached, numSamplesCached; - bool cacheNeedsRefilling; - - void refillCache (const int numSamples, double startTime, const double endTime, - const double sampleRate, const int numChannels, const int samplesPerThumbSample, - LevelDataSource* levelData, const OwnedArray& channels) - { - const double timePerPixel = (endTime - startTime) / numSamples; - - if (numSamples <= 0 || timePerPixel <= 0.0 || sampleRate <= 0) - { - invalidate(); - return; - } - - if (numSamples == numSamplesCached - && numChannelsCached == numChannels - && startTime == cachedStart - && timePerPixel == cachedTimePerPixel - && ! cacheNeedsRefilling) - { - return; - } - - numSamplesCached = numSamples; - numChannelsCached = numChannels; - cachedStart = startTime; - cachedTimePerPixel = timePerPixel; - cacheNeedsRefilling = false; - - ensureSize (numSamples); - - if (timePerPixel * sampleRate <= samplesPerThumbSample && levelData != nullptr) - { - int sample = roundToInt (startTime * sampleRate); - Array levels; - - int i; - for (i = 0; i < numSamples; ++i) - { - const int nextSample = roundToInt ((startTime + timePerPixel) * sampleRate); - - if (sample >= 0) - { - if (sample >= levelData->lengthInSamples) - break; - - levelData->getLevels (sample, jmax (1, nextSample - sample), levels); - - const int numChans = jmin (levels.size() / 2, numChannelsCached); - - for (int chan = 0; chan < numChans; ++chan) - getData (chan, i)->setFloat (levels.getUnchecked (chan * 2), - levels.getUnchecked (chan * 2 + 1)); - } - - startTime += timePerPixel; - sample = nextSample; - } - - numSamplesCached = i; - } - else - { - jassert (channels.size() == numChannelsCached); - - for (int channelNum = 0; channelNum < numChannelsCached; ++channelNum) - { - ThumbData* channelData = channels.getUnchecked (channelNum); - MinMaxValue* cacheData = getData (channelNum, 0); - - const double timeToThumbSampleFactor = sampleRate / (double) samplesPerThumbSample; - - startTime = cachedStart; - int sample = roundToInt (startTime * timeToThumbSampleFactor); - - for (int i = numSamples; --i >= 0;) - { - const int nextSample = roundToInt ((startTime + timePerPixel) * timeToThumbSampleFactor); - - channelData->getMinMax (sample, nextSample, *cacheData); - - ++cacheData; - startTime += timePerPixel; - sample = nextSample; - } - } - } - } - - MinMaxValue* getData (const int channelNum, const int cacheIndex) noexcept - { - jassert (isPositiveAndBelow (channelNum, numChannelsCached) && isPositiveAndBelow (cacheIndex, data.size())); - - return data.getRawDataPointer() + channelNum * numSamplesCached - + cacheIndex; - } - - void ensureSize (const int numSamples) - { - const int itemsRequired = numSamples * numChannelsCached; - - if (data.size() < itemsRequired) - data.insertMultiple (-1, MinMaxValue(), itemsRequired - data.size()); - } -}; - -AudioThumbnail::AudioThumbnail (const int originalSamplesPerThumbnailSample, - AudioFormatManager& formatManagerToUse_, - AudioThumbnailCache& cacheToUse) - : formatManagerToUse (formatManagerToUse_), - cache (cacheToUse), - window (new CachedWindow()), - samplesPerThumbSample (originalSamplesPerThumbnailSample), - totalSamples (0), - numChannels (0), - sampleRate (0) -{ -} - -AudioThumbnail::~AudioThumbnail() -{ - clear(); -} - -void AudioThumbnail::clear() -{ - source = nullptr; - clearChannelData(); -} - -void AudioThumbnail::clearChannelData() -{ - const ScopedLock sl (lock); - window->invalidate(); - channels.clear(); - totalSamples = numSamplesFinished = 0; - numChannels = 0; - sampleRate = 0; - - sendChangeMessage(); -} - -void AudioThumbnail::reset (int newNumChannels, double newSampleRate, int64 totalSamplesInSource) -{ - clear(); - - numChannels = newNumChannels; - sampleRate = newSampleRate; - totalSamples = totalSamplesInSource; - - createChannels (1 + (int) (totalSamplesInSource / samplesPerThumbSample)); -} - -void AudioThumbnail::createChannels (const int length) -{ - while (channels.size() < numChannels) - channels.add (new ThumbData (length)); -} - -void AudioThumbnail::loadFrom (InputStream& rawInput) -{ - clearChannelData(); - - BufferedInputStream input (rawInput, 4096); - - if (input.readByte() != 'j' || input.readByte() != 'a' || input.readByte() != 't' || input.readByte() != 'm') - return; - - samplesPerThumbSample = input.readInt(); - totalSamples = input.readInt64(); // Total number of source samples. - numSamplesFinished = input.readInt64(); // Number of valid source samples that have been read into the thumbnail. - int32 numThumbnailSamples = input.readInt(); // Number of samples in the thumbnail data. - numChannels = input.readInt(); // Number of audio channels. - sampleRate = input.readInt(); // Source sample rate. - input.skipNextBytes (16); // (reserved) - - createChannels (numThumbnailSamples); - - for (int i = 0; i < numThumbnailSamples; ++i) - for (int chan = 0; chan < numChannels; ++chan) - channels.getUnchecked(chan)->getData(i)->read (input); -} - -void AudioThumbnail::saveTo (OutputStream& output) const -{ - const ScopedLock sl (lock); - - const int numThumbnailSamples = channels.size() == 0 ? 0 : channels.getUnchecked(0)->getSize(); - - output.write ("jatm", 4); - output.writeInt (samplesPerThumbSample); - output.writeInt64 (totalSamples); - output.writeInt64 (numSamplesFinished); - output.writeInt (numThumbnailSamples); - output.writeInt (numChannels); - output.writeInt ((int) sampleRate); - output.writeInt64 (0); - output.writeInt64 (0); - - for (int i = 0; i < numThumbnailSamples; ++i) - for (int chan = 0; chan < numChannels; ++chan) - channels.getUnchecked(chan)->getData(i)->write (output); -} - -bool AudioThumbnail::setDataSource (LevelDataSource* newSource) -{ - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - numSamplesFinished = 0; - - if (cache.loadThumb (*this, newSource->hashCode) && isFullyLoaded()) - { - source = newSource; // (make sure this isn't done before loadThumb is called) - - source->lengthInSamples = totalSamples; - source->sampleRate = sampleRate; - source->numChannels = numChannels; - source->numSamplesFinished = numSamplesFinished; - } - else - { - source = newSource; // (make sure this isn't done before loadThumb is called) - - const ScopedLock sl (lock); - source->initialise (numSamplesFinished); - - totalSamples = source->lengthInSamples; - sampleRate = source->sampleRate; - numChannels = source->numChannels; - - createChannels (1 + (int) (totalSamples / samplesPerThumbSample)); - } - - return sampleRate > 0 && totalSamples > 0; -} - -bool AudioThumbnail::setSource (InputSource* const newSource) -{ - clear(); - - return newSource != nullptr && setDataSource (new LevelDataSource (*this, newSource)); -} - -void AudioThumbnail::setReader (AudioFormatReader* newReader, int64 hash) -{ - clear(); - - if (newReader != nullptr) - setDataSource (new LevelDataSource (*this, newReader, hash)); -} - -int64 AudioThumbnail::getHashCode() const -{ - return source == nullptr ? 0 : source->hashCode; -} - -void AudioThumbnail::addBlock (const int64 startSample, const AudioSampleBuffer& incoming, - int startOffsetInBuffer, int numSamples) -{ - jassert (startSample >= 0); - - const int firstThumbIndex = (int) (startSample / samplesPerThumbSample); - const int lastThumbIndex = (int) ((startSample + numSamples + (samplesPerThumbSample - 1)) / samplesPerThumbSample); - const int numToDo = lastThumbIndex - firstThumbIndex; - - if (numToDo > 0) - { - const int numChans = jmin (channels.size(), incoming.getNumChannels()); - - const HeapBlock thumbData (numToDo * numChans); - const HeapBlock thumbChannels (numChans); - - for (int chan = 0; chan < numChans; ++chan) - { - const float* const sourceData = incoming.getSampleData (chan, startOffsetInBuffer); - MinMaxValue* const dest = thumbData + numToDo * chan; - thumbChannels [chan] = dest; - - for (int i = 0; i < numToDo; ++i) - { - float low, high; - const int start = i * samplesPerThumbSample; - findMinAndMax (sourceData + start, jmin (samplesPerThumbSample, numSamples - start), low, high); - dest[i].setFloat (low, high); - } - } - - setLevels (thumbChannels, firstThumbIndex, numChans, numToDo); - } -} - -void AudioThumbnail::setLevels (const MinMaxValue* const* values, int thumbIndex, int numChans, int numValues) -{ - const ScopedLock sl (lock); - - for (int i = jmin (numChans, channels.size()); --i >= 0;) - channels.getUnchecked(i)->write (values[i], thumbIndex, numValues); - - const int64 start = thumbIndex * (int64) samplesPerThumbSample; - const int64 end = (thumbIndex + numValues) * (int64) samplesPerThumbSample; - - if (numSamplesFinished >= start && end > numSamplesFinished) - numSamplesFinished = end; - - totalSamples = jmax (numSamplesFinished, totalSamples); - window->invalidate(); - sendChangeMessage(); -} - -int AudioThumbnail::getNumChannels() const noexcept -{ - return numChannels; -} - -double AudioThumbnail::getTotalLength() const noexcept -{ - return sampleRate > 0 ? (totalSamples / sampleRate) : 0; -} - -bool AudioThumbnail::isFullyLoaded() const noexcept -{ - return numSamplesFinished >= totalSamples - samplesPerThumbSample; -} - -int64 AudioThumbnail::getNumSamplesFinished() const noexcept -{ - return numSamplesFinished; -} - -float AudioThumbnail::getApproximatePeak() const -{ - int peak = 0; - - for (int i = channels.size(); --i >= 0;) - peak = jmax (peak, channels.getUnchecked(i)->getPeak()); - - return jlimit (0, 127, peak) / 127.0f; -} - -void AudioThumbnail::getApproximateMinMax (const double startTime, const double endTime, const int channelIndex, - float& minValue, float& maxValue) const noexcept -{ - MinMaxValue result; - const ThumbData* const data = channels [channelIndex]; - - if (data != nullptr && sampleRate > 0) - { - const int firstThumbIndex = (int) ((startTime * sampleRate) / samplesPerThumbSample); - const int lastThumbIndex = (int) (((endTime * sampleRate) + samplesPerThumbSample - 1) / samplesPerThumbSample); - - data->getMinMax (jmax (0, firstThumbIndex), lastThumbIndex, result); - } - - minValue = result.getMinValue() / 128.0f; - maxValue = result.getMaxValue() / 128.0f; -} - -void AudioThumbnail::drawChannel (Graphics& g, const Rectangle& area, double startTime, - double endTime, int channelNum, float verticalZoomFactor) -{ - const ScopedLock sl (lock); - - window->drawChannel (g, area, startTime, endTime, channelNum, verticalZoomFactor, - sampleRate, numChannels, samplesPerThumbSample, source, channels); -} - -void AudioThumbnail::drawChannels (Graphics& g, const Rectangle& area, double startTimeSeconds, - double endTimeSeconds, float verticalZoomFactor) -{ - for (int i = 0; i < numChannels; ++i) - { - const int y1 = roundToInt ((i * area.getHeight()) / numChannels); - const int y2 = roundToInt (((i + 1) * area.getHeight()) / numChannels); - - drawChannel (g, Rectangle (area.getX(), area.getY() + y1, area.getWidth(), y2 - y1), - startTimeSeconds, endTimeSeconds, i, verticalZoomFactor); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioThumbnail.cpp ***/ - - -/*** Start of inlined file: juce_AudioThumbnailCache.cpp ***/ -BEGIN_JUCE_NAMESPACE - -struct ThumbnailCacheEntry -{ - int64 hash; - uint32 lastUsed; - MemoryBlock data; - - JUCE_LEAK_DETECTOR (ThumbnailCacheEntry); -}; - -AudioThumbnailCache::AudioThumbnailCache (const int maxNumThumbsToStore_) - : TimeSliceThread ("thumb cache"), - maxNumThumbsToStore (maxNumThumbsToStore_) -{ - startThread (2); -} - -AudioThumbnailCache::~AudioThumbnailCache() -{ -} - -ThumbnailCacheEntry* AudioThumbnailCache::findThumbFor (const int64 hash) const -{ - for (int i = thumbs.size(); --i >= 0;) - if (thumbs.getUnchecked(i)->hash == hash) - return thumbs.getUnchecked(i); - - return nullptr; -} - -bool AudioThumbnailCache::loadThumb (AudioThumbnail& thumb, const int64 hashCode) -{ - ThumbnailCacheEntry* te = findThumbFor (hashCode); - - if (te != nullptr) - { - te->lastUsed = Time::getMillisecondCounter(); - - MemoryInputStream in (te->data, false); - thumb.loadFrom (in); - return true; - } - - return false; -} - -void AudioThumbnailCache::storeThumb (const AudioThumbnail& thumb, - const int64 hashCode) -{ - ThumbnailCacheEntry* te = findThumbFor (hashCode); - - if (te == nullptr) - { - te = new ThumbnailCacheEntry(); - te->hash = hashCode; - - if (thumbs.size() < maxNumThumbsToStore) - { - thumbs.add (te); - } - else - { - int oldest = 0; - uint32 oldestTime = Time::getMillisecondCounter() + 1; - - for (int i = thumbs.size(); --i >= 0;) - { - if (thumbs.getUnchecked(i)->lastUsed < oldestTime) - { - oldest = i; - oldestTime = thumbs.getUnchecked(i)->lastUsed; - } - } - - thumbs.set (oldest, te); - } - } - - te->lastUsed = Time::getMillisecondCounter(); - - MemoryOutputStream out (te->data, false); - thumb.saveTo (out); -} - -void AudioThumbnailCache::clear() -{ - thumbs.clear(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioThumbnailCache.cpp ***/ - - -/*** Start of inlined file: juce_QuickTimeAudioFormat.cpp ***/ -#if JUCE_QUICKTIME && ! (JUCE_64BIT || JUCE_IOS) - -#if ! JUCE_WINDOWS - #define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers) - #include - #include - #include - #include - #include - #undef Point -#else - #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable : 4100) - #endif - - /* If you've got an include error here, you probably need to install the QuickTime SDK and - add its header directory to your include path. - - Alternatively, if you don't need any QuickTime services, just turn off the JUCE_QUICKTIME - flag in juce_Config.h - */ - #undef SIZE_MAX - #include - #include - #include - #include - #include - #undef SIZE_MAX - - #if JUCE_MSVC - #pragma warning (pop) - #endif -#endif - -BEGIN_JUCE_NAMESPACE - -bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle); - -static const char* const quickTimeFormatName = "QuickTime file"; -static const char* const quickTimeExtensions[] = { ".mov", ".mp3", ".mp4", ".m4a", 0 }; - -class QTAudioReader : public AudioFormatReader -{ -public: - QTAudioReader (InputStream* const input_, const int trackNum_) - : AudioFormatReader (input_, TRANS (quickTimeFormatName)), - ok (false), - movie (0), - trackNum (trackNum_), - lastSampleRead (0), - lastThreadId (0), - extractor (0), - dataHandle (0) - { - JUCE_AUTORELEASEPOOL - bufferList.calloc (256, 1); - - #if JUCE_WINDOWS - if (InitializeQTML (0) != noErr) - return; - #endif - - if (EnterMovies() != noErr) - return; - - bool opened = juce_OpenQuickTimeMovieFromStream (input_, movie, dataHandle); - - if (! opened) - return; - - { - const int numTracks = GetMovieTrackCount (movie); - int trackCount = 0; - - for (int i = 1; i <= numTracks; ++i) - { - track = GetMovieIndTrack (movie, i); - media = GetTrackMedia (track); - - OSType mediaType; - GetMediaHandlerDescription (media, &mediaType, 0, 0); - - if (mediaType == SoundMediaType - && trackCount++ == trackNum_) - { - ok = true; - break; - } - } - } - - if (! ok) - return; - - ok = false; - - lengthInSamples = GetMediaDecodeDuration (media); - usesFloatingPointData = false; - - samplesPerFrame = (int) (GetMediaDecodeDuration (media) / GetMediaSampleCount (media)); - - trackUnitsPerFrame = GetMovieTimeScale (movie) * samplesPerFrame - / GetMediaTimeScale (media); - - OSStatus err = MovieAudioExtractionBegin (movie, 0, &extractor); - - unsigned long output_layout_size; - err = MovieAudioExtractionGetPropertyInfo (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - 0, &output_layout_size, 0); - if (err != noErr) - return; - - HeapBlock qt_audio_channel_layout; - qt_audio_channel_layout.calloc (output_layout_size, 1); - - err = MovieAudioExtractionGetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - output_layout_size, qt_audio_channel_layout, 0); - - qt_audio_channel_layout[0].mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; - - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - output_layout_size, - qt_audio_channel_layout); - - err = MovieAudioExtractionGetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, - sizeof (inputStreamDesc), - &inputStreamDesc, 0); - if (err != noErr) - return; - - inputStreamDesc.mFormatFlags = kAudioFormatFlagIsSignedInteger - | kAudioFormatFlagIsPacked - | kAudioFormatFlagsNativeEndian; - inputStreamDesc.mBitsPerChannel = sizeof (SInt16) * 8; - inputStreamDesc.mChannelsPerFrame = jmin ((UInt32) 2, inputStreamDesc.mChannelsPerFrame); - inputStreamDesc.mBytesPerFrame = sizeof (SInt16) * inputStreamDesc.mChannelsPerFrame; - inputStreamDesc.mBytesPerPacket = inputStreamDesc.mBytesPerFrame; - - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, - sizeof (inputStreamDesc), - &inputStreamDesc); - if (err != noErr) - return; - - Boolean allChannelsDiscrete = false; - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Movie, - kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete, - sizeof (allChannelsDiscrete), - &allChannelsDiscrete); - - if (err != noErr) - return; - - bufferList->mNumberBuffers = 1; - bufferList->mBuffers[0].mNumberChannels = inputStreamDesc.mChannelsPerFrame; - bufferList->mBuffers[0].mDataByteSize = jmax ((UInt32) 4096, (UInt32) (samplesPerFrame * inputStreamDesc.mBytesPerFrame) + 16); - - dataBuffer.malloc (bufferList->mBuffers[0].mDataByteSize); - bufferList->mBuffers[0].mData = dataBuffer; - - sampleRate = inputStreamDesc.mSampleRate; - bitsPerSample = 16; - numChannels = inputStreamDesc.mChannelsPerFrame; - - detachThread(); - ok = true; - } - - ~QTAudioReader() - { - JUCE_AUTORELEASEPOOL - checkThreadIsAttached(); - - if (dataHandle != nullptr) - DisposeHandle (dataHandle); - - if (extractor != nullptr) - { - MovieAudioExtractionEnd (extractor); - extractor = nullptr; - } - - DisposeMovie (movie); - - #if JUCE_MAC - ExitMoviesOnThread (); - #endif - } - - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - JUCE_AUTORELEASEPOOL - checkThreadIsAttached(); - bool ok = true; - - while (numSamples > 0) - { - if (lastSampleRead != startSampleInFile) - { - TimeRecord time; - time.scale = (TimeScale) inputStreamDesc.mSampleRate; - time.base = 0; - time.value.hi = 0; - time.value.lo = (UInt32) startSampleInFile; - - OSStatus err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Movie, - kQTMovieAudioExtractionMoviePropertyID_CurrentTime, - sizeof (time), &time); - - if (err != noErr) - { - ok = false; - break; - } - } - - int framesToDo = jmin (numSamples, (int) (bufferList->mBuffers[0].mDataByteSize / inputStreamDesc.mBytesPerFrame)); - bufferList->mBuffers[0].mDataByteSize = inputStreamDesc.mBytesPerFrame * framesToDo; - - UInt32 outFlags = 0; - UInt32 actualNumFrames = framesToDo; - OSStatus err = MovieAudioExtractionFillBuffer (extractor, &actualNumFrames, bufferList, &outFlags); - if (err != noErr) - { - ok = false; - break; - } - - lastSampleRead = startSampleInFile + actualNumFrames; - const int samplesReceived = actualNumFrames; - - for (int j = numDestChannels; --j >= 0;) - { - if (destSamples[j] != nullptr) - { - const short* src = ((const short*) bufferList->mBuffers[0].mData) + j; - - for (int i = 0; i < samplesReceived; ++i) - { - destSamples[j][startOffsetInDestBuffer + i] = (*src << 16); - src += numChannels; - } - } - } - - startOffsetInDestBuffer += samplesReceived; - startSampleInFile += samplesReceived; - numSamples -= samplesReceived; - - if (((outFlags & kQTMovieAudioExtractionComplete) != 0 || samplesReceived == 0) && numSamples > 0) - { - for (int j = numDestChannels; --j >= 0;) - if (destSamples[j] != nullptr) - zeromem (destSamples[j] + startOffsetInDestBuffer, sizeof (int) * numSamples); - - break; - } - } - - detachThread(); - return ok; - } - - bool ok; - -private: - Movie movie; - Media media; - Track track; - const int trackNum; - double trackUnitsPerFrame; - int samplesPerFrame; - int64 lastSampleRead; - Thread::ThreadID lastThreadId; - MovieAudioExtractionRef extractor; - AudioStreamBasicDescription inputStreamDesc; - HeapBlock bufferList; - HeapBlock dataBuffer; - Handle dataHandle; - - void checkThreadIsAttached() - { - #if JUCE_MAC - if (Thread::getCurrentThreadId() != lastThreadId) - EnterMoviesOnThread (0); - AttachMovieToCurrentThread (movie); - #endif - } - - void detachThread() - { - #if JUCE_MAC - DetachMovieFromCurrentThread (movie); - #endif - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (QTAudioReader); -}; - -QuickTimeAudioFormat::QuickTimeAudioFormat() - : AudioFormat (TRANS (quickTimeFormatName), StringArray (quickTimeExtensions)) -{ -} - -QuickTimeAudioFormat::~QuickTimeAudioFormat() -{ -} - -const Array QuickTimeAudioFormat::getPossibleSampleRates() { return Array(); } -const Array QuickTimeAudioFormat::getPossibleBitDepths() { return Array(); } - -bool QuickTimeAudioFormat::canDoStereo() { return true; } -bool QuickTimeAudioFormat::canDoMono() { return true; } - -AudioFormatReader* QuickTimeAudioFormat::createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) -{ - ScopedPointer r (new QTAudioReader (sourceStream, 0)); - - if (r->ok) - return r.release(); - - if (! deleteStreamIfOpeningFails) - r->input = 0; - - return nullptr; -} - -AudioFormatWriter* QuickTimeAudioFormat::createWriterFor (OutputStream* /*streamToWriteTo*/, - double /*sampleRateToUse*/, - unsigned int /*numberOfChannels*/, - int /*bitsPerSample*/, - const StringPairArray& /*metadataValues*/, - int /*qualityOptionIndex*/) -{ - jassertfalse; // not yet implemented! - return nullptr; -} - -END_JUCE_NAMESPACE - -#endif - -/*** End of inlined file: juce_QuickTimeAudioFormat.cpp ***/ - - -/*** Start of inlined file: juce_WavAudioFormat.cpp ***/ -BEGIN_JUCE_NAMESPACE - -static const char* const wavFormatName = "WAV file"; -static const char* const wavExtensions[] = { ".wav", ".bwf", 0 }; - -const char* const WavAudioFormat::bwavDescription = "bwav description"; -const char* const WavAudioFormat::bwavOriginator = "bwav originator"; -const char* const WavAudioFormat::bwavOriginatorRef = "bwav originator ref"; -const char* const WavAudioFormat::bwavOriginationDate = "bwav origination date"; -const char* const WavAudioFormat::bwavOriginationTime = "bwav origination time"; -const char* const WavAudioFormat::bwavTimeReference = "bwav time reference"; -const char* const WavAudioFormat::bwavCodingHistory = "bwav coding history"; - -StringPairArray WavAudioFormat::createBWAVMetadata (const String& description, - const String& originator, - const String& originatorRef, - const Time& date, - const int64 timeReferenceSamples, - const String& codingHistory) -{ - StringPairArray m; - - m.set (bwavDescription, description); - m.set (bwavOriginator, originator); - m.set (bwavOriginatorRef, originatorRef); - m.set (bwavOriginationDate, date.formatted ("%Y-%m-%d")); - m.set (bwavOriginationTime, date.formatted ("%H:%M:%S")); - m.set (bwavTimeReference, String (timeReferenceSamples)); - m.set (bwavCodingHistory, codingHistory); - - return m; -} - -namespace WavFileHelpers -{ - inline int chunkName (const char* const name) noexcept { return (int) ByteOrder::littleEndianInt (name); } - -#if JUCE_MSVC - #pragma pack (push, 1) - #define PACKED -#elif JUCE_GCC - #define PACKED __attribute__((packed)) -#else - #define PACKED -#endif - -struct BWAVChunk -{ - char description [256]; - char originator [32]; - char originatorRef [32]; - char originationDate [10]; - char originationTime [8]; - uint32 timeRefLow; - uint32 timeRefHigh; - uint16 version; - uint8 umid[64]; - uint8 reserved[190]; - char codingHistory[1]; - - void copyTo (StringPairArray& values) const - { - values.set (WavAudioFormat::bwavDescription, String::fromUTF8 (description, 256)); - values.set (WavAudioFormat::bwavOriginator, String::fromUTF8 (originator, 32)); - values.set (WavAudioFormat::bwavOriginatorRef, String::fromUTF8 (originatorRef, 32)); - values.set (WavAudioFormat::bwavOriginationDate, String::fromUTF8 (originationDate, 10)); - values.set (WavAudioFormat::bwavOriginationTime, String::fromUTF8 (originationTime, 8)); - - const uint32 timeLow = ByteOrder::swapIfBigEndian (timeRefLow); - const uint32 timeHigh = ByteOrder::swapIfBigEndian (timeRefHigh); - const int64 time = (((int64)timeHigh) << 32) + timeLow; - - values.set (WavAudioFormat::bwavTimeReference, String (time)); - values.set (WavAudioFormat::bwavCodingHistory, String::fromUTF8 (codingHistory)); - } - - static MemoryBlock createFrom (const StringPairArray& values) - { - const size_t sizeNeeded = sizeof (BWAVChunk) + values [WavAudioFormat::bwavCodingHistory].getNumBytesAsUTF8(); - MemoryBlock data ((sizeNeeded + 3) & ~3); - data.fillWith (0); - - BWAVChunk* b = (BWAVChunk*) data.getData(); - - // Allow these calls to overwrite an extra byte at the end, which is fine as long - // as they get called in the right order.. - values [WavAudioFormat::bwavDescription].copyToUTF8 (b->description, 257); - values [WavAudioFormat::bwavOriginator].copyToUTF8 (b->originator, 33); - values [WavAudioFormat::bwavOriginatorRef].copyToUTF8 (b->originatorRef, 33); - values [WavAudioFormat::bwavOriginationDate].copyToUTF8 (b->originationDate, 11); - values [WavAudioFormat::bwavOriginationTime].copyToUTF8 (b->originationTime, 9); - - const int64 time = values [WavAudioFormat::bwavTimeReference].getLargeIntValue(); - b->timeRefLow = ByteOrder::swapIfBigEndian ((uint32) (time & 0xffffffff)); - b->timeRefHigh = ByteOrder::swapIfBigEndian ((uint32) (time >> 32)); - - values [WavAudioFormat::bwavCodingHistory].copyToUTF8 (b->codingHistory, 0x7fffffff); - - if (b->description[0] != 0 - || b->originator[0] != 0 - || b->originationDate[0] != 0 - || b->originationTime[0] != 0 - || b->codingHistory[0] != 0 - || time != 0) - { - return data; - } - - return MemoryBlock(); - } - -} PACKED; - -struct SMPLChunk -{ - struct SampleLoop - { - uint32 identifier; - uint32 type; // these are different in AIFF and WAV - uint32 start; - uint32 end; - uint32 fraction; - uint32 playCount; - } PACKED; - - uint32 manufacturer; - uint32 product; - uint32 samplePeriod; - uint32 midiUnityNote; - uint32 midiPitchFraction; - uint32 smpteFormat; - uint32 smpteOffset; - uint32 numSampleLoops; - uint32 samplerData; - SampleLoop loops[1]; - - void copyTo (StringPairArray& values, const int totalSize) const - { - values.set ("Manufacturer", String (ByteOrder::swapIfBigEndian (manufacturer))); - values.set ("Product", String (ByteOrder::swapIfBigEndian (product))); - values.set ("SamplePeriod", String (ByteOrder::swapIfBigEndian (samplePeriod))); - values.set ("MidiUnityNote", String (ByteOrder::swapIfBigEndian (midiUnityNote))); - values.set ("MidiPitchFraction", String (ByteOrder::swapIfBigEndian (midiPitchFraction))); - values.set ("SmpteFormat", String (ByteOrder::swapIfBigEndian (smpteFormat))); - values.set ("SmpteOffset", String (ByteOrder::swapIfBigEndian (smpteOffset))); - values.set ("NumSampleLoops", String (ByteOrder::swapIfBigEndian (numSampleLoops))); - values.set ("SamplerData", String (ByteOrder::swapIfBigEndian (samplerData))); - - for (uint32 i = 0; i < numSampleLoops; ++i) - { - if ((uint8*) (loops + (i + 1)) > ((uint8*) this) + totalSize) - break; - - const String prefix ("Loop" + String(i)); - values.set (prefix + "Identifier", String (ByteOrder::swapIfBigEndian (loops[i].identifier))); - values.set (prefix + "Type", String (ByteOrder::swapIfBigEndian (loops[i].type))); - values.set (prefix + "Start", String (ByteOrder::swapIfBigEndian (loops[i].start))); - values.set (prefix + "End", String (ByteOrder::swapIfBigEndian (loops[i].end))); - values.set (prefix + "Fraction", String (ByteOrder::swapIfBigEndian (loops[i].fraction))); - values.set (prefix + "PlayCount", String (ByteOrder::swapIfBigEndian (loops[i].playCount))); - } - } - - static MemoryBlock createFrom (const StringPairArray& values) - { - const int numLoops = jmin (64, values.getValue ("NumSampleLoops", "0").getIntValue()); - - if (numLoops <= 0) - return MemoryBlock(); - - const size_t sizeNeeded = sizeof (SMPLChunk) + (numLoops - 1) * sizeof (SampleLoop); - MemoryBlock data ((sizeNeeded + 3) & ~3); - data.fillWith (0); - - SMPLChunk* const s = static_cast (data.getData()); - - s->manufacturer = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("Manufacturer", "0").getIntValue()); - s->product = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("Product", "0").getIntValue()); - s->samplePeriod = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("SamplePeriod", "0").getIntValue()); - s->midiUnityNote = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("MidiUnityNote", "60").getIntValue()); - s->midiPitchFraction = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("MidiPitchFraction", "0").getIntValue()); - s->smpteFormat = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("SmpteFormat", "0").getIntValue()); - s->smpteOffset = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("SmpteOffset", "0").getIntValue()); - s->numSampleLoops = ByteOrder::swapIfBigEndian ((uint32) numLoops); - s->samplerData = ByteOrder::swapIfBigEndian ((uint32) values.getValue ("SamplerData", "0").getIntValue()); - - for (int i = 0; i < numLoops; ++i) - { - const String prefix ("Loop" + String(i)); - s->loops[i].identifier = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Identifier", "0").getIntValue()); - s->loops[i].type = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Type", "0").getIntValue()); - s->loops[i].start = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Start", "0").getIntValue()); - s->loops[i].end = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "End", "0").getIntValue()); - s->loops[i].fraction = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Fraction", "0").getIntValue()); - s->loops[i].playCount = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "PlayCount", "0").getIntValue()); - } - - return data; - } -} PACKED; - -struct InstChunk -{ - int8 baseNote; - int8 detune; - int8 gain; - int8 lowNote; - int8 highNote; - int8 lowVelocity; - int8 highVelocity; - - void copyTo (StringPairArray& values) const - { - values.set ("MidiUnityNote", String (baseNote)); - values.set ("Detune", String (detune)); - values.set ("Gain", String (gain)); - values.set ("LowNote", String (lowNote)); - values.set ("HighNote", String (highNote)); - values.set ("LowVelocity", String (lowVelocity)); - values.set ("HighVelocity", String (highVelocity)); - } - - static MemoryBlock createFrom (const StringPairArray& values) - { - const StringArray& keys = values.getAllKeys(); - - if (! (keys.contains ("LowNote", true) && keys.contains ("HighNote", true))) - return MemoryBlock(); - - MemoryBlock data (8); - data.fillWith (0); - - InstChunk* const inst = static_cast (data.getData()); - - inst->baseNote = (int8) values.getValue ("MidiUnityNote", "60").getIntValue(); - inst->detune = (int8) values.getValue ("Detune", "0").getIntValue(); - inst->gain = (int8) values.getValue ("Gain", "0").getIntValue(); - inst->lowNote = (int8) values.getValue ("LowNote", "0").getIntValue(); - inst->highNote = (int8) values.getValue ("HighNote", "127").getIntValue(); - inst->lowVelocity = (int8) values.getValue ("LowVelocity", "1").getIntValue(); - inst->highVelocity = (int8) values.getValue ("HighVelocity", "127").getIntValue(); - - return data; - } -} PACKED; - -struct CueChunk -{ - struct Cue - { - uint32 identifier; - uint32 order; - uint32 chunkID; - uint32 chunkStart; - uint32 blockStart; - uint32 offset; - } PACKED; - - uint32 numCues; - Cue cues[1]; - - void copyTo (StringPairArray& values, const int totalSize) const - { - values.set ("NumCuePoints", String (ByteOrder::swapIfBigEndian (numCues))); - - for (uint32 i = 0; i < numCues; ++i) - { - if ((uint8*) (cues + (i + 1)) > ((uint8*) this) + totalSize) - break; - - const String prefix ("Cue" + String(i)); - values.set (prefix + "Identifier", String (ByteOrder::swapIfBigEndian (cues[i].identifier))); - values.set (prefix + "Order", String (ByteOrder::swapIfBigEndian (cues[i].order))); - values.set (prefix + "ChunkID", String (ByteOrder::swapIfBigEndian (cues[i].chunkID))); - values.set (prefix + "ChunkStart", String (ByteOrder::swapIfBigEndian (cues[i].chunkStart))); - values.set (prefix + "BlockStart", String (ByteOrder::swapIfBigEndian (cues[i].blockStart))); - values.set (prefix + "Offset", String (ByteOrder::swapIfBigEndian (cues[i].offset))); - } - } - - static void create (MemoryBlock& data, const StringPairArray& values) - { - const int numCues = values.getValue ("NumCuePoints", "0").getIntValue(); - - if (numCues > 0) - { - const size_t sizeNeeded = sizeof (CueChunk) + (numCues - 1) * sizeof (Cue); - data.setSize ((sizeNeeded + 3) & ~3, true); - - CueChunk* const c = static_cast (data.getData()); - - c->numCues = ByteOrder::swapIfBigEndian ((uint32) numCues); - - const String dataChunkID (chunkName ("data")); - - int nextOrder = 0; - - #if JUCE_DEBUG - Array identifiers; - #endif - - for (int i = 0; i < numCues; ++i) - { - const String prefix ("Cue" + String (i)); - - uint32 identifier = values.getValue (prefix + "Identifier", "0").getIntValue(); - - #if JUCE_DEBUG - jassert (! identifiers.contains (identifier)); - identifiers.add (identifier); - #endif - - c->cues[i].identifier = ByteOrder::swapIfBigEndian ((uint32) identifier); - - const int order = values.getValue (prefix + "Order", String (nextOrder)).getIntValue(); - nextOrder = jmax (nextOrder, order) + 1; - - c->cues[i].order = ByteOrder::swapIfBigEndian ((uint32) order); - c->cues[i].chunkID = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkID", dataChunkID).getIntValue()); - c->cues[i].chunkStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkStart", "0").getIntValue()); - c->cues[i].blockStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "BlockStart", "0").getIntValue()); - c->cues[i].offset = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Offset", "0").getIntValue()); - } - } - } - -} PACKED; - -namespace ListChunk -{ - void appendLabelOrNoteChunk (const StringPairArray& values, const String& prefix, - const int chunkType, MemoryOutputStream& out) - { - const String label (values.getValue (prefix + "Text", prefix)); - const int labelLength = label.getNumBytesAsUTF8() + 1; - const int chunkLength = 4 + labelLength + (labelLength & 1); - - out.writeInt (chunkType); - out.writeInt (chunkLength); - out.writeInt (values.getValue (prefix + "Identifier", "0").getIntValue()); - out.write (label.toUTF8(), labelLength); - - if ((out.getDataSize() & 1) != 0) - out.writeByte (0); - } - - void appendExtraChunk (const StringPairArray& values, const String& prefix, MemoryOutputStream& out) - { - const String text (values.getValue (prefix + "Text", prefix)); - - const int textLength = text.getNumBytesAsUTF8() + 1; // include null terminator - uint32 chunkLength = textLength + 20 + (textLength & 1); - - out.writeInt (chunkName ("ltxt")); - out.writeInt (chunkLength); - out.writeInt (values.getValue (prefix + "Identifier", "0").getIntValue()); - out.writeInt (values.getValue (prefix + "SampleLength", "0").getIntValue()); - out.writeInt (values.getValue (prefix + "Purpose", "0").getIntValue()); - out.writeShort ((short) values.getValue (prefix + "Country", "0").getIntValue()); - out.writeShort ((short) values.getValue (prefix + "Language", "0").getIntValue()); - out.writeShort ((short) values.getValue (prefix + "Dialect", "0").getIntValue()); - out.writeShort ((short) values.getValue (prefix + "CodePage", "0").getIntValue()); - out.write (text.toUTF8(), textLength); - - if ((out.getDataSize() & 1) != 0) - out.writeByte (0); - } - - void create (MemoryBlock& block, const StringPairArray& values) - { - const int numCueLabels = values.getValue ("NumCueLabels", "0").getIntValue(); - const int numCueNotes = values.getValue ("NumCueNotes", "0").getIntValue(); - const int numCueRegions = values.getValue ("NumCueRegions", "0").getIntValue(); - - if (numCueLabels > 0 || numCueNotes > 0 || numCueRegions > 0) - { - MemoryOutputStream out (block, false); - - int i; - for (i = 0; i < numCueLabels; ++i) - appendLabelOrNoteChunk (values, "CueLabel" + String (i), chunkName ("labl"), out); - - for (i = 0; i < numCueNotes; ++i) - appendLabelOrNoteChunk (values, "CueNote" + String (i), chunkName ("note"), out); - - for (i = 0; i < numCueRegions; ++i) - appendExtraChunk (values, "CueRegion" + String (i), out); - } - } -} - -struct ExtensibleWavSubFormat -{ - uint32 data1; - uint16 data2; - uint16 data3; - uint8 data4[8]; -} PACKED; - -struct DataSize64Chunk // chunk ID = 'ds64' if data size > 0xffffffff, 'JUNK' otherwise -{ - uint32 riffSizeLow; // low 4 byte size of RF64 block - uint32 riffSizeHigh; // high 4 byte size of RF64 block - uint32 dataSizeLow; // low 4 byte size of data chunk - uint32 dataSizeHigh; // high 4 byte size of data chunk - uint32 sampleCountLow; // low 4 byte sample count of fact chunk - uint32 sampleCountHigh; // high 4 byte sample count of fact chunk - uint32 tableLength; // number of valid entries in array 'table' -} PACKED; - -#if JUCE_MSVC - #pragma pack (pop) -#endif - -#undef PACKED -} - -class WavAudioFormatReader : public AudioFormatReader -{ -public: - - WavAudioFormatReader (InputStream* const in) - : AudioFormatReader (in, TRANS (wavFormatName)), - bwavChunkStart (0), - bwavSize (0), - dataLength (0), - isRF64 (false) - { - using namespace WavFileHelpers; - uint64 len = 0; - int64 end = 0; - bool hasGotType = false; - bool hasGotData = false; - int cueNoteIndex = 0; - int cueLabelIndex = 0; - int cueRegionIndex = 0; - - const int firstChunkType = input->readInt(); - - if (firstChunkType == chunkName ("RF64")) - { - input->skipNextBytes (4); // size is -1 for RF64 - isRF64 = true; - } - else if (firstChunkType == chunkName ("RIFF")) - { - len = (uint64) input->readInt(); - end = input->getPosition() + len; - } - else - { - return; - } - - const int64 startOfRIFFChunk = input->getPosition(); - - if (input->readInt() == chunkName ("WAVE")) - { - if (isRF64 && input->readInt() == chunkName ("ds64")) - { - uint32 length = (uint32) input->readInt(); - - if (length < 28) - { - return; - } - else - { - const int64 chunkEnd = input->getPosition() + length + (length & 1); - len = input->readInt64(); - end = startOfRIFFChunk + len; - dataLength = input->readInt64(); - input->setPosition (chunkEnd); - } - } - - while (input->getPosition() < end && ! input->isExhausted()) - { - const int chunkType = input->readInt(); - uint32 length = (uint32) input->readInt(); - const int64 chunkEnd = input->getPosition() + length + (length & 1); - - if (chunkType == chunkName ("fmt ")) - { - // read the format chunk - const unsigned short format = input->readShort(); - const short numChans = input->readShort(); - sampleRate = input->readInt(); - const int bytesPerSec = input->readInt(); - - numChannels = numChans; - bytesPerFrame = bytesPerSec / (int)sampleRate; - bitsPerSample = 8 * bytesPerFrame / numChans; - - if (format == 3) - { - usesFloatingPointData = true; - } - else if (format == 0xfffe /*WAVE_FORMAT_EXTENSIBLE*/) - { - if (length < 40) // too short - { - bytesPerFrame = 0; - } - else - { - input->skipNextBytes (12); // skip over blockAlign, bitsPerSample and speakerPosition mask - ExtensibleWavSubFormat subFormat; - subFormat.data1 = input->readInt(); - subFormat.data2 = input->readShort(); - subFormat.data3 = input->readShort(); - input->read (subFormat.data4, sizeof (subFormat.data4)); - - const ExtensibleWavSubFormat pcmFormat - = { 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; - - if (memcmp (&subFormat, &pcmFormat, sizeof (subFormat)) != 0) - { - const ExtensibleWavSubFormat ambisonicFormat - = { 0x00000001, 0x0721, 0x11d3, { 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 } }; - - if (memcmp (&subFormat, &ambisonicFormat, sizeof (subFormat)) != 0) - bytesPerFrame = 0; - } - } - } - else if (format != 1) - { - bytesPerFrame = 0; - } - - hasGotType = true; - } - else if (chunkType == chunkName ("data")) - { - if (! isRF64) // data size is expected to be -1, actual data size is in ds64 chunk - dataLength = length; - - dataChunkStart = input->getPosition(); - lengthInSamples = (bytesPerFrame > 0) ? (dataLength / bytesPerFrame) : 0; - - hasGotData = true; - } - else if (chunkType == chunkName ("bext")) - { - bwavChunkStart = input->getPosition(); - bwavSize = length; - - HeapBlock bwav; - bwav.calloc (jmax ((size_t) length + 1, sizeof (BWAVChunk)), 1); - input->read (bwav, length); - bwav->copyTo (metadataValues); - } - else if (chunkType == chunkName ("smpl")) - { - HeapBlock smpl; - smpl.calloc (jmax ((size_t) length + 1, sizeof (SMPLChunk)), 1); - input->read (smpl, length); - smpl->copyTo (metadataValues, length); - } - else if (chunkType == chunkName ("inst") || chunkType == chunkName ("INST")) // need to check which... - { - HeapBlock inst; - inst.calloc (jmax ((size_t) length + 1, sizeof (InstChunk)), 1); - input->read (inst, length); - inst->copyTo (metadataValues); - } - else if (chunkType == chunkName ("cue ")) - { - HeapBlock cue; - cue.calloc (jmax ((size_t) length + 1, sizeof (CueChunk)), 1); - input->read (cue, length); - cue->copyTo (metadataValues, length); - } - else if (chunkType == chunkName ("LIST")) - { - if (input->readInt() == chunkName ("adtl")) - { - while (input->getPosition() < chunkEnd) - { - const int adtlChunkType = input->readInt(); - const uint32 adtlLength = (uint32) input->readInt(); - const int64 adtlChunkEnd = input->getPosition() + (adtlLength + (adtlLength & 1)); - - if (adtlChunkType == chunkName ("labl") || adtlChunkType == chunkName ("note")) - { - String prefix; - - if (adtlChunkType == chunkName ("labl")) - prefix << "CueLabel" << cueLabelIndex++; - else if (adtlChunkType == chunkName ("note")) - prefix << "CueNote" << cueNoteIndex++; - - const uint32 identifier = (uint32) input->readInt(); - const uint32 stringLength = adtlLength - 4; - - MemoryBlock textBlock; - input->readIntoMemoryBlock (textBlock, stringLength); - - metadataValues.set (prefix + "Identifier", String (identifier)); - metadataValues.set (prefix + "Text", textBlock.toString()); - } - else if (adtlChunkType == chunkName ("ltxt")) - { - const String prefix ("CueRegion" + String (cueRegionIndex++)); - const uint32 identifier = (uint32) input->readInt(); - const uint32 sampleLength = (uint32) input->readInt(); - const uint32 purpose = (uint32) input->readInt(); - const uint16 country = (uint16) input->readInt(); - const uint16 language = (uint16) input->readInt(); - const uint16 dialect = (uint16) input->readInt(); - const uint16 codePage = (uint16) input->readInt(); - const uint32 stringLength = adtlLength - 20; - - MemoryBlock textBlock; - input->readIntoMemoryBlock (textBlock, stringLength); - - metadataValues.set (prefix + "Identifier", String (identifier)); - metadataValues.set (prefix + "SampleLength", String (sampleLength)); - metadataValues.set (prefix + "Purpose", String (purpose)); - metadataValues.set (prefix + "Country", String (country)); - metadataValues.set (prefix + "Language", String (language)); - metadataValues.set (prefix + "Dialect", String (dialect)); - metadataValues.set (prefix + "CodePage", String (codePage)); - metadataValues.set (prefix + "Text", textBlock.toString()); - } - - input->setPosition (adtlChunkEnd); - } - } - } - else if (chunkEnd <= input->getPosition()) - { - break; - } - - input->setPosition (chunkEnd); - } - } - - if (cueLabelIndex > 0) metadataValues.set ("NumCueLabels", String (cueLabelIndex)); - if (cueNoteIndex > 0) metadataValues.set ("NumCueNotes", String (cueNoteIndex)); - if (cueRegionIndex > 0) metadataValues.set ("NumCueRegions", String (cueRegionIndex)); - if (metadataValues.size() > 0) metadataValues.set ("MetaDataSource", "WAV"); - } - - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - jassert (destSamples != nullptr); - const int64 samplesAvailable = lengthInSamples - startSampleInFile; - - if (samplesAvailable < numSamples) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != nullptr) - zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples); - - numSamples = (int) samplesAvailable; - } - - if (numSamples <= 0) - return true; - - input->setPosition (dataChunkStart + startSampleInFile * bytesPerFrame); - - while (numSamples > 0) - { - const int tempBufSize = 480 * 3 * 4; // (keep this a multiple of 3) - char tempBuffer [tempBufSize]; - - const int numThisTime = jmin (tempBufSize / bytesPerFrame, numSamples); - const int bytesRead = input->read (tempBuffer, numThisTime * bytesPerFrame); - - if (bytesRead < numThisTime * bytesPerFrame) - { - jassert (bytesRead >= 0); - zeromem (tempBuffer + bytesRead, numThisTime * bytesPerFrame - bytesRead); - } - - switch (bitsPerSample) - { - case 8: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 16: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 24: ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - case 32: if (usesFloatingPointData) ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); - else ReadHelper::read (destSamples, startOffsetInDestBuffer, numDestChannels, tempBuffer, numChannels, numThisTime); break; - default: jassertfalse; break; - } - - startOffsetInDestBuffer += numThisTime; - numSamples -= numThisTime; - } - - return true; - } - - int64 bwavChunkStart, bwavSize; - -private: - ScopedPointer converter; - int bytesPerFrame; - int64 dataChunkStart, dataLength; - bool isRF64; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormatReader); -}; - -class WavAudioFormatWriter : public AudioFormatWriter -{ -public: - - WavAudioFormatWriter (OutputStream* const out, const double sampleRate_, - const unsigned int numChannels_, const int bits, - const StringPairArray& metadataValues) - : AudioFormatWriter (out, TRANS (wavFormatName), sampleRate_, numChannels_, bits), - lengthInSamples (0), - bytesWritten (0), - writeFailed (false) - { - using namespace WavFileHelpers; - - if (metadataValues.size() > 0) - { - // The meta data should have been santised for the WAV format. - // If it was originally sourced from an AIFF file the MetaDataSource - // key should be removed (or set to "WAV") once this has been done - jassert (metadataValues.getValue ("MetaDataSource", "None") != "AIFF"); - - bwavChunk = BWAVChunk::createFrom (metadataValues); - smplChunk = SMPLChunk::createFrom (metadataValues); - instChunk = InstChunk::createFrom (metadataValues); - CueChunk ::create (cueChunk, metadataValues); - ListChunk::create (listChunk, metadataValues); - } - - headerPosition = out->getPosition(); - writeHeader(); - } - - ~WavAudioFormatWriter() - { - if ((bytesWritten & 1) != 0) // pad to an even length - { - ++bytesWritten; - output->writeByte (0); - } - - writeHeader(); - } - - bool write (const int** data, int numSamples) - { - jassert (data != nullptr && *data != nullptr); // the input must contain at least one channel! - - if (writeFailed) - return false; - - const int bytes = numChannels * numSamples * bitsPerSample / 8; - tempBlock.ensureSize (bytes, false); - - switch (bitsPerSample) - { - case 8: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 16: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 24: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - case 32: WriteHelper::write (tempBlock.getData(), numChannels, data, numSamples); break; - default: jassertfalse; break; - } - - if (! output->write (tempBlock.getData(), bytes)) - { - // failed to write to disk, so let's try writing the header. - // If it's just run out of disk space, then if it does manage - // to write the header, we'll still have a useable file.. - writeHeader(); - writeFailed = true; - return false; - } - else - { - bytesWritten += bytes; - lengthInSamples += numSamples; - - return true; - } - } - -private: - ScopedPointer converter; - MemoryBlock tempBlock, bwavChunk, smplChunk, instChunk, cueChunk, listChunk; - uint64 lengthInSamples, bytesWritten; - int64 headerPosition; - bool writeFailed; - - static int getChannelMask (const int numChannels) noexcept - { - switch (numChannels) - { - case 1: return 0; - case 2: return 1 + 2; // SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT - case 5: return 1 + 2 + 4 + 16 + 32; // SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT - case 6: return 1 + 2 + 4 + 8 + 16 + 32; // SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT - default: break; - } - - return 0; - } - - void writeHeader() - { - using namespace WavFileHelpers; - const bool seekedOk = output->setPosition (headerPosition); - (void) seekedOk; - - // if this fails, you've given it an output stream that can't seek! It needs - // to be able to seek back to write the header - jassert (seekedOk); - - const int bytesPerFrame = numChannels * bitsPerSample / 8; - int64 audioDataSize = bytesPerFrame * lengthInSamples; - - const bool isRF64 = (bytesWritten >= literal64bit (0x100000000)); - const bool isWaveFmtEx = isRF64 || (numChannels > 2); - - int64 riffChunkSize = 4 /* 'RIFF' */ + 8 + 40 /* WAVEFORMATEX */ - + 8 + audioDataSize + (audioDataSize & 1) - + (bwavChunk.getSize() > 0 ? (8 + bwavChunk.getSize()) : 0) - + (smplChunk.getSize() > 0 ? (8 + smplChunk.getSize()) : 0) - + (instChunk.getSize() > 0 ? (8 + instChunk.getSize()) : 0) - + (cueChunk .getSize() > 0 ? (8 + cueChunk .getSize()) : 0) - + (listChunk.getSize() > 0 ? (12 + listChunk.getSize()) : 0) - + (8 + 28); // (ds64 chunk) - - riffChunkSize += (riffChunkSize & 0x1); - - output->writeInt (chunkName (isRF64 ? "RF64" : "RIFF")); - output->writeInt (isRF64 ? -1 : (int) riffChunkSize); - output->writeInt (chunkName ("WAVE")); - - if (! isRF64) - { - output->writeInt (chunkName ("JUNK")); - output->writeInt (28 + (isWaveFmtEx? 0 : 24)); - output->writeRepeatedByte (0, 28 /* ds64 */ + (isWaveFmtEx? 0 : 24)); - } - else - { - // write ds64 chunk - output->writeInt (chunkName ("ds64")); - output->writeInt (28); // chunk size for uncompressed data (no table) - output->writeInt64 (riffChunkSize); - output->writeInt64 (audioDataSize); - output->writeRepeatedByte (0, 12); - } - - output->writeInt (chunkName ("fmt ")); - - if (isWaveFmtEx) - { - output->writeInt (40); // chunk size - output->writeShort ((short) (uint16) 0xfffe); // WAVE_FORMAT_EXTENSIBLE - } - else - { - output->writeInt (16); // chunk size - output->writeShort (bitsPerSample < 32 ? (short) 1 /*WAVE_FORMAT_PCM*/ - : (short) 3 /*WAVE_FORMAT_IEEE_FLOAT*/); - } - - output->writeShort ((short) numChannels); - output->writeInt ((int) sampleRate); - output->writeInt ((int) (bytesPerFrame * sampleRate)); // nAvgBytesPerSec - output->writeShort ((short) bytesPerFrame); // nBlockAlign - output->writeShort ((short) bitsPerSample); // wBitsPerSample - - if (isWaveFmtEx) - { - output->writeShort (22); // cbSize (size of the extension) - output->writeShort ((short) bitsPerSample); // wValidBitsPerSample - output->writeInt (getChannelMask (numChannels)); - - const ExtensibleWavSubFormat pcmFormat - = { 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; - - const ExtensibleWavSubFormat IEEEFloatFormat - = { 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; - - const ExtensibleWavSubFormat& subFormat = bitsPerSample < 32 ? pcmFormat : IEEEFloatFormat; - - output->writeInt ((int) subFormat.data1); - output->writeShort ((short) subFormat.data2); - output->writeShort ((short) subFormat.data3); - output->write (subFormat.data4, sizeof (subFormat.data4)); - } - - if (bwavChunk.getSize() > 0) - { - output->writeInt (chunkName ("bext")); - output->writeInt ((int) bwavChunk.getSize()); - output->write (bwavChunk.getData(), (int) bwavChunk.getSize()); - } - - if (smplChunk.getSize() > 0) - { - output->writeInt (chunkName ("smpl")); - output->writeInt ((int) smplChunk.getSize()); - output->write (smplChunk.getData(), (int) smplChunk.getSize()); - } - - if (instChunk.getSize() > 0) - { - output->writeInt (chunkName ("inst")); - output->writeInt (7); - output->write (instChunk.getData(), (int) instChunk.getSize()); - } - - if (cueChunk.getSize() > 0) - { - output->writeInt (chunkName ("cue ")); - output->writeInt ((int) cueChunk.getSize()); - output->write (cueChunk.getData(), (int) cueChunk.getSize()); - } - - if (listChunk.getSize() > 0) - { - output->writeInt (chunkName ("LIST")); - output->writeInt ((int) listChunk.getSize() + 4); - output->writeInt (chunkName ("adtl")); - output->write (listChunk.getData(), (int) listChunk.getSize()); - } - - output->writeInt (chunkName ("data")); - output->writeInt (isRF64 ? -1 : (int) (lengthInSamples * bytesPerFrame)); - - usesFloatingPointData = (bitsPerSample == 32); - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormatWriter); -}; - -WavAudioFormat::WavAudioFormat() - : AudioFormat (TRANS (wavFormatName), StringArray (wavExtensions)) -{ -} - -WavAudioFormat::~WavAudioFormat() -{ -} - -const Array WavAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000, 0 }; - return Array (rates); -} - -const Array WavAudioFormat::getPossibleBitDepths() -{ - const int depths[] = { 8, 16, 24, 32, 0 }; - return Array (depths); -} - -bool WavAudioFormat::canDoStereo() { return true; } -bool WavAudioFormat::canDoMono() { return true; } - -AudioFormatReader* WavAudioFormat::createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) -{ - ScopedPointer r (new WavAudioFormatReader (sourceStream)); - - if (r->sampleRate > 0) - return r.release(); - - if (! deleteStreamIfOpeningFails) - r->input = nullptr; - - return nullptr; -} - -AudioFormatWriter* WavAudioFormat::createWriterFor (OutputStream* out, double sampleRate, - unsigned int numChannels, int bitsPerSample, - const StringPairArray& metadataValues, int /*qualityOptionIndex*/) -{ - if (getPossibleBitDepths().contains (bitsPerSample)) - return new WavAudioFormatWriter (out, sampleRate, numChannels, bitsPerSample, metadataValues); - - return nullptr; -} - -namespace WavFileHelpers -{ - bool slowCopyWavFileWithNewMetadata (const File& file, const StringPairArray& metadata) - { - TemporaryFile tempFile (file); - - WavAudioFormat wav; - ScopedPointer reader (wav.createReaderFor (file.createInputStream(), true)); - - if (reader != nullptr) - { - ScopedPointer outStream (tempFile.getFile().createOutputStream()); - - if (outStream != nullptr) - { - ScopedPointer writer (wav.createWriterFor (outStream, reader->sampleRate, - reader->numChannels, reader->bitsPerSample, - metadata, 0)); - - if (writer != nullptr) - { - outStream.release(); - - bool ok = writer->writeFromAudioReader (*reader, 0, -1); - writer = nullptr; - reader = nullptr; - - return ok && tempFile.overwriteTargetFileWithTemporary(); - } - } - } - - return false; - } -} - -bool WavAudioFormat::replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata) -{ - using namespace WavFileHelpers; - ScopedPointer reader (static_cast (createReaderFor (wavFile.createInputStream(), true))); - - if (reader != nullptr) - { - const int64 bwavPos = reader->bwavChunkStart; - const int64 bwavSize = reader->bwavSize; - reader = nullptr; - - if (bwavSize > 0) - { - MemoryBlock chunk = BWAVChunk::createFrom (newMetadata); - - if (chunk.getSize() <= (size_t) bwavSize) - { - // the new one will fit in the space available, so write it directly.. - const int64 oldSize = wavFile.getSize(); - - { - ScopedPointer out (wavFile.createOutputStream()); - out->setPosition (bwavPos); - out->write (chunk.getData(), (int) chunk.getSize()); - out->setPosition (oldSize); - } - - jassert (wavFile.getSize() == oldSize); - - return true; - } - } - } - - return slowCopyWavFileWithNewMetadata (wavFile, newMetadata); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_WavAudioFormat.cpp ***/ - - -/*** Start of inlined file: juce_AudioCDReader.cpp ***/ -#if JUCE_USE_CDREADER - -BEGIN_JUCE_NAMESPACE - -int AudioCDReader::getNumTracks() const -{ - return trackStartSamples.size() - 1; -} - -int AudioCDReader::getPositionOfTrackStart (int trackNum) const -{ - return trackStartSamples [trackNum]; -} - -const Array& AudioCDReader::getTrackOffsets() const -{ - return trackStartSamples; -} - -int AudioCDReader::getCDDBId() -{ - int checksum = 0; - const int numTracks = getNumTracks(); - - for (int i = 0; i < numTracks; ++i) - for (int offset = (trackStartSamples.getUnchecked(i) + 88200) / 44100; offset > 0; offset /= 10) - checksum += offset % 10; - - const int length = (trackStartSamples.getLast() - trackStartSamples.getFirst()) / 44100; - - // CCLLLLTT: checksum, length, tracks - return ((checksum & 0xff) << 24) | (length << 8) | numTracks; -} - -END_JUCE_NAMESPACE - -#endif - -/*** End of inlined file: juce_AudioCDReader.cpp ***/ - - -/*** Start of inlined file: juce_AudioFormatReaderSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioFormatReaderSource::AudioFormatReaderSource (AudioFormatReader* const reader_, - const bool deleteReaderWhenThisIsDeleted) - : reader (reader_, deleteReaderWhenThisIsDeleted), - nextPlayPos (0), - looping (false) -{ - jassert (reader != nullptr); -} - -AudioFormatReaderSource::~AudioFormatReaderSource() {} - -int64 AudioFormatReaderSource::getTotalLength() const { return reader->lengthInSamples; } -void AudioFormatReaderSource::setNextReadPosition (int64 newPosition) { nextPlayPos = newPosition; } -void AudioFormatReaderSource::setLooping (bool shouldLoop) { looping = shouldLoop; } - -int64 AudioFormatReaderSource::getNextReadPosition() const -{ - return looping ? nextPlayPos % reader->lengthInSamples - : nextPlayPos; -} - -void AudioFormatReaderSource::prepareToPlay (int /*samplesPerBlockExpected*/, double /*sampleRate*/) {} -void AudioFormatReaderSource::releaseResources() {} - -void AudioFormatReaderSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - if (info.numSamples > 0) - { - const int64 start = nextPlayPos; - - if (looping) - { - const int newStart = (int) (start % (int) reader->lengthInSamples); - const int newEnd = (int) ((start + info.numSamples) % (int) reader->lengthInSamples); - - if (newEnd > newStart) - { - info.buffer->readFromAudioReader (reader, info.startSample, - newEnd - newStart, newStart, true, true); - } - else - { - const int endSamps = (int) reader->lengthInSamples - newStart; - - info.buffer->readFromAudioReader (reader, info.startSample, - endSamps, newStart, true, true); - - info.buffer->readFromAudioReader (reader, info.startSample + endSamps, - newEnd, 0, true, true); - } - - nextPlayPos = newEnd; - } - else - { - info.buffer->readFromAudioReader (reader, info.startSample, - info.numSamples, start, true, true); - nextPlayPos += info.numSamples; - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioFormatReaderSource.cpp ***/ - - -/*** Start of inlined file: juce_AudioSourcePlayer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioSourcePlayer::AudioSourcePlayer() - : source (nullptr), - sampleRate (0), - bufferSize (0), - tempBuffer (2, 8), - lastGain (1.0f), - gain (1.0f) -{ -} - -AudioSourcePlayer::~AudioSourcePlayer() -{ - setSource (nullptr); -} - -void AudioSourcePlayer::setSource (AudioSource* newSource) -{ - if (source != newSource) - { - AudioSource* const oldSource = source; - - if (newSource != nullptr && bufferSize > 0 && sampleRate > 0) - newSource->prepareToPlay (bufferSize, sampleRate); - - { - const ScopedLock sl (readLock); - source = newSource; - } - - if (oldSource != nullptr) - oldSource->releaseResources(); - } -} - -void AudioSourcePlayer::setGain (const float newGain) noexcept -{ - gain = newGain; -} - -void AudioSourcePlayer::audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples) -{ - // these should have been prepared by audioDeviceAboutToStart()... - jassert (sampleRate > 0 && bufferSize > 0); - - const ScopedLock sl (readLock); - - if (source != nullptr) - { - AudioSourceChannelInfo info; - int i, numActiveChans = 0, numInputs = 0, numOutputs = 0; - - // messy stuff needed to compact the channels down into an array - // of non-zero pointers.. - for (i = 0; i < totalNumInputChannels; ++i) - { - if (inputChannelData[i] != nullptr) - { - inputChans [numInputs++] = inputChannelData[i]; - if (numInputs >= numElementsInArray (inputChans)) - break; - } - } - - for (i = 0; i < totalNumOutputChannels; ++i) - { - if (outputChannelData[i] != nullptr) - { - outputChans [numOutputs++] = outputChannelData[i]; - if (numOutputs >= numElementsInArray (outputChans)) - break; - } - } - - if (numInputs > numOutputs) - { - // if there aren't enough output channels for the number of - // inputs, we need to create some temporary extra ones (can't - // use the input data in case it gets written to) - tempBuffer.setSize (numInputs - numOutputs, numSamples, - false, false, true); - - for (i = 0; i < numOutputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - - for (i = numOutputs; i < numInputs; ++i) - { - channels[numActiveChans] = tempBuffer.getSampleData (i - numOutputs, 0); - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - } - else - { - for (i = 0; i < numInputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - - for (i = numInputs; i < numOutputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - zeromem (channels[numActiveChans], sizeof (float) * numSamples); - ++numActiveChans; - } - } - - AudioSampleBuffer buffer (channels, numActiveChans, numSamples); - - info.buffer = &buffer; - info.startSample = 0; - info.numSamples = numSamples; - - source->getNextAudioBlock (info); - - for (i = info.buffer->getNumChannels(); --i >= 0;) - info.buffer->applyGainRamp (i, info.startSample, info.numSamples, lastGain, gain); - - lastGain = gain; - } - else - { - for (int i = 0; i < totalNumOutputChannels; ++i) - if (outputChannelData[i] != nullptr) - zeromem (outputChannelData[i], sizeof (float) * numSamples); - } -} - -void AudioSourcePlayer::audioDeviceAboutToStart (AudioIODevice* device) -{ - sampleRate = device->getCurrentSampleRate(); - bufferSize = device->getCurrentBufferSizeSamples(); - zeromem (channels, sizeof (channels)); - - if (source != nullptr) - source->prepareToPlay (bufferSize, sampleRate); -} - -void AudioSourcePlayer::audioDeviceStopped() -{ - if (source != nullptr) - source->releaseResources(); - - sampleRate = 0.0; - bufferSize = 0; - - tempBuffer.setSize (2, 8); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioSourcePlayer.cpp ***/ - - -/*** Start of inlined file: juce_AudioTransportSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioTransportSource::AudioTransportSource() - : source (nullptr), - resamplerSource (nullptr), - bufferingSource (nullptr), - positionableSource (nullptr), - masterSource (nullptr), - gain (1.0f), - lastGain (1.0f), - playing (false), - stopped (true), - sampleRate (44100.0), - sourceSampleRate (0.0), - blockSize (128), - readAheadBufferSize (0), - isPrepared (false), - inputStreamEOF (false) -{ -} - -AudioTransportSource::~AudioTransportSource() -{ - setSource (nullptr); - - releaseMasterResources(); -} - -void AudioTransportSource::setSource (PositionableAudioSource* const newSource, - int readAheadBufferSize_, - double sourceSampleRateToCorrectFor, - int maxNumChannels) -{ - if (source == newSource) - { - if (source == nullptr) - return; - - setSource (0, 0, 0); // deselect and reselect to avoid releasing resources wrongly - } - - readAheadBufferSize = readAheadBufferSize_; - sourceSampleRate = sourceSampleRateToCorrectFor; - - ResamplingAudioSource* newResamplerSource = nullptr; - BufferingAudioSource* newBufferingSource = nullptr; - PositionableAudioSource* newPositionableSource = nullptr; - AudioSource* newMasterSource = nullptr; - - ScopedPointer oldResamplerSource (resamplerSource); - ScopedPointer oldBufferingSource (bufferingSource); - AudioSource* oldMasterSource = masterSource; - - if (newSource != nullptr) - { - newPositionableSource = newSource; - - if (readAheadBufferSize_ > 0) - newPositionableSource = newBufferingSource - = new BufferingAudioSource (newPositionableSource, false, readAheadBufferSize_, maxNumChannels); - - newPositionableSource->setNextReadPosition (0); - - if (sourceSampleRateToCorrectFor > 0) - newMasterSource = newResamplerSource - = new ResamplingAudioSource (newPositionableSource, false, maxNumChannels); - else - newMasterSource = newPositionableSource; - - if (isPrepared) - { - if (newResamplerSource != nullptr && sourceSampleRate > 0 && sampleRate > 0) - newResamplerSource->setResamplingRatio (sourceSampleRate / sampleRate); - - newMasterSource->prepareToPlay (blockSize, sampleRate); - } - } - - { - const ScopedLock sl (callbackLock); - - source = newSource; - resamplerSource = newResamplerSource; - bufferingSource = newBufferingSource; - masterSource = newMasterSource; - positionableSource = newPositionableSource; - - playing = false; - } - - if (oldMasterSource != nullptr) - oldMasterSource->releaseResources(); -} - -void AudioTransportSource::start() -{ - if ((! playing) && masterSource != nullptr) - { - { - const ScopedLock sl (callbackLock); - playing = true; - stopped = false; - inputStreamEOF = false; - } - - sendChangeMessage(); - } -} - -void AudioTransportSource::stop() -{ - if (playing) - { - { - const ScopedLock sl (callbackLock); - playing = false; - } - - int n = 500; - while (--n >= 0 && ! stopped) - Thread::sleep (2); - - sendChangeMessage(); - } -} - -void AudioTransportSource::setPosition (double newPosition) -{ - if (sampleRate > 0.0) - setNextReadPosition ((int64) (newPosition * sampleRate)); -} - -double AudioTransportSource::getCurrentPosition() const -{ - if (sampleRate > 0.0) - return getNextReadPosition() / sampleRate; - else - return 0.0; -} - -double AudioTransportSource::getLengthInSeconds() const -{ - return getTotalLength() / sampleRate; -} - -void AudioTransportSource::setNextReadPosition (int64 newPosition) -{ - if (positionableSource != nullptr) - { - if (sampleRate > 0 && sourceSampleRate > 0) - newPosition = (int64) (newPosition * sourceSampleRate / sampleRate); - - positionableSource->setNextReadPosition (newPosition); - } -} - -int64 AudioTransportSource::getNextReadPosition() const -{ - if (positionableSource != nullptr) - { - const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0; - - return (int64) (positionableSource->getNextReadPosition() * ratio); - } - - return 0; -} - -int64 AudioTransportSource::getTotalLength() const -{ - const ScopedLock sl (callbackLock); - - if (positionableSource != nullptr) - { - const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0; - - return (int64) (positionableSource->getTotalLength() * ratio); - } - - return 0; -} - -bool AudioTransportSource::isLooping() const -{ - const ScopedLock sl (callbackLock); - - return positionableSource != nullptr - && positionableSource->isLooping(); -} - -void AudioTransportSource::setGain (const float newGain) noexcept -{ - gain = newGain; -} - -void AudioTransportSource::prepareToPlay (int samplesPerBlockExpected, - double sampleRate_) -{ - const ScopedLock sl (callbackLock); - - sampleRate = sampleRate_; - blockSize = samplesPerBlockExpected; - - if (masterSource != nullptr) - masterSource->prepareToPlay (samplesPerBlockExpected, sampleRate); - - if (resamplerSource != nullptr && sourceSampleRate > 0) - resamplerSource->setResamplingRatio (sourceSampleRate / sampleRate); - - isPrepared = true; -} - -void AudioTransportSource::releaseMasterResources() -{ - const ScopedLock sl (callbackLock); - - if (masterSource != nullptr) - masterSource->releaseResources(); - - isPrepared = false; -} - -void AudioTransportSource::releaseResources() -{ - releaseMasterResources(); -} - -void AudioTransportSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (callbackLock); - - inputStreamEOF = false; - - if (masterSource != nullptr && ! stopped) - { - masterSource->getNextAudioBlock (info); - - if (! playing) - { - // just stopped playing, so fade out the last block.. - for (int i = info.buffer->getNumChannels(); --i >= 0;) - info.buffer->applyGainRamp (i, info.startSample, jmin (256, info.numSamples), 1.0f, 0.0f); - - if (info.numSamples > 256) - info.buffer->clear (info.startSample + 256, info.numSamples - 256); - } - - if (positionableSource->getNextReadPosition() > positionableSource->getTotalLength() + 1 - && ! positionableSource->isLooping()) - { - playing = false; - inputStreamEOF = true; - sendChangeMessage(); - } - - stopped = ! playing; - - for (int i = info.buffer->getNumChannels(); --i >= 0;) - { - info.buffer->applyGainRamp (i, info.startSample, info.numSamples, - lastGain, gain); - } - } - else - { - info.clearActiveBufferRegion(); - stopped = true; - } - - lastGain = gain; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioTransportSource.cpp ***/ - - -/*** Start of inlined file: juce_BufferingAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class SharedBufferingAudioSourceThread : public DeletedAtShutdown, - public Thread, - private Timer -{ -public: - SharedBufferingAudioSourceThread() - : Thread ("Audio Buffer") - { - } - - ~SharedBufferingAudioSourceThread() - { - stopThread (10000); - clearSingletonInstance(); - } - - juce_DeclareSingleton (SharedBufferingAudioSourceThread, false); - - void addSource (BufferingAudioSource* source) - { - const ScopedLock sl (lock); - - if (! sources.contains (source)) - { - sources.add (source); - startThread(); - - stopTimer(); - } - - notify(); - } - - void removeSource (BufferingAudioSource* source) - { - const ScopedLock sl (lock); - sources.removeValue (source); - - if (sources.size() == 0) - startTimer (5000); - } - -private: - Array sources; - CriticalSection lock; - - void run() - { - while (! threadShouldExit()) - { - bool busy = false; - - for (int i = sources.size(); --i >= 0;) - { - if (threadShouldExit()) - return; - - const ScopedLock sl (lock); - - BufferingAudioSource* const b = sources[i]; - - if (b != nullptr && b->readNextBufferChunk()) - busy = true; - } - - if (! busy) - wait (500); - } - } - - void timerCallback() - { - stopTimer(); - - if (sources.size() == 0) - deleteInstance(); - } - - JUCE_DECLARE_NON_COPYABLE (SharedBufferingAudioSourceThread); -}; - -juce_ImplementSingleton (SharedBufferingAudioSourceThread) - -BufferingAudioSource::BufferingAudioSource (PositionableAudioSource* source_, - const bool deleteSourceWhenDeleted, - const int numberOfSamplesToBuffer_, - const int numberOfChannels_) - : source (source_, deleteSourceWhenDeleted), - numberOfSamplesToBuffer (jmax (1024, numberOfSamplesToBuffer_)), - numberOfChannels (numberOfChannels_), - buffer (numberOfChannels_, 0), - bufferValidStart (0), - bufferValidEnd (0), - nextPlayPos (0), - wasSourceLooping (false) -{ - jassert (source_ != nullptr); - - jassert (numberOfSamplesToBuffer_ > 1024); // not much point using this class if you're - // not using a larger buffer.. -} - -BufferingAudioSource::~BufferingAudioSource() -{ - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != nullptr) - thread->removeSource (this); -} - -void BufferingAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate_) -{ - source->prepareToPlay (samplesPerBlockExpected, sampleRate_); - - sampleRate = sampleRate_; - - buffer.setSize (numberOfChannels, jmax (samplesPerBlockExpected * 2, numberOfSamplesToBuffer)); - buffer.clear(); - - bufferValidStart = 0; - bufferValidEnd = 0; - - SharedBufferingAudioSourceThread::getInstance()->addSource (this); - - while (bufferValidEnd - bufferValidStart < jmin (((int) sampleRate_) / 4, - buffer.getNumSamples() / 2)) - { - SharedBufferingAudioSourceThread::getInstance()->notify(); - Thread::sleep (5); - } -} - -void BufferingAudioSource::releaseResources() -{ - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != nullptr) - thread->removeSource (this); - - buffer.setSize (numberOfChannels, 0); - source->releaseResources(); -} - -void BufferingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (bufferStartPosLock); - - const int validStart = (int) (jlimit (bufferValidStart, bufferValidEnd, nextPlayPos) - nextPlayPos); - const int validEnd = (int) (jlimit (bufferValidStart, bufferValidEnd, nextPlayPos + info.numSamples) - nextPlayPos); - - if (validStart == validEnd) - { - // total cache miss - info.clearActiveBufferRegion(); - } - else - { - if (validStart > 0) - info.buffer->clear (info.startSample, validStart); // partial cache miss at start - - if (validEnd < info.numSamples) - info.buffer->clear (info.startSample + validEnd, - info.numSamples - validEnd); // partial cache miss at end - - if (validStart < validEnd) - { - for (int chan = jmin (numberOfChannels, info.buffer->getNumChannels()); --chan >= 0;) - { - const int startBufferIndex = (int) ((validStart + nextPlayPos) % buffer.getNumSamples()); - const int endBufferIndex = (int) ((validEnd + nextPlayPos) % buffer.getNumSamples()); - - if (startBufferIndex < endBufferIndex) - { - info.buffer->copyFrom (chan, info.startSample + validStart, - buffer, - chan, startBufferIndex, - validEnd - validStart); - } - else - { - const int initialSize = buffer.getNumSamples() - startBufferIndex; - - info.buffer->copyFrom (chan, info.startSample + validStart, - buffer, - chan, startBufferIndex, - initialSize); - - info.buffer->copyFrom (chan, info.startSample + validStart + initialSize, - buffer, - chan, 0, - (validEnd - validStart) - initialSize); - } - } - } - - nextPlayPos += info.numSamples; - - if (source->isLooping() && nextPlayPos > 0) - nextPlayPos %= source->getTotalLength(); - } - - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != nullptr) - thread->notify(); -} - -int64 BufferingAudioSource::getNextReadPosition() const -{ - return (source->isLooping() && nextPlayPos > 0) - ? nextPlayPos % source->getTotalLength() - : nextPlayPos; -} - -void BufferingAudioSource::setNextReadPosition (int64 newPosition) -{ - const ScopedLock sl (bufferStartPosLock); - - nextPlayPos = newPosition; - - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != nullptr) - thread->notify(); -} - -bool BufferingAudioSource::readNextBufferChunk() -{ - int64 newBVS, newBVE, sectionToReadStart, sectionToReadEnd; - - { - const ScopedLock sl (bufferStartPosLock); - - if (wasSourceLooping != isLooping()) - { - wasSourceLooping = isLooping(); - bufferValidStart = 0; - bufferValidEnd = 0; - } - - newBVS = jmax ((int64) 0, nextPlayPos); - newBVE = newBVS + buffer.getNumSamples() - 4; - sectionToReadStart = 0; - sectionToReadEnd = 0; - - const int maxChunkSize = 2048; - - if (newBVS < bufferValidStart || newBVS >= bufferValidEnd) - { - newBVE = jmin (newBVE, newBVS + maxChunkSize); - - sectionToReadStart = newBVS; - sectionToReadEnd = newBVE; - - bufferValidStart = 0; - bufferValidEnd = 0; - } - else if (std::abs ((int) (newBVS - bufferValidStart)) > 512 - || std::abs ((int) (newBVE - bufferValidEnd)) > 512) - { - newBVE = jmin (newBVE, bufferValidEnd + maxChunkSize); - - sectionToReadStart = bufferValidEnd; - sectionToReadEnd = newBVE; - - bufferValidStart = newBVS; - bufferValidEnd = jmin (bufferValidEnd, newBVE); - } - } - - if (sectionToReadStart != sectionToReadEnd) - { - const int bufferIndexStart = (int) (sectionToReadStart % buffer.getNumSamples()); - const int bufferIndexEnd = (int) (sectionToReadEnd % buffer.getNumSamples()); - - if (bufferIndexStart < bufferIndexEnd) - { - readBufferSection (sectionToReadStart, - (int) (sectionToReadEnd - sectionToReadStart), - bufferIndexStart); - } - else - { - const int initialSize = buffer.getNumSamples() - bufferIndexStart; - - readBufferSection (sectionToReadStart, - initialSize, - bufferIndexStart); - - readBufferSection (sectionToReadStart + initialSize, - (int) (sectionToReadEnd - sectionToReadStart) - initialSize, - 0); - } - - const ScopedLock sl2 (bufferStartPosLock); - - bufferValidStart = newBVS; - bufferValidEnd = newBVE; - - return true; - } - else - { - return false; - } -} - -void BufferingAudioSource::readBufferSection (const int64 start, const int length, const int bufferOffset) -{ - if (source->getNextReadPosition() != start) - source->setNextReadPosition (start); - - AudioSourceChannelInfo info; - info.buffer = &buffer; - info.startSample = bufferOffset; - info.numSamples = length; - - source->getNextAudioBlock (info); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_BufferingAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_ChannelRemappingAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ChannelRemappingAudioSource::ChannelRemappingAudioSource (AudioSource* const source_, - const bool deleteSourceWhenDeleted) - : source (source_, deleteSourceWhenDeleted), - requiredNumberOfChannels (2), - buffer (2, 16) -{ - remappedInfo.buffer = &buffer; - remappedInfo.startSample = 0; -} - -ChannelRemappingAudioSource::~ChannelRemappingAudioSource() {} - -void ChannelRemappingAudioSource::setNumberOfChannelsToProduce (const int requiredNumberOfChannels_) -{ - const ScopedLock sl (lock); - requiredNumberOfChannels = requiredNumberOfChannels_; -} - -void ChannelRemappingAudioSource::clearAllMappings() -{ - const ScopedLock sl (lock); - - remappedInputs.clear(); - remappedOutputs.clear(); -} - -void ChannelRemappingAudioSource::setInputChannelMapping (const int destIndex, const int sourceIndex) -{ - const ScopedLock sl (lock); - - while (remappedInputs.size() < destIndex) - remappedInputs.add (-1); - - remappedInputs.set (destIndex, sourceIndex); -} - -void ChannelRemappingAudioSource::setOutputChannelMapping (const int sourceIndex, const int destIndex) -{ - const ScopedLock sl (lock); - - while (remappedOutputs.size() < sourceIndex) - remappedOutputs.add (-1); - - remappedOutputs.set (sourceIndex, destIndex); -} - -int ChannelRemappingAudioSource::getRemappedInputChannel (const int inputChannelIndex) const -{ - const ScopedLock sl (lock); - - if (inputChannelIndex >= 0 && inputChannelIndex < remappedInputs.size()) - return remappedInputs.getUnchecked (inputChannelIndex); - - return -1; -} - -int ChannelRemappingAudioSource::getRemappedOutputChannel (const int outputChannelIndex) const -{ - const ScopedLock sl (lock); - - if (outputChannelIndex >= 0 && outputChannelIndex < remappedOutputs.size()) - return remappedOutputs .getUnchecked (outputChannelIndex); - - return -1; -} - -void ChannelRemappingAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - source->prepareToPlay (samplesPerBlockExpected, sampleRate); -} - -void ChannelRemappingAudioSource::releaseResources() -{ - source->releaseResources(); -} - -void ChannelRemappingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) -{ - const ScopedLock sl (lock); - - buffer.setSize (requiredNumberOfChannels, bufferToFill.numSamples, false, false, true); - - const int numChans = bufferToFill.buffer->getNumChannels(); - - int i; - for (i = 0; i < buffer.getNumChannels(); ++i) - { - const int remappedChan = getRemappedInputChannel (i); - - if (remappedChan >= 0 && remappedChan < numChans) - { - buffer.copyFrom (i, 0, *bufferToFill.buffer, - remappedChan, - bufferToFill.startSample, - bufferToFill.numSamples); - } - else - { - buffer.clear (i, 0, bufferToFill.numSamples); - } - } - - remappedInfo.numSamples = bufferToFill.numSamples; - - source->getNextAudioBlock (remappedInfo); - - bufferToFill.clearActiveBufferRegion(); - - for (i = 0; i < requiredNumberOfChannels; ++i) - { - const int remappedChan = getRemappedOutputChannel (i); - - if (remappedChan >= 0 && remappedChan < numChans) - { - bufferToFill.buffer->addFrom (remappedChan, bufferToFill.startSample, - buffer, i, 0, bufferToFill.numSamples); - - } - } -} - -XmlElement* ChannelRemappingAudioSource::createXml() const -{ - XmlElement* e = new XmlElement ("MAPPINGS"); - - String ins, outs; - int i; - - const ScopedLock sl (lock); - - for (i = 0; i < remappedInputs.size(); ++i) - ins << remappedInputs.getUnchecked(i) << ' '; - - for (i = 0; i < remappedOutputs.size(); ++i) - outs << remappedOutputs.getUnchecked(i) << ' '; - - e->setAttribute ("inputs", ins.trimEnd()); - e->setAttribute ("outputs", outs.trimEnd()); - - return e; -} - -void ChannelRemappingAudioSource::restoreFromXml (const XmlElement& e) -{ - if (e.hasTagName ("MAPPINGS")) - { - const ScopedLock sl (lock); - - clearAllMappings(); - - StringArray ins, outs; - ins.addTokens (e.getStringAttribute ("inputs"), false); - outs.addTokens (e.getStringAttribute ("outputs"), false); - - int i; - for (i = 0; i < ins.size(); ++i) - remappedInputs.add (ins[i].getIntValue()); - - for (i = 0; i < outs.size(); ++i) - remappedOutputs.add (outs[i].getIntValue()); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ChannelRemappingAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_IIRFilterAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -IIRFilterAudioSource::IIRFilterAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted) - : input (inputSource, deleteInputWhenDeleted) -{ - jassert (inputSource != nullptr); - - for (int i = 2; --i >= 0;) - iirFilters.add (new IIRFilter()); -} - -IIRFilterAudioSource::~IIRFilterAudioSource() {} - -void IIRFilterAudioSource::setFilterParameters (const IIRFilter& newSettings) -{ - for (int i = iirFilters.size(); --i >= 0;) - iirFilters.getUnchecked(i)->copyCoefficientsFrom (newSettings); -} - -void IIRFilterAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - input->prepareToPlay (samplesPerBlockExpected, sampleRate); - - for (int i = iirFilters.size(); --i >= 0;) - iirFilters.getUnchecked(i)->reset(); -} - -void IIRFilterAudioSource::releaseResources() -{ - input->releaseResources(); -} - -void IIRFilterAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) -{ - input->getNextAudioBlock (bufferToFill); - - const int numChannels = bufferToFill.buffer->getNumChannels(); - - while (numChannels > iirFilters.size()) - iirFilters.add (new IIRFilter (*iirFilters.getUnchecked (0))); - - for (int i = 0; i < numChannels; ++i) - iirFilters.getUnchecked(i) - ->processSamples (bufferToFill.buffer->getSampleData (i, bufferToFill.startSample), - bufferToFill.numSamples); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_IIRFilterAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_ReverbAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ReverbAudioSource::ReverbAudioSource (AudioSource* const inputSource, const bool deleteInputWhenDeleted) - : input (inputSource, deleteInputWhenDeleted), - bypass (false) -{ - jassert (inputSource != nullptr); -} - -ReverbAudioSource::~ReverbAudioSource() {} - -void ReverbAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - const ScopedLock sl (lock); - input->prepareToPlay (samplesPerBlockExpected, sampleRate); - reverb.setSampleRate (sampleRate); -} - -void ReverbAudioSource::releaseResources() {} - -void ReverbAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) -{ - const ScopedLock sl (lock); - - input->getNextAudioBlock (bufferToFill); - - if (! bypass) - { - float* const firstChannel = bufferToFill.buffer->getSampleData (0, bufferToFill.startSample); - - if (bufferToFill.buffer->getNumChannels() > 1) - { - reverb.processStereo (firstChannel, - bufferToFill.buffer->getSampleData (1, bufferToFill.startSample), - bufferToFill.numSamples); - } - else - { - reverb.processMono (firstChannel, bufferToFill.numSamples); - } - } -} - -void ReverbAudioSource::setParameters (const Reverb::Parameters& newParams) -{ - const ScopedLock sl (lock); - reverb.setParameters (newParams); -} - -void ReverbAudioSource::setBypassed (bool b) noexcept -{ - if (bypass != b) - { - const ScopedLock sl (lock); - bypass = b; - reverb.reset(); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ReverbAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_MixerAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MixerAudioSource::MixerAudioSource() - : tempBuffer (2, 0), - currentSampleRate (0.0), - bufferSizeExpected (0) -{ -} - -MixerAudioSource::~MixerAudioSource() -{ - removeAllInputs(); -} - -void MixerAudioSource::addInputSource (AudioSource* input, const bool deleteWhenRemoved) -{ - if (input != nullptr && ! inputs.contains (input)) - { - double localRate; - int localBufferSize; - - { - const ScopedLock sl (lock); - localRate = currentSampleRate; - localBufferSize = bufferSizeExpected; - } - - if (localRate > 0.0) - input->prepareToPlay (localBufferSize, localRate); - - const ScopedLock sl (lock); - - inputsToDelete.setBit (inputs.size(), deleteWhenRemoved); - inputs.add (input); - } -} - -void MixerAudioSource::removeInputSource (AudioSource* input, const bool deleteInput) -{ - if (input != nullptr) - { - int index; - - { - const ScopedLock sl (lock); - - index = inputs.indexOf (input); - - if (index >= 0) - { - inputsToDelete.shiftBits (index, 1); - inputs.remove (index); - } - } - - if (index >= 0) - { - input->releaseResources(); - - if (deleteInput) - delete input; - } - } -} - -void MixerAudioSource::removeAllInputs() -{ - OwnedArray toDelete; - - { - const ScopedLock sl (lock); - - for (int i = inputs.size(); --i >= 0;) - if (inputsToDelete[i]) - toDelete.add (inputs.getUnchecked(i)); - } -} - -void MixerAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - tempBuffer.setSize (2, samplesPerBlockExpected); - - const ScopedLock sl (lock); - - currentSampleRate = sampleRate; - bufferSizeExpected = samplesPerBlockExpected; - - for (int i = inputs.size(); --i >= 0;) - inputs.getUnchecked(i)->prepareToPlay (samplesPerBlockExpected, sampleRate); -} - -void MixerAudioSource::releaseResources() -{ - const ScopedLock sl (lock); - - for (int i = inputs.size(); --i >= 0;) - inputs.getUnchecked(i)->releaseResources(); - - tempBuffer.setSize (2, 0); - - currentSampleRate = 0; - bufferSizeExpected = 0; -} - -void MixerAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (lock); - - if (inputs.size() > 0) - { - inputs.getUnchecked(0)->getNextAudioBlock (info); - - if (inputs.size() > 1) - { - tempBuffer.setSize (jmax (1, info.buffer->getNumChannels()), - info.buffer->getNumSamples()); - - AudioSourceChannelInfo info2; - info2.buffer = &tempBuffer; - info2.numSamples = info.numSamples; - info2.startSample = 0; - - for (int i = 1; i < inputs.size(); ++i) - { - inputs.getUnchecked(i)->getNextAudioBlock (info2); - - for (int chan = 0; chan < info.buffer->getNumChannels(); ++chan) - info.buffer->addFrom (chan, info.startSample, tempBuffer, chan, 0, info.numSamples); - } - } - } - else - { - info.clearActiveBufferRegion(); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MixerAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_ResamplingAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ResamplingAudioSource::ResamplingAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted, - const int numChannels_) - : input (inputSource, deleteInputWhenDeleted), - ratio (1.0), - lastRatio (1.0), - buffer (numChannels_, 0), - sampsInBuffer (0), - numChannels (numChannels_) -{ - jassert (input != nullptr); -} - -ResamplingAudioSource::~ResamplingAudioSource() {} - -void ResamplingAudioSource::setResamplingRatio (const double samplesInPerOutputSample) -{ - jassert (samplesInPerOutputSample > 0); - - const SpinLock::ScopedLockType sl (ratioLock); - ratio = jmax (0.0, samplesInPerOutputSample); -} - -void ResamplingAudioSource::prepareToPlay (int samplesPerBlockExpected, - double sampleRate) -{ - const SpinLock::ScopedLockType sl (ratioLock); - - input->prepareToPlay (samplesPerBlockExpected, sampleRate); - - buffer.setSize (numChannels, roundToInt (samplesPerBlockExpected * ratio) + 32); - buffer.clear(); - sampsInBuffer = 0; - bufferPos = 0; - subSampleOffset = 0.0; - - filterStates.calloc (numChannels); - srcBuffers.calloc (numChannels); - destBuffers.calloc (numChannels); - createLowPass (ratio); - resetFilters(); -} - -void ResamplingAudioSource::releaseResources() -{ - input->releaseResources(); - buffer.setSize (numChannels, 0); -} - -void ResamplingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - double localRatio; - - { - const SpinLock::ScopedLockType sl (ratioLock); - localRatio = ratio; - } - - if (lastRatio != localRatio) - { - createLowPass (localRatio); - lastRatio = localRatio; - } - - const int sampsNeeded = roundToInt (info.numSamples * localRatio) + 2; - - int bufferSize = buffer.getNumSamples(); - - if (bufferSize < sampsNeeded + 8) - { - bufferPos %= bufferSize; - bufferSize = sampsNeeded + 32; - buffer.setSize (buffer.getNumChannels(), bufferSize, true, true); - } - - bufferPos %= bufferSize; - - int endOfBufferPos = bufferPos + sampsInBuffer; - const int channelsToProcess = jmin (numChannels, info.buffer->getNumChannels()); - - while (sampsNeeded > sampsInBuffer) - { - endOfBufferPos %= bufferSize; - - int numToDo = jmin (sampsNeeded - sampsInBuffer, - bufferSize - endOfBufferPos); - - AudioSourceChannelInfo readInfo; - readInfo.buffer = &buffer; - readInfo.numSamples = numToDo; - readInfo.startSample = endOfBufferPos; - - input->getNextAudioBlock (readInfo); - - if (localRatio > 1.0001) - { - // for down-sampling, pre-apply the filter.. - - for (int i = channelsToProcess; --i >= 0;) - applyFilter (buffer.getSampleData (i, endOfBufferPos), numToDo, filterStates[i]); - } - - sampsInBuffer += numToDo; - endOfBufferPos += numToDo; - } - - for (int channel = 0; channel < channelsToProcess; ++channel) - { - destBuffers[channel] = info.buffer->getSampleData (channel, info.startSample); - srcBuffers[channel] = buffer.getSampleData (channel, 0); - } - - int nextPos = (bufferPos + 1) % bufferSize; - for (int m = info.numSamples; --m >= 0;) - { - const float alpha = (float) subSampleOffset; - const float invAlpha = 1.0f - alpha; - - for (int channel = 0; channel < channelsToProcess; ++channel) - *destBuffers[channel]++ = srcBuffers[channel][bufferPos] * invAlpha + srcBuffers[channel][nextPos] * alpha; - - subSampleOffset += localRatio; - - jassert (sampsInBuffer > 0); - - while (subSampleOffset >= 1.0) - { - if (++bufferPos >= bufferSize) - bufferPos = 0; - - --sampsInBuffer; - - nextPos = (bufferPos + 1) % bufferSize; - subSampleOffset -= 1.0; - } - } - - if (localRatio < 0.9999) - { - // for up-sampling, apply the filter after transposing.. - for (int i = channelsToProcess; --i >= 0;) - applyFilter (info.buffer->getSampleData (i, info.startSample), info.numSamples, filterStates[i]); - } - else if (localRatio <= 1.0001) - { - // if the filter's not currently being applied, keep it stoked with the last couple of samples to avoid discontinuities - for (int i = channelsToProcess; --i >= 0;) - { - const float* const endOfBuffer = info.buffer->getSampleData (i, info.startSample + info.numSamples - 1); - FilterState& fs = filterStates[i]; - - if (info.numSamples > 1) - { - fs.y2 = fs.x2 = *(endOfBuffer - 1); - } - else - { - fs.y2 = fs.y1; - fs.x2 = fs.x1; - } - - fs.y1 = fs.x1 = *endOfBuffer; - } - } - - jassert (sampsInBuffer >= 0); -} - -void ResamplingAudioSource::createLowPass (const double frequencyRatio) -{ - const double proportionalRate = (frequencyRatio > 1.0) ? 0.5 / frequencyRatio - : 0.5 * frequencyRatio; - - const double n = 1.0 / std::tan (double_Pi * jmax (0.001, proportionalRate)); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + std::sqrt (2.0) * n + nSquared); - - setFilterCoefficients (c1, - c1 * 2.0f, - c1, - 1.0, - c1 * 2.0 * (1.0 - nSquared), - c1 * (1.0 - std::sqrt (2.0) * n + nSquared)); -} - -void ResamplingAudioSource::setFilterCoefficients (double c1, double c2, double c3, double c4, double c5, double c6) -{ - const double a = 1.0 / c4; - - c1 *= a; - c2 *= a; - c3 *= a; - c5 *= a; - c6 *= a; - - coefficients[0] = c1; - coefficients[1] = c2; - coefficients[2] = c3; - coefficients[3] = c4; - coefficients[4] = c5; - coefficients[5] = c6; -} - -void ResamplingAudioSource::resetFilters() -{ - filterStates.clear (numChannels); -} - -void ResamplingAudioSource::applyFilter (float* samples, int num, FilterState& fs) -{ - while (--num >= 0) - { - const double in = *samples; - - double out = coefficients[0] * in - + coefficients[1] * fs.x1 - + coefficients[2] * fs.x2 - - coefficients[4] * fs.y1 - - coefficients[5] * fs.y2; - - #if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; - #endif - - fs.x2 = fs.x1; - fs.x1 = in; - fs.y2 = fs.y1; - fs.y1 = out; - - *samples++ = (float) out; - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ResamplingAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_ToneGeneratorAudioSource.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ToneGeneratorAudioSource::ToneGeneratorAudioSource() - : frequency (1000.0), - sampleRate (44100.0), - currentPhase (0.0), - phasePerSample (0.0), - amplitude (0.5f) -{ -} - -ToneGeneratorAudioSource::~ToneGeneratorAudioSource() -{ -} - -void ToneGeneratorAudioSource::setAmplitude (const float newAmplitude) -{ - amplitude = newAmplitude; -} - -void ToneGeneratorAudioSource::setFrequency (const double newFrequencyHz) -{ - frequency = newFrequencyHz; - phasePerSample = 0.0; -} - -void ToneGeneratorAudioSource::prepareToPlay (int /*samplesPerBlockExpected*/, - double sampleRate_) -{ - currentPhase = 0.0; - phasePerSample = 0.0; - sampleRate = sampleRate_; -} - -void ToneGeneratorAudioSource::releaseResources() -{ -} - -void ToneGeneratorAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - if (phasePerSample == 0.0) - phasePerSample = double_Pi * 2.0 / (sampleRate / frequency); - - for (int i = 0; i < info.numSamples; ++i) - { - const float sample = amplitude * (float) std::sin (currentPhase); - currentPhase += phasePerSample; - - for (int j = info.buffer->getNumChannels(); --j >= 0;) - *info.buffer->getSampleData (j, info.startSample + i) = sample; - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ToneGeneratorAudioSource.cpp ***/ - - -/*** Start of inlined file: juce_AudioDeviceManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioDeviceManager::AudioDeviceSetup::AudioDeviceSetup() - : sampleRate (0), - bufferSize (0), - useDefaultInputChannels (true), - useDefaultOutputChannels (true) -{ -} - -bool AudioDeviceManager::AudioDeviceSetup::operator== (const AudioDeviceManager::AudioDeviceSetup& other) const -{ - return outputDeviceName == other.outputDeviceName - && inputDeviceName == other.inputDeviceName - && sampleRate == other.sampleRate - && bufferSize == other.bufferSize - && inputChannels == other.inputChannels - && useDefaultInputChannels == other.useDefaultInputChannels - && outputChannels == other.outputChannels - && useDefaultOutputChannels == other.useDefaultOutputChannels; -} - -AudioDeviceManager::AudioDeviceManager() - : numInputChansNeeded (0), - numOutputChansNeeded (2), - listNeedsScanning (true), - useInputNames (false), - inputLevelMeasurementEnabledCount (0), - inputLevel (0), - tempBuffer (2, 2), - cpuUsageMs (0), - timeToCpuScale (0) -{ - callbackHandler.owner = this; -} - -AudioDeviceManager::~AudioDeviceManager() -{ - currentAudioDevice = nullptr; - defaultMidiOutput = nullptr; -} - -void AudioDeviceManager::createDeviceTypesIfNeeded() -{ - if (availableDeviceTypes.size() == 0) - { - createAudioDeviceTypes (availableDeviceTypes); - - while (lastDeviceTypeConfigs.size() < availableDeviceTypes.size()) - lastDeviceTypeConfigs.add (new AudioDeviceSetup()); - - if (availableDeviceTypes.size() > 0) - currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName(); - - for (int i = 0; i < availableDeviceTypes.size(); ++i) - availableDeviceTypes.getUnchecked(i)->addListener (&callbackHandler); - } -} - -const OwnedArray & AudioDeviceManager::getAvailableDeviceTypes() -{ - scanDevicesIfNeeded(); - return availableDeviceTypes; -} - -void AudioDeviceManager::audioDeviceListChanged() -{ - sendChangeMessage(); -} - -static void addIfNotNull (OwnedArray & list, AudioIODeviceType* const device) -{ - if (device != nullptr) - list.add (device); -} - -void AudioDeviceManager::createAudioDeviceTypes (OwnedArray & list) -{ - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_WASAPI()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_DirectSound()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_ASIO()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_CoreAudio()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_iOSAudio()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_ALSA()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_JACK()); - addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_Android()); -} - -String AudioDeviceManager::initialise (const int numInputChannelsNeeded, - const int numOutputChannelsNeeded, - const XmlElement* const e, - const bool selectDefaultDeviceOnFailure, - const String& preferredDefaultDeviceName, - const AudioDeviceSetup* preferredSetupOptions) -{ - scanDevicesIfNeeded(); - - numInputChansNeeded = numInputChannelsNeeded; - numOutputChansNeeded = numOutputChannelsNeeded; - - if (e != nullptr && e->hasTagName ("DEVICESETUP")) - { - lastExplicitSettings = new XmlElement (*e); - - String error; - AudioDeviceSetup setup; - - if (preferredSetupOptions != nullptr) - setup = *preferredSetupOptions; - - if (e->getStringAttribute ("audioDeviceName").isNotEmpty()) - { - setup.inputDeviceName = setup.outputDeviceName - = e->getStringAttribute ("audioDeviceName"); - } - else - { - setup.inputDeviceName = e->getStringAttribute ("audioInputDeviceName"); - setup.outputDeviceName = e->getStringAttribute ("audioOutputDeviceName"); - } - - currentDeviceType = e->getStringAttribute ("deviceType"); - if (currentDeviceType.isEmpty()) - { - AudioIODeviceType* const type = findType (setup.inputDeviceName, setup.outputDeviceName); - - if (type != nullptr) - currentDeviceType = type->getTypeName(); - else if (availableDeviceTypes.size() > 0) - currentDeviceType = availableDeviceTypes[0]->getTypeName(); - } - - setup.bufferSize = e->getIntAttribute ("audioDeviceBufferSize"); - setup.sampleRate = e->getDoubleAttribute ("audioDeviceRate"); - - setup.inputChannels.parseString (e->getStringAttribute ("audioDeviceInChans", "11"), 2); - setup.outputChannels.parseString (e->getStringAttribute ("audioDeviceOutChans", "11"), 2); - - setup.useDefaultInputChannels = ! e->hasAttribute ("audioDeviceInChans"); - setup.useDefaultOutputChannels = ! e->hasAttribute ("audioDeviceOutChans"); - - error = setAudioDeviceSetup (setup, true); - - midiInsFromXml.clear(); - forEachXmlChildElementWithTagName (*e, c, "MIDIINPUT") - midiInsFromXml.add (c->getStringAttribute ("name")); - - const StringArray allMidiIns (MidiInput::getDevices()); - - for (int i = allMidiIns.size(); --i >= 0;) - setMidiInputEnabled (allMidiIns[i], midiInsFromXml.contains (allMidiIns[i])); - - if (error.isNotEmpty() && selectDefaultDeviceOnFailure) - error = initialise (numInputChannelsNeeded, numOutputChannelsNeeded, 0, - false, preferredDefaultDeviceName); - - setDefaultMidiOutput (e->getStringAttribute ("defaultMidiOutput")); - - return error; - } - else - { - AudioDeviceSetup setup; - - if (preferredSetupOptions != nullptr) - { - setup = *preferredSetupOptions; - } - else if (preferredDefaultDeviceName.isNotEmpty()) - { - for (int j = availableDeviceTypes.size(); --j >= 0;) - { - AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(j); - - StringArray outs (type->getDeviceNames (false)); - - int i; - for (i = 0; i < outs.size(); ++i) - { - if (outs[i].matchesWildcard (preferredDefaultDeviceName, true)) - { - setup.outputDeviceName = outs[i]; - break; - } - } - - StringArray ins (type->getDeviceNames (true)); - - for (i = 0; i < ins.size(); ++i) - { - if (ins[i].matchesWildcard (preferredDefaultDeviceName, true)) - { - setup.inputDeviceName = ins[i]; - break; - } - } - } - } - - insertDefaultDeviceNames (setup); - return setAudioDeviceSetup (setup, false); - } -} - -void AudioDeviceManager::insertDefaultDeviceNames (AudioDeviceSetup& setup) const -{ - AudioIODeviceType* type = getCurrentDeviceTypeObject(); - if (type != nullptr) - { - if (setup.outputDeviceName.isEmpty()) - setup.outputDeviceName = type->getDeviceNames (false) [type->getDefaultDeviceIndex (false)]; - - if (setup.inputDeviceName.isEmpty()) - setup.inputDeviceName = type->getDeviceNames (true) [type->getDefaultDeviceIndex (true)]; - } -} - -XmlElement* AudioDeviceManager::createStateXml() const -{ - return lastExplicitSettings != nullptr ? new XmlElement (*lastExplicitSettings) : nullptr; -} - -void AudioDeviceManager::scanDevicesIfNeeded() -{ - if (listNeedsScanning) - { - listNeedsScanning = false; - - createDeviceTypesIfNeeded(); - - for (int i = availableDeviceTypes.size(); --i >= 0;) - availableDeviceTypes.getUnchecked(i)->scanForDevices(); - } -} - -AudioIODeviceType* AudioDeviceManager::findType (const String& inputName, const String& outputName) -{ - scanDevicesIfNeeded(); - - for (int i = availableDeviceTypes.size(); --i >= 0;) - { - AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(i); - - if ((inputName.isNotEmpty() && type->getDeviceNames (true).contains (inputName, true)) - || (outputName.isNotEmpty() && type->getDeviceNames (false).contains (outputName, true))) - { - return type; - } - } - - return nullptr; -} - -void AudioDeviceManager::getAudioDeviceSetup (AudioDeviceSetup& setup) -{ - setup = currentSetup; -} - -void AudioDeviceManager::deleteCurrentDevice() -{ - currentAudioDevice = nullptr; - currentSetup.inputDeviceName = String::empty; - currentSetup.outputDeviceName = String::empty; -} - -void AudioDeviceManager::setCurrentAudioDeviceType (const String& type, - const bool treatAsChosenDevice) -{ - for (int i = 0; i < availableDeviceTypes.size(); ++i) - { - if (availableDeviceTypes.getUnchecked(i)->getTypeName() == type - && currentDeviceType != type) - { - currentDeviceType = type; - - AudioDeviceSetup s (*lastDeviceTypeConfigs.getUnchecked(i)); - insertDefaultDeviceNames (s); - - setAudioDeviceSetup (s, treatAsChosenDevice); - - sendChangeMessage(); - break; - } - } -} - -AudioIODeviceType* AudioDeviceManager::getCurrentDeviceTypeObject() const -{ - for (int i = 0; i < availableDeviceTypes.size(); ++i) - if (availableDeviceTypes[i]->getTypeName() == currentDeviceType) - return availableDeviceTypes[i]; - - return availableDeviceTypes[0]; -} - -String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup, - const bool treatAsChosenDevice) -{ - jassert (&newSetup != ¤tSetup); // this will have no effect - - if (newSetup == currentSetup && currentAudioDevice != nullptr) - return String::empty; - - if (! (newSetup == currentSetup)) - sendChangeMessage(); - - stopDevice(); - - const String newInputDeviceName (numInputChansNeeded == 0 ? String::empty : newSetup.inputDeviceName); - const String newOutputDeviceName (numOutputChansNeeded == 0 ? String::empty : newSetup.outputDeviceName); - - String error; - AudioIODeviceType* type = getCurrentDeviceTypeObject(); - - if (type == nullptr || (newInputDeviceName.isEmpty() && newOutputDeviceName.isEmpty())) - { - deleteCurrentDevice(); - - if (treatAsChosenDevice) - updateXml(); - - return String::empty; - } - - if (currentSetup.inputDeviceName != newInputDeviceName - || currentSetup.outputDeviceName != newOutputDeviceName - || currentAudioDevice == nullptr) - { - deleteCurrentDevice(); - scanDevicesIfNeeded(); - - if (newOutputDeviceName.isNotEmpty() - && ! type->getDeviceNames (false).contains (newOutputDeviceName)) - { - return "No such device: " + newOutputDeviceName; - } - - if (newInputDeviceName.isNotEmpty() - && ! type->getDeviceNames (true).contains (newInputDeviceName)) - { - return "No such device: " + newInputDeviceName; - } - - currentAudioDevice = type->createDevice (newOutputDeviceName, newInputDeviceName); - - if (currentAudioDevice == nullptr) - error = "Can't open the audio device!\n\nThis may be because another application is currently using the same device - if so, you should close any other applications and try again!"; - else - error = currentAudioDevice->getLastError(); - - if (error.isNotEmpty()) - { - deleteCurrentDevice(); - return error; - } - - if (newSetup.useDefaultInputChannels) - { - inputChannels.clear(); - inputChannels.setRange (0, numInputChansNeeded, true); - } - - if (newSetup.useDefaultOutputChannels) - { - outputChannels.clear(); - outputChannels.setRange (0, numOutputChansNeeded, true); - } - - if (newInputDeviceName.isEmpty()) - inputChannels.clear(); - - if (newOutputDeviceName.isEmpty()) - outputChannels.clear(); - } - - if (! newSetup.useDefaultInputChannels) - inputChannels = newSetup.inputChannels; - - if (! newSetup.useDefaultOutputChannels) - outputChannels = newSetup.outputChannels; - - currentSetup = newSetup; - - currentSetup.sampleRate = chooseBestSampleRate (newSetup.sampleRate); - currentSetup.bufferSize = chooseBestBufferSize (newSetup.bufferSize); - - error = currentAudioDevice->open (inputChannels, - outputChannels, - currentSetup.sampleRate, - currentSetup.bufferSize); - - if (error.isEmpty()) - { - currentDeviceType = currentAudioDevice->getTypeName(); - - currentAudioDevice->start (&callbackHandler); - - currentSetup.sampleRate = currentAudioDevice->getCurrentSampleRate(); - currentSetup.bufferSize = currentAudioDevice->getCurrentBufferSizeSamples(); - currentSetup.inputChannels = currentAudioDevice->getActiveInputChannels(); - currentSetup.outputChannels = currentAudioDevice->getActiveOutputChannels(); - - for (int i = 0; i < availableDeviceTypes.size(); ++i) - if (availableDeviceTypes.getUnchecked (i)->getTypeName() == currentDeviceType) - *(lastDeviceTypeConfigs.getUnchecked (i)) = currentSetup; - - if (treatAsChosenDevice) - updateXml(); - } - else - { - deleteCurrentDevice(); - } - - return error; -} - -double AudioDeviceManager::chooseBestSampleRate (double rate) const -{ - jassert (currentAudioDevice != nullptr); - - if (rate > 0) - for (int i = currentAudioDevice->getNumSampleRates(); --i >= 0;) - if (currentAudioDevice->getSampleRate (i) == rate) - return rate; - - double lowestAbove44 = 0.0; - - for (int i = currentAudioDevice->getNumSampleRates(); --i >= 0;) - { - const double sr = currentAudioDevice->getSampleRate (i); - - if (sr >= 44100.0 && (lowestAbove44 < 1.0 || sr < lowestAbove44)) - lowestAbove44 = sr; - } - - if (lowestAbove44 > 0.0) - return lowestAbove44; - - return currentAudioDevice->getSampleRate (0); -} - -int AudioDeviceManager::chooseBestBufferSize (int bufferSize) const -{ - jassert (currentAudioDevice != nullptr); - - if (bufferSize > 0) - for (int i = currentAudioDevice->getNumBufferSizesAvailable(); --i >= 0;) - if (currentAudioDevice->getBufferSizeSamples(i) == bufferSize) - return bufferSize; - - return currentAudioDevice->getDefaultBufferSize(); -} - -void AudioDeviceManager::stopDevice() -{ - if (currentAudioDevice != nullptr) - currentAudioDevice->stop(); - - testSound = nullptr; -} - -void AudioDeviceManager::closeAudioDevice() -{ - stopDevice(); - currentAudioDevice = nullptr; -} - -void AudioDeviceManager::restartLastAudioDevice() -{ - if (currentAudioDevice == nullptr) - { - if (currentSetup.inputDeviceName.isEmpty() - && currentSetup.outputDeviceName.isEmpty()) - { - // This method will only reload the last device that was running - // before closeAudioDevice() was called - you need to actually open - // one first, with setAudioDevice(). - jassertfalse; - return; - } - - AudioDeviceSetup s (currentSetup); - setAudioDeviceSetup (s, false); - } -} - -void AudioDeviceManager::updateXml() -{ - lastExplicitSettings = new XmlElement ("DEVICESETUP"); - - lastExplicitSettings->setAttribute ("deviceType", currentDeviceType); - lastExplicitSettings->setAttribute ("audioOutputDeviceName", currentSetup.outputDeviceName); - lastExplicitSettings->setAttribute ("audioInputDeviceName", currentSetup.inputDeviceName); - - if (currentAudioDevice != nullptr) - { - lastExplicitSettings->setAttribute ("audioDeviceRate", currentAudioDevice->getCurrentSampleRate()); - - if (currentAudioDevice->getDefaultBufferSize() != currentAudioDevice->getCurrentBufferSizeSamples()) - lastExplicitSettings->setAttribute ("audioDeviceBufferSize", currentAudioDevice->getCurrentBufferSizeSamples()); - - if (! currentSetup.useDefaultInputChannels) - lastExplicitSettings->setAttribute ("audioDeviceInChans", currentSetup.inputChannels.toString (2)); - - if (! currentSetup.useDefaultOutputChannels) - lastExplicitSettings->setAttribute ("audioDeviceOutChans", currentSetup.outputChannels.toString (2)); - } - - for (int i = 0; i < enabledMidiInputs.size(); ++i) - { - XmlElement* const m = lastExplicitSettings->createNewChildElement ("MIDIINPUT"); - m->setAttribute ("name", enabledMidiInputs[i]->getName()); - } - - if (midiInsFromXml.size() > 0) - { - // Add any midi devices that have been enabled before, but which aren't currently - // open because the device has been disconnected. - const StringArray availableMidiDevices (MidiInput::getDevices()); - - for (int i = 0; i < midiInsFromXml.size(); ++i) - { - if (! availableMidiDevices.contains (midiInsFromXml[i], true)) - { - XmlElement* const m = lastExplicitSettings->createNewChildElement ("MIDIINPUT"); - m->setAttribute ("name", midiInsFromXml[i]); - } - } - } - - if (defaultMidiOutputName.isNotEmpty()) - lastExplicitSettings->setAttribute ("defaultMidiOutput", defaultMidiOutputName); -} - -void AudioDeviceManager::addAudioCallback (AudioIODeviceCallback* newCallback) -{ - { - const ScopedLock sl (audioCallbackLock); - if (callbacks.contains (newCallback)) - return; - } - - if (currentAudioDevice != nullptr && newCallback != nullptr) - newCallback->audioDeviceAboutToStart (currentAudioDevice); - - const ScopedLock sl (audioCallbackLock); - callbacks.add (newCallback); -} - -void AudioDeviceManager::removeAudioCallback (AudioIODeviceCallback* callbackToRemove) -{ - if (callbackToRemove != nullptr) - { - bool needsDeinitialising = currentAudioDevice != nullptr; - - { - const ScopedLock sl (audioCallbackLock); - - needsDeinitialising = needsDeinitialising && callbacks.contains (callbackToRemove); - callbacks.removeValue (callbackToRemove); - } - - if (needsDeinitialising) - callbackToRemove->audioDeviceStopped(); - } -} - -void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) -{ - const ScopedLock sl (audioCallbackLock); - - if (inputLevelMeasurementEnabledCount > 0 && numInputChannels > 0) - { - for (int j = 0; j < numSamples; ++j) - { - float s = 0; - - for (int i = 0; i < numInputChannels; ++i) - s += std::abs (inputChannelData[i][j]); - - s /= numInputChannels; - - const double decayFactor = 0.99992; - - if (s > inputLevel) - inputLevel = s; - else if (inputLevel > 0.001f) - inputLevel *= decayFactor; - else - inputLevel = 0; - } - } - else - { - inputLevel = 0; - } - - if (callbacks.size() > 0) - { - const double callbackStartTime = Time::getMillisecondCounterHiRes(); - - tempBuffer.setSize (jmax (1, numOutputChannels), jmax (1, numSamples), false, false, true); - - callbacks.getUnchecked(0)->audioDeviceIOCallback (inputChannelData, numInputChannels, - outputChannelData, numOutputChannels, numSamples); - - float** const tempChans = tempBuffer.getArrayOfChannels(); - - for (int i = callbacks.size(); --i > 0;) - { - callbacks.getUnchecked(i)->audioDeviceIOCallback (inputChannelData, numInputChannels, - tempChans, numOutputChannels, numSamples); - - for (int chan = 0; chan < numOutputChannels; ++chan) - { - const float* const src = tempChans [chan]; - float* const dst = outputChannelData [chan]; - - if (src != nullptr && dst != nullptr) - for (int j = 0; j < numSamples; ++j) - dst[j] += src[j]; - } - } - - const double msTaken = Time::getMillisecondCounterHiRes() - callbackStartTime; - const double filterAmount = 0.2; - cpuUsageMs += filterAmount * (msTaken - cpuUsageMs); - } - else - { - for (int i = 0; i < numOutputChannels; ++i) - zeromem (outputChannelData[i], sizeof (float) * numSamples); - } - - if (testSound != nullptr) - { - const int numSamps = jmin (numSamples, testSound->getNumSamples() - testSoundPosition); - const float* const src = testSound->getSampleData (0, testSoundPosition); - - for (int i = 0; i < numOutputChannels; ++i) - for (int j = 0; j < numSamps; ++j) - outputChannelData [i][j] += src[j]; - - testSoundPosition += numSamps; - if (testSoundPosition >= testSound->getNumSamples()) - testSound = nullptr; - } -} - -void AudioDeviceManager::audioDeviceAboutToStartInt (AudioIODevice* const device) -{ - cpuUsageMs = 0; - - const double sampleRate = device->getCurrentSampleRate(); - const int blockSize = device->getCurrentBufferSizeSamples(); - - if (sampleRate > 0.0 && blockSize > 0) - { - const double msPerBlock = 1000.0 * blockSize / sampleRate; - timeToCpuScale = (msPerBlock > 0.0) ? (1.0 / msPerBlock) : 0.0; - } - - { - const ScopedLock sl (audioCallbackLock); - for (int i = callbacks.size(); --i >= 0;) - callbacks.getUnchecked(i)->audioDeviceAboutToStart (device); - } - - sendChangeMessage(); -} - -void AudioDeviceManager::audioDeviceStoppedInt() -{ - cpuUsageMs = 0; - timeToCpuScale = 0; - sendChangeMessage(); - - const ScopedLock sl (audioCallbackLock); - for (int i = callbacks.size(); --i >= 0;) - callbacks.getUnchecked(i)->audioDeviceStopped(); -} - -double AudioDeviceManager::getCpuUsage() const -{ - return jlimit (0.0, 1.0, timeToCpuScale * cpuUsageMs); -} - -void AudioDeviceManager::setMidiInputEnabled (const String& name, - const bool enabled) -{ - if (enabled != isMidiInputEnabled (name)) - { - if (enabled) - { - const int index = MidiInput::getDevices().indexOf (name); - - if (index >= 0) - { - MidiInput* const midiIn = MidiInput::openDevice (index, &callbackHandler); - - if (midiIn != nullptr) - { - enabledMidiInputs.add (midiIn); - midiIn->start(); - } - } - } - else - { - for (int i = enabledMidiInputs.size(); --i >= 0;) - if (enabledMidiInputs[i]->getName() == name) - enabledMidiInputs.remove (i); - } - - updateXml(); - sendChangeMessage(); - } -} - -bool AudioDeviceManager::isMidiInputEnabled (const String& name) const -{ - for (int i = enabledMidiInputs.size(); --i >= 0;) - if (enabledMidiInputs[i]->getName() == name) - return true; - - return false; -} - -void AudioDeviceManager::addMidiInputCallback (const String& name, - MidiInputCallback* callbackToAdd) -{ - removeMidiInputCallback (name, callbackToAdd); - - if (name.isEmpty() || isMidiInputEnabled (name)) - { - const ScopedLock sl (midiCallbackLock); - midiCallbacks.add (callbackToAdd); - midiCallbackDevices.add (name); - } -} - -void AudioDeviceManager::removeMidiInputCallback (const String& name, MidiInputCallback* callbackToRemove) -{ - for (int i = midiCallbacks.size(); --i >= 0;) - { - if (midiCallbackDevices[i] == name && midiCallbacks.getUnchecked(i) == callbackToRemove) - { - const ScopedLock sl (midiCallbackLock); - midiCallbacks.remove (i); - midiCallbackDevices.remove (i); - } - } -} - -void AudioDeviceManager::handleIncomingMidiMessageInt (MidiInput* source, - const MidiMessage& message) -{ - if (! message.isActiveSense()) - { - const bool isDefaultSource = (source == nullptr || source == enabledMidiInputs.getFirst()); - - const ScopedLock sl (midiCallbackLock); - - for (int i = midiCallbackDevices.size(); --i >= 0;) - { - const String name (midiCallbackDevices[i]); - - if ((isDefaultSource && name.isEmpty()) || (name.isNotEmpty() && name == source->getName())) - midiCallbacks.getUnchecked(i)->handleIncomingMidiMessage (source, message); - } - } -} - -void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName) -{ - if (defaultMidiOutputName != deviceName) - { - Array oldCallbacks; - - { - const ScopedLock sl (audioCallbackLock); - oldCallbacks = callbacks; - callbacks.clear(); - } - - if (currentAudioDevice != nullptr) - for (int i = oldCallbacks.size(); --i >= 0;) - oldCallbacks.getUnchecked(i)->audioDeviceStopped(); - - defaultMidiOutput = nullptr; - defaultMidiOutputName = deviceName; - - if (deviceName.isNotEmpty()) - defaultMidiOutput = MidiOutput::openDevice (MidiOutput::getDevices().indexOf (deviceName)); - - if (currentAudioDevice != nullptr) - for (int i = oldCallbacks.size(); --i >= 0;) - oldCallbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice); - - { - const ScopedLock sl (audioCallbackLock); - callbacks = oldCallbacks; - } - - updateXml(); - sendChangeMessage(); - } -} - -void AudioDeviceManager::CallbackHandler::audioDeviceIOCallback (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) -{ - owner->audioDeviceIOCallbackInt (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples); -} - -void AudioDeviceManager::CallbackHandler::audioDeviceAboutToStart (AudioIODevice* device) -{ - owner->audioDeviceAboutToStartInt (device); -} - -void AudioDeviceManager::CallbackHandler::audioDeviceStopped() -{ - owner->audioDeviceStoppedInt(); -} - -void AudioDeviceManager::CallbackHandler::handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message) -{ - owner->handleIncomingMidiMessageInt (source, message); -} - -void AudioDeviceManager::CallbackHandler::audioDeviceListChanged() -{ - owner->audioDeviceListChanged(); -} - -void AudioDeviceManager::playTestSound() -{ - { // cunningly nested to swap, unlock and delete in that order. - ScopedPointer oldSound; - - { - const ScopedLock sl (audioCallbackLock); - oldSound = testSound; - } - } - - testSoundPosition = 0; - - if (currentAudioDevice != nullptr) - { - const double sampleRate = currentAudioDevice->getCurrentSampleRate(); - const int soundLength = (int) sampleRate; - - AudioSampleBuffer* const newSound = new AudioSampleBuffer (1, soundLength); - float* samples = newSound->getSampleData (0); - - const double frequency = MidiMessage::getMidiNoteInHertz (80); - const float amplitude = 0.5f; - - const double phasePerSample = double_Pi * 2.0 / (sampleRate / frequency); - - for (int i = 0; i < soundLength; ++i) - samples[i] = amplitude * (float) std::sin (i * phasePerSample); - - newSound->applyGainRamp (0, 0, soundLength / 10, 0.0f, 1.0f); - newSound->applyGainRamp (0, soundLength - soundLength / 4, soundLength / 4, 1.0f, 0.0f); - - const ScopedLock sl (audioCallbackLock); - testSound = newSound; - } -} - -void AudioDeviceManager::enableInputLevelMeasurement (const bool enableMeasurement) -{ - const ScopedLock sl (audioCallbackLock); - - if (enableMeasurement) - ++inputLevelMeasurementEnabledCount; - else - --inputLevelMeasurementEnabledCount; - - inputLevel = 0; -} - -double AudioDeviceManager::getCurrentInputLevel() const -{ - jassert (inputLevelMeasurementEnabledCount > 0); // you need to call enableInputLevelMeasurement() before using this! - return inputLevel; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioDeviceManager.cpp ***/ - - -/*** Start of inlined file: juce_AudioIODevice.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioIODevice::AudioIODevice (const String& deviceName, const String& typeName_) - : name (deviceName), - typeName (typeName_) -{ -} - -AudioIODevice::~AudioIODevice() -{ -} - -bool AudioIODevice::hasControlPanel() const -{ - return false; -} - -bool AudioIODevice::showControlPanel() -{ - jassertfalse; // this should only be called for devices which return true from - // their hasControlPanel() method. - return false; -} - -void AudioIODeviceCallback::audioDeviceError (const String&) {} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioIODevice.cpp ***/ - - -/*** Start of inlined file: juce_AudioIODeviceType.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioIODeviceType::AudioIODeviceType (const String& name) - : typeName (name) -{ -} - -AudioIODeviceType::~AudioIODeviceType() -{ -} - -void AudioIODeviceType::addListener (Listener* l) { listeners.add (l); } -void AudioIODeviceType::removeListener (Listener* l) { listeners.remove (l); } - -void AudioIODeviceType::callDeviceChangeListeners() -{ - listeners.call (&AudioIODeviceType::Listener::audioDeviceListChanged); -} - -#if ! JUCE_MAC -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_CoreAudio() { return nullptr; } -#endif - -#if ! JUCE_IOS -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_iOSAudio() { return nullptr; } -#endif - -#if ! (JUCE_WINDOWS && JUCE_WASAPI) -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_WASAPI() { return nullptr; } -#endif - -#if ! (JUCE_WINDOWS && JUCE_DIRECTSOUND) -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_DirectSound() { return nullptr; } -#endif - -#if ! (JUCE_WINDOWS && JUCE_ASIO) -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ASIO() { return nullptr; } -#endif - -#if ! (JUCE_LINUX && JUCE_ALSA) -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_ALSA() { return nullptr; } -#endif - -#if ! (JUCE_LINUX && JUCE_JACK) -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_JACK() { return nullptr; } -#endif - -#if ! JUCE_ANDROID -AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_Android() { return nullptr; } -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioIODeviceType.cpp ***/ - - -/*** Start of inlined file: juce_AudioDataConverters.cpp ***/ -BEGIN_JUCE_NAMESPACE - -void AudioDataConverters::convertFloatToInt16LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint16*) intData = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint16*) intData = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt16BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint16*) intData = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint16*) intData = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt24LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - ByteOrder::littleEndian24BitToChars ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - ByteOrder::littleEndian24BitToChars ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - } - } -} - -void AudioDataConverters::convertFloatToInt24BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - ByteOrder::bigEndian24BitToChars ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - ByteOrder::bigEndian24BitToChars ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - } - } -} - -void AudioDataConverters::convertFloatToInt32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffffff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint32*)intData = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint32*)intData = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffffff; - char* intData = static_cast (dest); - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint32*)intData = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint32*)intData = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToFloat32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data! - - char* d = static_cast (dest); - - for (int i = 0; i < numSamples; ++i) - { - *(float*) d = source[i]; - - #if JUCE_BIG_ENDIAN - *(uint32*) d = ByteOrder::swap (*(uint32*) d); - #endif - - d += destBytesPerSample; - } -} - -void AudioDataConverters::convertFloatToFloat32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data! - - char* d = static_cast (dest); - - for (int i = 0; i < numSamples; ++i) - { - *(float*) d = source[i]; - - #if JUCE_LITTLE_ENDIAN - *(uint32*) d = ByteOrder::swap (*(uint32*) d); - #endif - - d += destBytesPerSample; - } -} - -void AudioDataConverters::convertInt16LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*(uint16*)intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*(uint16*)intData); - } - } -} - -void AudioDataConverters::convertInt16BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*(uint16*)intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*(uint16*)intData); - } - } -} - -void AudioDataConverters::convertInt24LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) ByteOrder::littleEndian24Bit (intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) ByteOrder::littleEndian24Bit (intData); - } - } -} - -void AudioDataConverters::convertInt24BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) ByteOrder::bigEndian24Bit (intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) ByteOrder::bigEndian24Bit (intData); - } - } -} - -void AudioDataConverters::convertInt32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffffff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*(uint32*) intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*(uint32*) intData); - } - } -} - -void AudioDataConverters::convertInt32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffffff; - const char* intData = static_cast (source); - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*(uint32*) intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*(uint32*) intData); - } - } -} - -void AudioDataConverters::convertFloat32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const char* s = static_cast (source); - - for (int i = 0; i < numSamples; ++i) - { - dest[i] = *(float*)s; - - #if JUCE_BIG_ENDIAN - uint32* const d = (uint32*) (dest + i); - *d = ByteOrder::swap (*d); - #endif - - s += srcBytesPerSample; - } -} - -void AudioDataConverters::convertFloat32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const char* s = static_cast (source); - - for (int i = 0; i < numSamples; ++i) - { - dest[i] = *(float*)s; - - #if JUCE_LITTLE_ENDIAN - uint32* const d = (uint32*) (dest + i); - *d = ByteOrder::swap (*d); - #endif - - s += srcBytesPerSample; - } -} - -void AudioDataConverters::convertFloatToFormat (const DataFormat destFormat, - const float* const source, - void* const dest, - const int numSamples) -{ - switch (destFormat) - { - case int16LE: convertFloatToInt16LE (source, dest, numSamples); break; - case int16BE: convertFloatToInt16BE (source, dest, numSamples); break; - case int24LE: convertFloatToInt24LE (source, dest, numSamples); break; - case int24BE: convertFloatToInt24BE (source, dest, numSamples); break; - case int32LE: convertFloatToInt32LE (source, dest, numSamples); break; - case int32BE: convertFloatToInt32BE (source, dest, numSamples); break; - case float32LE: convertFloatToFloat32LE (source, dest, numSamples); break; - case float32BE: convertFloatToFloat32BE (source, dest, numSamples); break; - default: jassertfalse; break; - } -} - -void AudioDataConverters::convertFormatToFloat (const DataFormat sourceFormat, - const void* const source, - float* const dest, - const int numSamples) -{ - switch (sourceFormat) - { - case int16LE: convertInt16LEToFloat (source, dest, numSamples); break; - case int16BE: convertInt16BEToFloat (source, dest, numSamples); break; - case int24LE: convertInt24LEToFloat (source, dest, numSamples); break; - case int24BE: convertInt24BEToFloat (source, dest, numSamples); break; - case int32LE: convertInt32LEToFloat (source, dest, numSamples); break; - case int32BE: convertInt32BEToFloat (source, dest, numSamples); break; - case float32LE: convertFloat32LEToFloat (source, dest, numSamples); break; - case float32BE: convertFloat32BEToFloat (source, dest, numSamples); break; - default: jassertfalse; break; - } -} - -void AudioDataConverters::interleaveSamples (const float** const source, - float* const dest, - const int numSamples, - const int numChannels) -{ - for (int chan = 0; chan < numChannels; ++chan) - { - int i = chan; - const float* src = source [chan]; - - for (int j = 0; j < numSamples; ++j) - { - dest [i] = src [j]; - i += numChannels; - } - } -} - -void AudioDataConverters::deinterleaveSamples (const float* const source, - float** const dest, - const int numSamples, - const int numChannels) -{ - for (int chan = 0; chan < numChannels; ++chan) - { - int i = chan; - float* dst = dest [chan]; - - for (int j = 0; j < numSamples; ++j) - { - dst [j] = source [i]; - i += numChannels; - } - } -} - -#if JUCE_UNIT_TESTS - -class AudioConversionTests : public UnitTest -{ -public: - AudioConversionTests() : UnitTest ("Audio data conversion") {} - - template - struct Test5 - { - static void test (UnitTest& unitTest) - { - test (unitTest, false); - test (unitTest, true); - } - - static void test (UnitTest& unitTest, bool inPlace) - { - const int numSamples = 2048; - int32 original [numSamples], converted [numSamples], reversed [numSamples]; - Random r; - - { - AudioData::Pointer d (original); - bool clippingFailed = false; - - for (int i = 0; i < numSamples / 2; ++i) - { - d.setAsFloat (r.nextFloat() * 2.2f - 1.1f); - - if (! d.isFloatingPoint()) - clippingFailed = d.getAsFloat() > 1.0f || d.getAsFloat() < -1.0f || clippingFailed; - - ++d; - d.setAsInt32 (r.nextInt()); - ++d; - } - - unitTest.expect (! clippingFailed); - } - - // convert data from the source to dest format.. - ScopedPointer conv (new AudioData::ConverterInstance , - AudioData::Pointer >()); - conv->convertSamples (inPlace ? reversed : converted, original, numSamples); - - // ..and back again.. - conv = new AudioData::ConverterInstance , - AudioData::Pointer >(); - if (! inPlace) - zeromem (reversed, sizeof (reversed)); - - conv->convertSamples (reversed, inPlace ? reversed : converted, numSamples); - - { - int biggestDiff = 0; - AudioData::Pointer d1 (original); - AudioData::Pointer d2 (reversed); - - const int errorMargin = 2 * AudioData::Pointer::get32BitResolution() - + AudioData::Pointer::get32BitResolution(); - - for (int i = 0; i < numSamples; ++i) - { - biggestDiff = jmax (biggestDiff, std::abs (d1.getAsInt32() - d2.getAsInt32())); - ++d1; - ++d2; - } - - unitTest.expect (biggestDiff <= errorMargin); - } - } - }; - - template - struct Test3 - { - static void test (UnitTest& unitTest) - { - Test5 ::test (unitTest); - Test5 ::test (unitTest); - } - }; - - template - struct Test2 - { - static void test (UnitTest& unitTest) - { - Test3 ::test (unitTest); - Test3 ::test (unitTest); - Test3 ::test (unitTest); - Test3 ::test (unitTest); - Test3 ::test (unitTest); - Test3 ::test (unitTest); - } - }; - - template - struct Test1 - { - static void test (UnitTest& unitTest) - { - Test2 ::test (unitTest); - Test2 ::test (unitTest); - } - }; - - void runTest() - { - beginTest ("Round-trip conversion: Int8"); - Test1 ::test (*this); - beginTest ("Round-trip conversion: Int16"); - Test1 ::test (*this); - beginTest ("Round-trip conversion: Int24"); - Test1 ::test (*this); - beginTest ("Round-trip conversion: Int32"); - Test1 ::test (*this); - beginTest ("Round-trip conversion: Float32"); - Test1 ::test (*this); - } -}; - -static AudioConversionTests audioConversionUnitTests; - -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioDataConverters.cpp ***/ - - -/*** Start of inlined file: juce_AudioSampleBuffer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioSampleBuffer::AudioSampleBuffer (const int numChannels_, - const int numSamples) noexcept - : numChannels (numChannels_), - size (numSamples) -{ - jassert (numSamples >= 0); - jassert (numChannels_ > 0); - - allocateData(); -} - -AudioSampleBuffer::AudioSampleBuffer (const AudioSampleBuffer& other) noexcept - : numChannels (other.numChannels), - size (other.size) -{ - allocateData(); - const size_t numBytes = size * sizeof (float); - - for (int i = 0; i < numChannels; ++i) - memcpy (channels[i], other.channels[i], numBytes); -} - -void AudioSampleBuffer::allocateData() -{ - const size_t channelListSize = (numChannels + 1) * sizeof (float*); - allocatedBytes = (int) (numChannels * size * sizeof (float) + channelListSize + 32); - allocatedData.malloc (allocatedBytes); - channels = reinterpret_cast (allocatedData.getData()); - - float* chan = (float*) (allocatedData + channelListSize); - for (int i = 0; i < numChannels; ++i) - { - channels[i] = chan; - chan += size; - } - - channels [numChannels] = 0; -} - -AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, - const int numChannels_, - const int numSamples) noexcept - : numChannels (numChannels_), - size (numSamples), - allocatedBytes (0) -{ - jassert (numChannels_ > 0); - allocateChannels (dataToReferTo, 0); -} - -AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, - const int numChannels_, - const int startSample, - const int numSamples) noexcept - : numChannels (numChannels_), - size (numSamples), - allocatedBytes (0) -{ - jassert (numChannels_ > 0); - allocateChannels (dataToReferTo, startSample); -} - -void AudioSampleBuffer::setDataToReferTo (float** dataToReferTo, - const int newNumChannels, - const int newNumSamples) noexcept -{ - jassert (newNumChannels > 0); - - allocatedBytes = 0; - allocatedData.free(); - - numChannels = newNumChannels; - size = newNumSamples; - - allocateChannels (dataToReferTo, 0); -} - -void AudioSampleBuffer::allocateChannels (float** const dataToReferTo, int offset) -{ - // (try to avoid doing a malloc here, as that'll blow up things like Pro-Tools) - if (numChannels < numElementsInArray (preallocatedChannelSpace)) - { - channels = static_cast (preallocatedChannelSpace); - } - else - { - allocatedData.malloc (numChannels + 1, sizeof (float*)); - channels = reinterpret_cast (allocatedData.getData()); - } - - for (int i = 0; i < numChannels; ++i) - { - // you have to pass in the same number of valid pointers as numChannels - jassert (dataToReferTo[i] != nullptr); - - channels[i] = dataToReferTo[i] + offset; - } - - channels [numChannels] = 0; -} - -AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer& other) noexcept -{ - if (this != &other) - { - setSize (other.getNumChannels(), other.getNumSamples(), false, false, false); - - const size_t numBytes = size * sizeof (float); - - for (int i = 0; i < numChannels; ++i) - memcpy (channels[i], other.channels[i], numBytes); - } - - return *this; -} - -AudioSampleBuffer::~AudioSampleBuffer() noexcept -{ -} - -void AudioSampleBuffer::setSize (const int newNumChannels, - const int newNumSamples, - const bool keepExistingContent, - const bool clearExtraSpace, - const bool avoidReallocating) noexcept -{ - jassert (newNumChannels > 0); - - if (newNumSamples != size || newNumChannels != numChannels) - { - const size_t channelListSize = (newNumChannels + 1) * sizeof (float*); - const size_t newTotalBytes = (newNumChannels * newNumSamples * sizeof (float)) + channelListSize + 32; - - if (keepExistingContent) - { - HeapBlock newData; - newData.allocate (newTotalBytes, clearExtraSpace); - - const int numChansToCopy = jmin (numChannels, newNumChannels); - const size_t numBytesToCopy = sizeof (float) * jmin (newNumSamples, size); - - float** const newChannels = reinterpret_cast (newData.getData()); - float* newChan = reinterpret_cast (newData + channelListSize); - for (int i = 0; i < numChansToCopy; ++i) - { - memcpy (newChan, channels[i], numBytesToCopy); - newChannels[i] = newChan; - newChan += newNumSamples; - } - - allocatedData.swapWith (newData); - allocatedBytes = (int) newTotalBytes; - channels = newChannels; - } - else - { - if (avoidReallocating && allocatedBytes >= newTotalBytes) - { - if (clearExtraSpace) - allocatedData.clear (newTotalBytes); - } - else - { - allocatedBytes = newTotalBytes; - allocatedData.allocate (newTotalBytes, clearExtraSpace); - channels = reinterpret_cast (allocatedData.getData()); - } - - float* chan = reinterpret_cast (allocatedData + channelListSize); - for (int i = 0; i < newNumChannels; ++i) - { - channels[i] = chan; - chan += newNumSamples; - } - } - - channels [newNumChannels] = 0; - size = newNumSamples; - numChannels = newNumChannels; - } -} - -void AudioSampleBuffer::clear() noexcept -{ - for (int i = 0; i < numChannels; ++i) - zeromem (channels[i], size * sizeof (float)); -} - -void AudioSampleBuffer::clear (const int startSample, - const int numSamples) noexcept -{ - jassert (startSample >= 0 && startSample + numSamples <= size); - - for (int i = 0; i < numChannels; ++i) - zeromem (channels [i] + startSample, numSamples * sizeof (float)); -} - -void AudioSampleBuffer::clear (const int channel, - const int startSample, - const int numSamples) noexcept -{ - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - zeromem (channels [channel] + startSample, numSamples * sizeof (float)); -} - -void AudioSampleBuffer::applyGain (const int channel, - const int startSample, - int numSamples, - const float gain) noexcept -{ - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (gain != 1.0f) - { - float* d = channels [channel] + startSample; - - if (gain == 0.0f) - { - zeromem (d, sizeof (float) * numSamples); - } - else - { - while (--numSamples >= 0) - *d++ *= gain; - } - } -} - -void AudioSampleBuffer::applyGainRamp (const int channel, - const int startSample, - int numSamples, - float startGain, - float endGain) noexcept -{ - if (startGain == endGain) - { - applyGain (channel, startSample, numSamples, startGain); - } - else - { - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - const float increment = (endGain - startGain) / numSamples; - float* d = channels [channel] + startSample; - - while (--numSamples >= 0) - { - *d++ *= startGain; - startGain += increment; - } - } -} - -void AudioSampleBuffer::applyGain (const int startSample, - const int numSamples, - const float gain) noexcept -{ - for (int i = 0; i < numChannels; ++i) - applyGain (i, startSample, numSamples, gain); -} - -void AudioSampleBuffer::addFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples, - const float gain) noexcept -{ - jassert (&source != this || sourceChannel != destChannel); - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (isPositiveAndBelow (sourceChannel, source.numChannels)); - jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); - - if (gain != 0.0f && numSamples > 0) - { - float* d = channels [destChannel] + destStartSample; - const float* s = source.channels [sourceChannel] + sourceStartSample; - - if (gain != 1.0f) - { - while (--numSamples >= 0) - *d++ += gain * *s++; - } - else - { - while (--numSamples >= 0) - *d++ += *s++; - } - } -} - -void AudioSampleBuffer::addFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gain) noexcept -{ - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != nullptr); - - if (gain != 0.0f && numSamples > 0) - { - float* d = channels [destChannel] + destStartSample; - - if (gain != 1.0f) - { - while (--numSamples >= 0) - *d++ += gain * *source++; - } - else - { - while (--numSamples >= 0) - *d++ += *source++; - } - } -} - -void AudioSampleBuffer::addFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - const float endGain) noexcept -{ - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != nullptr); - - if (startGain == endGain) - { - addFrom (destChannel, - destStartSample, - source, - numSamples, - startGain); - } - else - { - if (numSamples > 0 && (startGain != 0.0f || endGain != 0.0f)) - { - const float increment = (endGain - startGain) / numSamples; - float* d = channels [destChannel] + destStartSample; - - while (--numSamples >= 0) - { - *d++ += startGain * *source++; - startGain += increment; - } - } - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples) noexcept -{ - jassert (&source != this || sourceChannel != destChannel); - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (isPositiveAndBelow (sourceChannel, source.numChannels)); - jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); - - if (numSamples > 0) - { - memcpy (channels [destChannel] + destStartSample, - source.channels [sourceChannel] + sourceStartSample, - sizeof (float) * numSamples); - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples) noexcept -{ - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != nullptr); - - if (numSamples > 0) - { - memcpy (channels [destChannel] + destStartSample, - source, - sizeof (float) * numSamples); - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gain) noexcept -{ - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != nullptr); - - if (numSamples > 0) - { - float* d = channels [destChannel] + destStartSample; - - if (gain != 1.0f) - { - if (gain == 0) - { - zeromem (d, sizeof (float) * numSamples); - } - else - { - while (--numSamples >= 0) - *d++ = gain * *source++; - } - } - else - { - memcpy (d, source, sizeof (float) * numSamples); - } - } -} - -void AudioSampleBuffer::copyFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - float endGain) noexcept -{ - jassert (isPositiveAndBelow (destChannel, numChannels)); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != nullptr); - - if (startGain == endGain) - { - copyFrom (destChannel, - destStartSample, - source, - numSamples, - startGain); - } - else - { - if (numSamples > 0 && (startGain != 0.0f || endGain != 0.0f)) - { - const float increment = (endGain - startGain) / numSamples; - float* d = channels [destChannel] + destStartSample; - - while (--numSamples >= 0) - { - *d++ = startGain * *source++; - startGain += increment; - } - } - } -} - -void AudioSampleBuffer::findMinMax (const int channel, - const int startSample, - int numSamples, - float& minVal, - float& maxVal) const noexcept -{ - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - findMinAndMax (channels [channel] + startSample, numSamples, minVal, maxVal); -} - -float AudioSampleBuffer::getMagnitude (const int channel, - const int startSample, - const int numSamples) const noexcept -{ - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - float mn, mx; - findMinMax (channel, startSample, numSamples, mn, mx); - - return jmax (mn, -mn, mx, -mx); -} - -float AudioSampleBuffer::getMagnitude (const int startSample, - const int numSamples) const noexcept -{ - float mag = 0.0f; - - for (int i = 0; i < numChannels; ++i) - mag = jmax (mag, getMagnitude (i, startSample, numSamples)); - - return mag; -} - -float AudioSampleBuffer::getRMSLevel (const int channel, - const int startSample, - const int numSamples) const noexcept -{ - jassert (isPositiveAndBelow (channel, numChannels)); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples <= 0 || channel < 0 || channel >= numChannels) - return 0.0f; - - const float* const data = channels [channel] + startSample; - double sum = 0.0; - - for (int i = 0; i < numSamples; ++i) - { - const float sample = data [i]; - sum += sample * sample; - } - - return (float) std::sqrt (sum / numSamples); -} - -void AudioSampleBuffer::readFromAudioReader (AudioFormatReader* reader, - const int startSample, - const int numSamples, - const int64 readerStartSample, - const bool useLeftChan, - const bool useRightChan) -{ - jassert (reader != nullptr); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples > 0) - { - int* chans[3]; - - if (useLeftChan == useRightChan) - { - chans[0] = reinterpret_cast (getSampleData (0, startSample)); - chans[1] = (reader->numChannels > 1 && getNumChannels() > 1) ? reinterpret_cast (getSampleData (1, startSample)) : 0; - } - else if (useLeftChan || (reader->numChannels == 1)) - { - chans[0] = reinterpret_cast (getSampleData (0, startSample)); - chans[1] = nullptr; - } - else if (useRightChan) - { - chans[0] = nullptr; - chans[1] = reinterpret_cast (getSampleData (0, startSample)); - } - - chans[2] = nullptr; - - reader->read (chans, 2, readerStartSample, numSamples, true); - - if (! reader->usesFloatingPointData) - { - for (int j = 0; j < 2; ++j) - { - float* const d = reinterpret_cast (chans[j]); - - if (d != nullptr) - { - const float multiplier = 1.0f / 0x7fffffff; - - for (int i = 0; i < numSamples; ++i) - d[i] = *reinterpret_cast (d + i) * multiplier; - } - } - } - - if (numChannels > 1 && (chans[0] == nullptr || chans[1] == nullptr)) - { - // if this is a stereo buffer and the source was mono, dupe the first channel.. - memcpy (getSampleData (1, startSample), - getSampleData (0, startSample), - sizeof (float) * numSamples); - } - } -} - -void AudioSampleBuffer::writeToAudioWriter (AudioFormatWriter* writer, - const int startSample, - const int numSamples) const -{ - jassert (writer != nullptr); - writer->writeFromAudioSampleBuffer (*this, startSample, numSamples); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioSampleBuffer.cpp ***/ - - -/*** Start of inlined file: juce_IIRFilter.cpp ***/ -BEGIN_JUCE_NAMESPACE - -IIRFilter::IIRFilter() - : active (false) -{ - reset(); -} - -IIRFilter::IIRFilter (const IIRFilter& other) - : active (other.active) -{ - const ScopedLock sl (other.processLock); - memcpy (coefficients, other.coefficients, sizeof (coefficients)); - reset(); -} - -IIRFilter::~IIRFilter() -{ -} - -void IIRFilter::reset() noexcept -{ - const ScopedLock sl (processLock); - - x1 = 0; - x2 = 0; - y1 = 0; - y2 = 0; -} - -float IIRFilter::processSingleSampleRaw (const float in) noexcept -{ - float out = coefficients[0] * in - + coefficients[1] * x1 - + coefficients[2] * x2 - - coefficients[4] * y1 - - coefficients[5] * y2; - - #if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; - #endif - - x2 = x1; - x1 = in; - y2 = y1; - y1 = out; - - return out; -} - -void IIRFilter::processSamples (float* const samples, - const int numSamples) noexcept -{ - const ScopedLock sl (processLock); - - if (active) - { - for (int i = 0; i < numSamples; ++i) - { - const float in = samples[i]; - - float out = coefficients[0] * in - + coefficients[1] * x1 - + coefficients[2] * x2 - - coefficients[4] * y1 - - coefficients[5] * y2; - - #if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; - #endif - - x2 = x1; - x1 = in; - y2 = y1; - y1 = out; - - samples[i] = out; - } - } -} - -void IIRFilter::makeLowPass (const double sampleRate, - const double frequency) noexcept -{ - jassert (sampleRate > 0); - - const double n = 1.0 / tan (double_Pi * frequency / sampleRate); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + std::sqrt (2.0) * n + nSquared); - - setCoefficients (c1, - c1 * 2.0f, - c1, - 1.0, - c1 * 2.0 * (1.0 - nSquared), - c1 * (1.0 - std::sqrt (2.0) * n + nSquared)); -} - -void IIRFilter::makeHighPass (const double sampleRate, - const double frequency) noexcept -{ - const double n = tan (double_Pi * frequency / sampleRate); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + std::sqrt (2.0) * n + nSquared); - - setCoefficients (c1, - c1 * -2.0f, - c1, - 1.0, - c1 * 2.0 * (nSquared - 1.0), - c1 * (1.0 - std::sqrt (2.0) * n + nSquared)); -} - -void IIRFilter::makeLowShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) noexcept -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double aminus1 = A - 1.0; - const double aplus1 = A + 1.0; - const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate; - const double coso = std::cos (omega); - const double beta = std::sin (omega) * std::sqrt (A) / Q; - const double aminus1TimesCoso = aminus1 * coso; - - setCoefficients (A * (aplus1 - aminus1TimesCoso + beta), - A * 2.0 * (aminus1 - aplus1 * coso), - A * (aplus1 - aminus1TimesCoso - beta), - aplus1 + aminus1TimesCoso + beta, - -2.0 * (aminus1 + aplus1 * coso), - aplus1 + aminus1TimesCoso - beta); -} - -void IIRFilter::makeHighShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) noexcept -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double aminus1 = A - 1.0; - const double aplus1 = A + 1.0; - const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate; - const double coso = std::cos (omega); - const double beta = std::sin (omega) * std::sqrt (A) / Q; - const double aminus1TimesCoso = aminus1 * coso; - - setCoefficients (A * (aplus1 + aminus1TimesCoso + beta), - A * -2.0 * (aminus1 + aplus1 * coso), - A * (aplus1 + aminus1TimesCoso - beta), - aplus1 - aminus1TimesCoso + beta, - 2.0 * (aminus1 - aplus1 * coso), - aplus1 - aminus1TimesCoso - beta); -} - -void IIRFilter::makeBandPass (const double sampleRate, - const double centreFrequency, - const double Q, - const float gainFactor) noexcept -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double omega = (double_Pi * 2.0 * jmax (centreFrequency, 2.0)) / sampleRate; - const double alpha = 0.5 * std::sin (omega) / Q; - const double c2 = -2.0 * std::cos (omega); - const double alphaTimesA = alpha * A; - const double alphaOverA = alpha / A; - - setCoefficients (1.0 + alphaTimesA, - c2, - 1.0 - alphaTimesA, - 1.0 + alphaOverA, - c2, - 1.0 - alphaOverA); -} - -void IIRFilter::makeInactive() noexcept -{ - const ScopedLock sl (processLock); - active = false; -} - -void IIRFilter::copyCoefficientsFrom (const IIRFilter& other) noexcept -{ - const ScopedLock sl (processLock); - - memcpy (coefficients, other.coefficients, sizeof (coefficients)); - active = other.active; -} - -void IIRFilter::setCoefficients (double c1, double c2, double c3, - double c4, double c5, double c6) noexcept -{ - const double a = 1.0 / c4; - - c1 *= a; - c2 *= a; - c3 *= a; - c5 *= a; - c6 *= a; - - const ScopedLock sl (processLock); - - coefficients[0] = (float) c1; - coefficients[1] = (float) c2; - coefficients[2] = (float) c3; - coefficients[3] = (float) c4; - coefficients[4] = (float) c5; - coefficients[5] = (float) c6; - - active = true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_IIRFilter.cpp ***/ - - -/*** Start of inlined file: juce_MidiOutput.cpp ***/ -BEGIN_JUCE_NAMESPACE - -struct MidiOutput::PendingMessage -{ - PendingMessage (const void* const data, const int len, const double timeStamp) - : message (data, len, timeStamp) - {} - - MidiMessage message; - PendingMessage* next; -}; - -MidiOutput::MidiOutput() - : Thread ("midi out"), - internal (nullptr), - firstMessage (nullptr) -{ -} - -void MidiOutput::sendBlockOfMessages (const MidiBuffer& buffer, - const double millisecondCounterToStartAt, - double samplesPerSecondForBuffer) -{ - // You've got to call startBackgroundThread() for this to actually work.. - jassert (isThreadRunning()); - - // this needs to be a value in the future - RTFM for this method! - jassert (millisecondCounterToStartAt > 0); - - const double timeScaleFactor = 1000.0 / samplesPerSecondForBuffer; - - MidiBuffer::Iterator i (buffer); - - const uint8* data; - int len, time; - - while (i.getNextEvent (data, len, time)) - { - const double eventTime = millisecondCounterToStartAt + timeScaleFactor * time; - - PendingMessage* const m = new PendingMessage (data, len, eventTime); - - const ScopedLock sl (lock); - - if (firstMessage == nullptr || firstMessage->message.getTimeStamp() > eventTime) - { - m->next = firstMessage; - firstMessage = m; - } - else - { - PendingMessage* mm = firstMessage; - - while (mm->next != nullptr && mm->next->message.getTimeStamp() <= eventTime) - mm = mm->next; - - m->next = mm->next; - mm->next = m; - } - } - - notify(); -} - -void MidiOutput::clearAllPendingMessages() -{ - const ScopedLock sl (lock); - - while (firstMessage != nullptr) - { - PendingMessage* const m = firstMessage; - firstMessage = firstMessage->next; - delete m; - } -} - -void MidiOutput::startBackgroundThread() -{ - startThread (9); -} - -void MidiOutput::stopBackgroundThread() -{ - stopThread (5000); -} - -void MidiOutput::run() -{ - while (! threadShouldExit()) - { - uint32 now = Time::getMillisecondCounter(); - uint32 eventTime = 0; - uint32 timeToWait = 500; - - PendingMessage* message; - - { - const ScopedLock sl (lock); - message = firstMessage; - - if (message != nullptr) - { - eventTime = roundToInt (message->message.getTimeStamp()); - - if (eventTime > now + 20) - { - timeToWait = eventTime - (now + 20); - message = nullptr; - } - else - { - firstMessage = message->next; - } - } - } - - if (message != nullptr) - { - if (eventTime > now) - { - Time::waitForMillisecondCounter (eventTime); - - if (threadShouldExit()) - break; - } - - if (eventTime > now - 200) - sendMessageNow (message->message); - - delete message; - } - else - { - jassert (timeToWait < 1000 * 30); - wait (timeToWait); - } - } - - clearAllPendingMessages(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiOutput.cpp ***/ - - -/*** Start of inlined file: juce_MidiBuffer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MidiBuffer::MidiBuffer() noexcept - : bytesUsed (0) -{ -} - -MidiBuffer::MidiBuffer (const MidiMessage& message) noexcept - : bytesUsed (0) -{ - addEvent (message, 0); -} - -MidiBuffer::MidiBuffer (const MidiBuffer& other) noexcept - : data (other.data), - bytesUsed (other.bytesUsed) -{ -} - -MidiBuffer& MidiBuffer::operator= (const MidiBuffer& other) noexcept -{ - bytesUsed = other.bytesUsed; - data = other.data; - - return *this; -} - -void MidiBuffer::swapWith (MidiBuffer& other) noexcept -{ - data.swapWith (other.data); - std::swap (bytesUsed, other.bytesUsed); -} - -MidiBuffer::~MidiBuffer() -{ -} - -inline uint8* MidiBuffer::getData() const noexcept -{ - return static_cast (data.getData()); -} - -inline int MidiBuffer::getEventTime (const void* const d) noexcept -{ - return *static_cast (d); -} - -inline uint16 MidiBuffer::getEventDataSize (const void* const d) noexcept -{ - return *reinterpret_cast (static_cast (d) + sizeof (int)); -} - -inline uint16 MidiBuffer::getEventTotalSize (const void* const d) noexcept -{ - return getEventDataSize (d) + sizeof (int) + sizeof (uint16); -} - -void MidiBuffer::clear() noexcept -{ - bytesUsed = 0; -} - -void MidiBuffer::clear (const int startSample, const int numSamples) -{ - uint8* const start = findEventAfter (getData(), startSample - 1); - uint8* const end = findEventAfter (start, startSample + numSamples - 1); - - if (end > start) - { - const int bytesToMove = bytesUsed - (int) (end - getData()); - - if (bytesToMove > 0) - memmove (start, end, bytesToMove); - - bytesUsed -= (int) (end - start); - } -} - -void MidiBuffer::addEvent (const MidiMessage& m, const int sampleNumber) -{ - addEvent (m.getRawData(), m.getRawDataSize(), sampleNumber); -} - -namespace MidiBufferHelpers -{ - int findActualEventLength (const uint8* const data, const int maxBytes) noexcept - { - unsigned int byte = (unsigned int) *data; - int size = 0; - - if (byte == 0xf0 || byte == 0xf7) - { - const uint8* d = data + 1; - - while (d < data + maxBytes) - if (*d++ == 0xf7) - break; - - size = (int) (d - data); - } - else if (byte == 0xff) - { - int n; - const int bytesLeft = MidiMessage::readVariableLengthVal (data + 1, n); - size = jmin (maxBytes, n + 2 + bytesLeft); - } - else if (byte >= 0x80) - { - size = jmin (maxBytes, MidiMessage::getMessageLengthFromFirstByte ((uint8) byte)); - } - - return size; - } -} - -void MidiBuffer::addEvent (const void* const newData, const int maxBytes, const int sampleNumber) -{ - const int numBytes = MidiBufferHelpers::findActualEventLength (static_cast (newData), maxBytes); - - if (numBytes > 0) - { - int spaceNeeded = bytesUsed + numBytes + sizeof (int) + sizeof (uint16); - data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); - - uint8* d = findEventAfter (getData(), sampleNumber); - const int bytesToMove = bytesUsed - (int) (d - getData()); - - if (bytesToMove > 0) - memmove (d + numBytes + sizeof (int) + sizeof (uint16), d, bytesToMove); - - *reinterpret_cast (d) = sampleNumber; - d += sizeof (int); - *reinterpret_cast (d) = (uint16) numBytes; - d += sizeof (uint16); - - memcpy (d, newData, numBytes); - - bytesUsed += numBytes + sizeof (int) + sizeof (uint16); - } -} - -void MidiBuffer::addEvents (const MidiBuffer& otherBuffer, - const int startSample, - const int numSamples, - const int sampleDeltaToAdd) -{ - Iterator i (otherBuffer); - i.setNextSamplePosition (startSample); - - const uint8* eventData; - int eventSize, position; - - while (i.getNextEvent (eventData, eventSize, position) - && (position < startSample + numSamples || numSamples < 0)) - { - addEvent (eventData, eventSize, position + sampleDeltaToAdd); - } -} - -void MidiBuffer::ensureSize (size_t minimumNumBytes) -{ - data.ensureSize (minimumNumBytes); -} - -bool MidiBuffer::isEmpty() const noexcept -{ - return bytesUsed == 0; -} - -int MidiBuffer::getNumEvents() const noexcept -{ - int n = 0; - const uint8* d = getData(); - const uint8* const end = d + bytesUsed; - - while (d < end) - { - d += getEventTotalSize (d); - ++n; - } - - return n; -} - -int MidiBuffer::getFirstEventTime() const noexcept -{ - return bytesUsed > 0 ? getEventTime (data.getData()) : 0; -} - -int MidiBuffer::getLastEventTime() const noexcept -{ - if (bytesUsed == 0) - return 0; - - const uint8* d = getData(); - const uint8* const endData = d + bytesUsed; - - for (;;) - { - const uint8* const nextOne = d + getEventTotalSize (d); - - if (nextOne >= endData) - return getEventTime (d); - - d = nextOne; - } -} - -uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const noexcept -{ - const uint8* const endData = getData() + bytesUsed; - - while (d < endData && getEventTime (d) <= samplePosition) - d += getEventTotalSize (d); - - return d; -} - -MidiBuffer::Iterator::Iterator (const MidiBuffer& buffer_) noexcept - : buffer (buffer_), - data (buffer_.getData()) -{ -} - -MidiBuffer::Iterator::~Iterator() noexcept -{ -} - -void MidiBuffer::Iterator::setNextSamplePosition (const int samplePosition) noexcept -{ - data = buffer.getData(); - const uint8* dataEnd = data + buffer.bytesUsed; - - while (data < dataEnd && getEventTime (data) < samplePosition) - data += getEventTotalSize (data); -} - -bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, int& samplePosition) noexcept -{ - if (data >= buffer.getData() + buffer.bytesUsed) - return false; - - samplePosition = getEventTime (data); - numBytes = getEventDataSize (data); - data += sizeof (int) + sizeof (uint16); - midiData = data; - data += numBytes; - - return true; -} - -bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result, int& samplePosition) noexcept -{ - if (data >= buffer.getData() + buffer.bytesUsed) - return false; - - samplePosition = getEventTime (data); - const int numBytes = getEventDataSize (data); - data += sizeof (int) + sizeof (uint16); - result = MidiMessage (data, numBytes, samplePosition); - data += numBytes; - - return true; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiBuffer.cpp ***/ - - -/*** Start of inlined file: juce_MidiFile.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace MidiFileHelpers -{ - void writeVariableLengthInt (OutputStream& out, unsigned int v) - { - unsigned int buffer = v & 0x7F; - - while ((v >>= 7) != 0) - { - buffer <<= 8; - buffer |= ((v & 0x7F) | 0x80); - } - - for (;;) - { - out.writeByte ((char) buffer); - - if (buffer & 0x80) - buffer >>= 8; - else - break; - } - } - - bool parseMidiHeader (const uint8* &data, short& timeFormat, short& fileType, short& numberOfTracks) noexcept - { - unsigned int ch = (int) ByteOrder::bigEndianInt (data); - data += 4; - - if (ch != ByteOrder::bigEndianInt ("MThd")) - { - bool ok = false; - - if (ch == ByteOrder::bigEndianInt ("RIFF")) - { - for (int i = 0; i < 8; ++i) - { - ch = ByteOrder::bigEndianInt (data); - data += 4; - - if (ch == ByteOrder::bigEndianInt ("MThd")) - { - ok = true; - break; - } - } - } - - if (! ok) - return false; - } - - unsigned int bytesRemaining = ByteOrder::bigEndianInt (data); - data += 4; - fileType = (short) ByteOrder::bigEndianShort (data); - data += 2; - numberOfTracks = (short) ByteOrder::bigEndianShort (data); - data += 2; - timeFormat = (short) ByteOrder::bigEndianShort (data); - data += 2; - bytesRemaining -= 6; - data += bytesRemaining; - - return true; - } - - double convertTicksToSeconds (const double time, - const MidiMessageSequence& tempoEvents, - const int timeFormat) - { - if (timeFormat > 0) - { - int numer = 4, denom = 4; - double tempoTime = 0.0, correctedTempoTime = 0.0; - const double tickLen = 1.0 / (timeFormat & 0x7fff); - double secsPerTick = 0.5 * tickLen; - const int numEvents = tempoEvents.getNumEvents(); - - for (int i = 0; i < numEvents; ++i) - { - const MidiMessage& m = tempoEvents.getEventPointer(i)->message; - - if (time <= m.getTimeStamp()) - break; - - if (timeFormat > 0) - { - correctedTempoTime = correctedTempoTime - + (m.getTimeStamp() - tempoTime) * secsPerTick; - } - else - { - correctedTempoTime = tickLen * m.getTimeStamp() / (((timeFormat & 0x7fff) >> 8) * (timeFormat & 0xff)); - } - - tempoTime = m.getTimeStamp(); - - if (m.isTempoMetaEvent()) - secsPerTick = tickLen * m.getTempoSecondsPerQuarterNote(); - else if (m.isTimeSignatureMetaEvent()) - m.getTimeSignatureInfo (numer, denom); - - while (i + 1 < numEvents) - { - const MidiMessage& m2 = tempoEvents.getEventPointer(i + 1)->message; - if (m2.getTimeStamp() == tempoTime) - { - ++i; - - if (m2.isTempoMetaEvent()) - secsPerTick = tickLen * m2.getTempoSecondsPerQuarterNote(); - else if (m2.isTimeSignatureMetaEvent()) - m2.getTimeSignatureInfo (numer, denom); - } - else - { - break; - } - } - } - - return correctedTempoTime + (time - tempoTime) * secsPerTick; - } - else - { - return time / (((timeFormat & 0x7fff) >> 8) * (timeFormat & 0xff)); - } - } - - // a comparator that puts all the note-offs before note-ons that have the same time - struct Sorter - { - static int compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) noexcept - { - const double diff = (first->message.getTimeStamp() - second->message.getTimeStamp()); - - if (diff > 0) return 1; - if (diff < 0) return -1; - if (first->message.isNoteOff() && second->message.isNoteOn()) return -1; - if (first->message.isNoteOn() && second->message.isNoteOff()) return 1; - - return 0; - } - }; -} - -MidiFile::MidiFile() - : timeFormat ((short) (unsigned short) 0xe728) -{ -} - -MidiFile::~MidiFile() -{ - clear(); -} - -void MidiFile::clear() -{ - tracks.clear(); -} - -int MidiFile::getNumTracks() const noexcept -{ - return tracks.size(); -} - -const MidiMessageSequence* MidiFile::getTrack (const int index) const noexcept -{ - return tracks [index]; -} - -void MidiFile::addTrack (const MidiMessageSequence& trackSequence) -{ - tracks.add (new MidiMessageSequence (trackSequence)); -} - -short MidiFile::getTimeFormat() const noexcept -{ - return timeFormat; -} - -void MidiFile::setTicksPerQuarterNote (const int ticks) noexcept -{ - timeFormat = (short) ticks; -} - -void MidiFile::setSmpteTimeFormat (const int framesPerSecond, - const int subframeResolution) noexcept -{ - timeFormat = (short) (((-framesPerSecond) << 8) | subframeResolution); -} - -void MidiFile::findAllTempoEvents (MidiMessageSequence& tempoChangeEvents) const -{ - for (int i = tracks.size(); --i >= 0;) - { - const int numEvents = tracks.getUnchecked(i)->getNumEvents(); - - for (int j = 0; j < numEvents; ++j) - { - const MidiMessage& m = tracks.getUnchecked(i)->getEventPointer (j)->message; - - if (m.isTempoMetaEvent()) - tempoChangeEvents.addEvent (m); - } - } -} - -void MidiFile::findAllTimeSigEvents (MidiMessageSequence& timeSigEvents) const -{ - for (int i = tracks.size(); --i >= 0;) - { - const int numEvents = tracks.getUnchecked(i)->getNumEvents(); - - for (int j = 0; j < numEvents; ++j) - { - const MidiMessage& m = tracks.getUnchecked(i)->getEventPointer (j)->message; - - if (m.isTimeSignatureMetaEvent()) - timeSigEvents.addEvent (m); - } - } -} - -double MidiFile::getLastTimestamp() const -{ - double t = 0.0; - - for (int i = tracks.size(); --i >= 0;) - t = jmax (t, tracks.getUnchecked(i)->getEndTime()); - - return t; -} - -bool MidiFile::readFrom (InputStream& sourceStream) -{ - clear(); - MemoryBlock data; - - const int maxSensibleMidiFileSize = 2 * 1024 * 1024; - - // (put a sanity-check on the file size, as midi files are generally small) - if (sourceStream.readIntoMemoryBlock (data, maxSensibleMidiFileSize)) - { - size_t size = data.getSize(); - const uint8* d = static_cast (data.getData()); - short fileType, expectedTracks; - - if (size > 16 && MidiFileHelpers::parseMidiHeader (d, timeFormat, fileType, expectedTracks)) - { - size -= (int) (d - static_cast (data.getData())); - - int track = 0; - - while (size > 0 && track < expectedTracks) - { - const int chunkType = (int) ByteOrder::bigEndianInt (d); - d += 4; - const int chunkSize = (int) ByteOrder::bigEndianInt (d); - d += 4; - - if (chunkSize <= 0) - break; - - if (chunkType == (int) ByteOrder::bigEndianInt ("MTrk")) - { - readNextTrack (d, chunkSize); - } - - size -= chunkSize + 8; - d += chunkSize; - ++track; - } - - return true; - } - } - - return false; -} - -void MidiFile::readNextTrack (const uint8* data, int size) -{ - double time = 0; - char lastStatusByte = 0; - - MidiMessageSequence result; - - while (size > 0) - { - int bytesUsed; - const int delay = MidiMessage::readVariableLengthVal (data, bytesUsed); - data += bytesUsed; - size -= bytesUsed; - time += delay; - - int messSize = 0; - const MidiMessage mm (data, size, messSize, lastStatusByte, time); - - if (messSize <= 0) - break; - - size -= messSize; - data += messSize; - - result.addEvent (mm); - - const char firstByte = *(mm.getRawData()); - if ((firstByte & 0xf0) != 0xf0) - lastStatusByte = firstByte; - } - - // use a sort that puts all the note-offs before note-ons that have the same time - MidiFileHelpers::Sorter sorter; - result.list.sort (sorter, true); - - result.updateMatchedPairs(); - - addTrack (result); -} - -void MidiFile::convertTimestampTicksToSeconds() -{ - MidiMessageSequence tempoEvents; - findAllTempoEvents (tempoEvents); - findAllTimeSigEvents (tempoEvents); - - for (int i = 0; i < tracks.size(); ++i) - { - MidiMessageSequence& ms = *tracks.getUnchecked(i); - - for (int j = ms.getNumEvents(); --j >= 0;) - { - MidiMessage& m = ms.getEventPointer(j)->message; - - m.setTimeStamp (MidiFileHelpers::convertTicksToSeconds (m.getTimeStamp(), - tempoEvents, - timeFormat)); - } - } -} - -bool MidiFile::writeTo (OutputStream& out) -{ - out.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MThd")); - out.writeIntBigEndian (6); - out.writeShortBigEndian (1); // type - out.writeShortBigEndian ((short) tracks.size()); - out.writeShortBigEndian (timeFormat); - - for (int i = 0; i < tracks.size(); ++i) - writeTrack (out, i); - - out.flush(); - return true; -} - -void MidiFile::writeTrack (OutputStream& mainOut, const int trackNum) -{ - MemoryOutputStream out; - - const MidiMessageSequence& ms = *tracks[trackNum]; - - int lastTick = 0; - char lastStatusByte = 0; - - for (int i = 0; i < ms.getNumEvents(); ++i) - { - const MidiMessage& mm = ms.getEventPointer(i)->message; - - const int tick = roundToInt (mm.getTimeStamp()); - const int delta = jmax (0, tick - lastTick); - MidiFileHelpers::writeVariableLengthInt (out, delta); - lastTick = tick; - - const char statusByte = *(mm.getRawData()); - - if ((statusByte == lastStatusByte) - && ((statusByte & 0xf0) != 0xf0) - && i > 0 - && mm.getRawDataSize() > 1) - { - out.write (mm.getRawData() + 1, mm.getRawDataSize() - 1); - } - else - { - out.write (mm.getRawData(), mm.getRawDataSize()); - } - - lastStatusByte = statusByte; - } - - out.writeByte (0); - const MidiMessage m (MidiMessage::endOfTrack()); - out.write (m.getRawData(), - m.getRawDataSize()); - - mainOut.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MTrk")); - mainOut.writeIntBigEndian ((int) out.getDataSize()); - mainOut << out; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiFile.cpp ***/ - - -/*** Start of inlined file: juce_MidiKeyboardState.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MidiKeyboardState::MidiKeyboardState() -{ - zerostruct (noteStates); -} - -MidiKeyboardState::~MidiKeyboardState() -{ -} - -void MidiKeyboardState::reset() -{ - const ScopedLock sl (lock); - zerostruct (noteStates); - eventsToAdd.clear(); -} - -bool MidiKeyboardState::isNoteOn (const int midiChannel, const int n) const noexcept -{ - jassert (midiChannel >= 0 && midiChannel <= 16); - - return isPositiveAndBelow (n, (int) 128) - && (noteStates[n] & (1 << (midiChannel - 1))) != 0; -} - -bool MidiKeyboardState::isNoteOnForChannels (const int midiChannelMask, const int n) const noexcept -{ - return isPositiveAndBelow (n, (int) 128) - && (noteStates[n] & midiChannelMask) != 0; -} - -void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, const float velocity) -{ - jassert (midiChannel >= 0 && midiChannel <= 16); - jassert (isPositiveAndBelow (midiNoteNumber, (int) 128)); - - const ScopedLock sl (lock); - - if (isPositiveAndBelow (midiNoteNumber, (int) 128)) - { - const int timeNow = (int) Time::getMillisecondCounter(); - eventsToAdd.addEvent (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity), timeNow); - eventsToAdd.clear (0, timeNow - 500); - - noteOnInternal (midiChannel, midiNoteNumber, velocity); - } -} - -void MidiKeyboardState::noteOnInternal (const int midiChannel, const int midiNoteNumber, const float velocity) -{ - if (isPositiveAndBelow (midiNoteNumber, (int) 128)) - { - noteStates [midiNoteNumber] |= (1 << (midiChannel - 1)); - - for (int i = listeners.size(); --i >= 0;) - listeners.getUnchecked(i)->handleNoteOn (this, midiChannel, midiNoteNumber, velocity); - } -} - -void MidiKeyboardState::noteOff (const int midiChannel, const int midiNoteNumber) -{ - const ScopedLock sl (lock); - - if (isNoteOn (midiChannel, midiNoteNumber)) - { - const int timeNow = (int) Time::getMillisecondCounter(); - eventsToAdd.addEvent (MidiMessage::noteOff (midiChannel, midiNoteNumber), timeNow); - eventsToAdd.clear (0, timeNow - 500); - - noteOffInternal (midiChannel, midiNoteNumber); - } -} - -void MidiKeyboardState::noteOffInternal (const int midiChannel, const int midiNoteNumber) -{ - if (isNoteOn (midiChannel, midiNoteNumber)) - { - noteStates [midiNoteNumber] &= ~(1 << (midiChannel - 1)); - - for (int i = listeners.size(); --i >= 0;) - listeners.getUnchecked(i)->handleNoteOff (this, midiChannel, midiNoteNumber); - } -} - -void MidiKeyboardState::allNotesOff (const int midiChannel) -{ - const ScopedLock sl (lock); - - if (midiChannel <= 0) - { - for (int i = 1; i <= 16; ++i) - allNotesOff (i); - } - else - { - for (int i = 0; i < 128; ++i) - noteOff (midiChannel, i); - } -} - -void MidiKeyboardState::processNextMidiEvent (const MidiMessage& message) -{ - if (message.isNoteOn()) - { - noteOnInternal (message.getChannel(), message.getNoteNumber(), message.getFloatVelocity()); - } - else if (message.isNoteOff()) - { - noteOffInternal (message.getChannel(), message.getNoteNumber()); - } - else if (message.isAllNotesOff()) - { - for (int i = 0; i < 128; ++i) - noteOffInternal (message.getChannel(), i); - } -} - -void MidiKeyboardState::processNextMidiBuffer (MidiBuffer& buffer, - const int startSample, - const int numSamples, - const bool injectIndirectEvents) -{ - MidiBuffer::Iterator i (buffer); - MidiMessage message (0xf4, 0.0); - int time; - - const ScopedLock sl (lock); - - while (i.getNextEvent (message, time)) - processNextMidiEvent (message); - - if (injectIndirectEvents) - { - MidiBuffer::Iterator i2 (eventsToAdd); - const int firstEventToAdd = eventsToAdd.getFirstEventTime(); - const double scaleFactor = numSamples / (double) (eventsToAdd.getLastEventTime() + 1 - firstEventToAdd); - - while (i2.getNextEvent (message, time)) - { - const int pos = jlimit (0, numSamples - 1, roundToInt ((time - firstEventToAdd) * scaleFactor)); - buffer.addEvent (message, startSample + pos); - } - } - - eventsToAdd.clear(); -} - -void MidiKeyboardState::addListener (MidiKeyboardStateListener* const listener) -{ - const ScopedLock sl (lock); - listeners.addIfNotAlreadyThere (listener); -} - -void MidiKeyboardState::removeListener (MidiKeyboardStateListener* const listener) -{ - const ScopedLock sl (lock); - listeners.removeValue (listener); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiKeyboardState.cpp ***/ - - -/*** Start of inlined file: juce_MidiMessage.cpp ***/ -BEGIN_JUCE_NAMESPACE - -namespace MidiHelpers -{ - inline uint8 initialByte (const int type, const int channel) noexcept - { - return (uint8) (type | jlimit (0, 15, channel - 1)); - } - - inline uint8 validVelocity (const int v) noexcept - { - return (uint8) jlimit (0, 127, v); - } -} - -int MidiMessage::readVariableLengthVal (const uint8* data, int& numBytesUsed) noexcept -{ - numBytesUsed = 0; - int v = 0; - int i; - - do - { - i = (int) *data++; - - if (++numBytesUsed > 6) - break; - - v = (v << 7) + (i & 0x7f); - - } while (i & 0x80); - - return v; -} - -int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) noexcept -{ - // this method only works for valid starting bytes of a short midi message - jassert (firstByte >= 0x80 && firstByte != 0xf0 && firstByte != 0xf7); - - static const char messageLengths[] = - { - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - }; - - return messageLengths [firstByte & 0x7f]; -} - -MidiMessage::MidiMessage() noexcept - : timeStamp (0), - data (static_cast (preallocatedData.asBytes)), - size (2) -{ - data[0] = 0xf0; - data[1] = 0xf7; -} - -MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) - : timeStamp (t), - size (dataSize) -{ - jassert (dataSize > 0); - - if (dataSize <= 4) - data = static_cast (preallocatedData.asBytes); - else - data = new uint8 [dataSize]; - - memcpy (data, d, dataSize); - - // check that the length matches the data.. - jassert (size > 3 || data[0] >= 0xf0 || getMessageLengthFromFirstByte (data[0]) == size); -} - -MidiMessage::MidiMessage (const int byte1, const double t) noexcept - : timeStamp (t), - data (static_cast (preallocatedData.asBytes)), - size (1) -{ - data[0] = (uint8) byte1; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 1); -} - -MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) noexcept - : timeStamp (t), - data (static_cast (preallocatedData.asBytes)), - size (2) -{ - data[0] = (uint8) byte1; - data[1] = (uint8) byte2; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 2); -} - -MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) noexcept - : timeStamp (t), - data (static_cast (preallocatedData.asBytes)), - size (3) -{ - data[0] = (uint8) byte1; - data[1] = (uint8) byte2; - data[2] = (uint8) byte3; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 3); -} - -MidiMessage::MidiMessage (const MidiMessage& other) - : timeStamp (other.timeStamp), - size (other.size) -{ - if (other.data != static_cast (other.preallocatedData.asBytes)) - { - data = new uint8 [size]; - memcpy (data, other.data, size); - } - else - { - data = static_cast (preallocatedData.asBytes); - preallocatedData.asInt32 = other.preallocatedData.asInt32; - } -} - -MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) - : timeStamp (newTimeStamp), - size (other.size) -{ - if (other.data != static_cast (other.preallocatedData.asBytes)) - { - data = new uint8 [size]; - memcpy (data, other.data, size); - } - else - { - data = static_cast (preallocatedData.asBytes); - preallocatedData.asInt32 = other.preallocatedData.asInt32; - } -} - -MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) - : timeStamp (t), - data (static_cast (preallocatedData.asBytes)) -{ - const uint8* src = static_cast (src_); - unsigned int byte = (unsigned int) *src; - - if (byte < 0x80) - { - byte = (unsigned int) (uint8) lastStatusByte; - numBytesUsed = -1; - } - else - { - numBytesUsed = 0; - --sz; - ++src; - } - - if (byte >= 0x80) - { - if (byte == 0xf0) - { - const uint8* d = src; - bool haveReadAllLengthBytes = false; - - while (d < src + sz) - { - if (*d >= 0x80) - { - if (*d == 0xf7) - { - ++d; // include the trailing 0xf7 when we hit it - break; - } - - if (haveReadAllLengthBytes) // if we see a 0x80 bit set after the initial data length - break; // bytes, assume it's the end of the sysex - - ++d; - continue; - } - - haveReadAllLengthBytes = true; - ++d; - } - - size = 1 + (int) (d - src); - - data = new uint8 [size]; - *data = (uint8) byte; - memcpy (data + 1, src, size - 1); - } - else if (byte == 0xff) - { - int n; - const int bytesLeft = readVariableLengthVal (src + 1, n); - size = jmin (sz + 1, n + 2 + bytesLeft); - - data = new uint8 [size]; - *data = (uint8) byte; - memcpy (data + 1, src, size - 1); - } - else - { - preallocatedData.asInt32 = 0; - size = getMessageLengthFromFirstByte ((uint8) byte); - data[0] = (uint8) byte; - - if (size > 1) - { - data[1] = src[0]; - - if (size > 2) - data[2] = src[1]; - } - } - - numBytesUsed += size; - } - else - { - preallocatedData.asInt32 = 0; - size = 0; - } -} - -MidiMessage& MidiMessage::operator= (const MidiMessage& other) -{ - if (this != &other) - { - timeStamp = other.timeStamp; - size = other.size; - - if (data != static_cast (preallocatedData.asBytes)) - delete[] data; - - if (other.data != static_cast (other.preallocatedData.asBytes)) - { - data = new uint8 [size]; - memcpy (data, other.data, size); - } - else - { - data = static_cast (preallocatedData.asBytes); - preallocatedData.asInt32 = other.preallocatedData.asInt32; - } - } - - return *this; -} - -MidiMessage::~MidiMessage() -{ - if (data != static_cast (preallocatedData.asBytes)) - delete[] data; -} - -int MidiMessage::getChannel() const noexcept -{ - if ((data[0] & 0xf0) != 0xf0) - return (data[0] & 0xf) + 1; - - return 0; -} - -bool MidiMessage::isForChannel (const int channel) const noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - - return ((data[0] & 0xf) == channel - 1) - && ((data[0] & 0xf0) != 0xf0); -} - -void MidiMessage::setChannel (const int channel) noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - - if ((data[0] & 0xf0) != (uint8) 0xf0) - data[0] = (uint8) ((data[0] & (uint8) 0xf0) - | (uint8)(channel - 1)); -} - -bool MidiMessage::isNoteOn (const bool returnTrueForVelocity0) const noexcept -{ - return ((data[0] & 0xf0) == 0x90) - && (returnTrueForVelocity0 || data[2] != 0); -} - -bool MidiMessage::isNoteOff (const bool returnTrueForNoteOnVelocity0) const noexcept -{ - return ((data[0] & 0xf0) == 0x80) - || (returnTrueForNoteOnVelocity0 && (data[2] == 0) && ((data[0] & 0xf0) == 0x90)); -} - -bool MidiMessage::isNoteOnOrOff() const noexcept -{ - const int d = data[0] & 0xf0; - return (d == 0x90) || (d == 0x80); -} - -int MidiMessage::getNoteNumber() const noexcept -{ - return data[1]; -} - -void MidiMessage::setNoteNumber (const int newNoteNumber) noexcept -{ - if (isNoteOnOrOff()) - data[1] = (char) (newNoteNumber & 127); -} - -uint8 MidiMessage::getVelocity() const noexcept -{ - if (isNoteOnOrOff()) - return data[2]; - - return 0; -} - -float MidiMessage::getFloatVelocity() const noexcept -{ - return getVelocity() * (1.0f / 127.0f); -} - -void MidiMessage::setVelocity (const float newVelocity) noexcept -{ - if (isNoteOnOrOff()) - data[2] = MidiHelpers::validVelocity (roundToInt (newVelocity * 127.0f)); -} - -void MidiMessage::multiplyVelocity (const float scaleFactor) noexcept -{ - if (isNoteOnOrOff()) - data[2] = MidiHelpers::validVelocity (roundToInt (scaleFactor * data[2])); -} - -bool MidiMessage::isAftertouch() const noexcept -{ - return (data[0] & 0xf0) == 0xa0; -} - -int MidiMessage::getAfterTouchValue() const noexcept -{ - jassert (isAftertouch()); - return data[2]; -} - -MidiMessage MidiMessage::aftertouchChange (const int channel, - const int noteNum, - const int aftertouchValue) noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - jassert (isPositiveAndBelow (noteNum, (int) 128)); - jassert (isPositiveAndBelow (aftertouchValue, (int) 128)); - - return MidiMessage (MidiHelpers::initialByte (0xa0, channel), - noteNum & 0x7f, - aftertouchValue & 0x7f); -} - -bool MidiMessage::isChannelPressure() const noexcept -{ - return (data[0] & 0xf0) == 0xd0; -} - -int MidiMessage::getChannelPressureValue() const noexcept -{ - jassert (isChannelPressure()); - return data[1]; -} - -MidiMessage MidiMessage::channelPressureChange (const int channel, const int pressure) noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - jassert (isPositiveAndBelow (pressure, (int) 128)); - - return MidiMessage (MidiHelpers::initialByte (0xd0, channel), pressure & 0x7f); -} - -bool MidiMessage::isSustainPedalOn() const noexcept { return isControllerOfType (0x40) && data[2] >= 64; } -bool MidiMessage::isSustainPedalOff() const noexcept { return isControllerOfType (0x40) && data[2] < 64; } - -bool MidiMessage::isSostenutoPedalOn() const noexcept { return isControllerOfType (0x42) && data[2] >= 64; } -bool MidiMessage::isSostenutoPedalOff() const noexcept { return isControllerOfType (0x42) && data[2] < 64; } - -bool MidiMessage::isSoftPedalOn() const noexcept { return isControllerOfType (0x43) && data[2] >= 64; } -bool MidiMessage::isSoftPedalOff() const noexcept { return isControllerOfType (0x43) && data[2] < 64; } - -bool MidiMessage::isProgramChange() const noexcept -{ - return (data[0] & 0xf0) == 0xc0; -} - -int MidiMessage::getProgramChangeNumber() const noexcept -{ - jassert (isProgramChange()); - return data[1]; -} - -MidiMessage MidiMessage::programChange (const int channel, const int programNumber) noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - - return MidiMessage (MidiHelpers::initialByte (0xc0, channel), programNumber & 0x7f); -} - -bool MidiMessage::isPitchWheel() const noexcept -{ - return (data[0] & 0xf0) == 0xe0; -} - -int MidiMessage::getPitchWheelValue() const noexcept -{ - jassert (isPitchWheel()); - return data[1] | (data[2] << 7); -} - -MidiMessage MidiMessage::pitchWheel (const int channel, const int position) noexcept -{ - jassert (channel > 0 && channel <= 16); // valid channels are numbered 1 to 16 - jassert (isPositiveAndBelow (position, (int) 0x4000)); - - return MidiMessage (MidiHelpers::initialByte (0xe0, channel), - position & 127, (position >> 7) & 127); -} - -bool MidiMessage::isController() const noexcept -{ - return (data[0] & 0xf0) == 0xb0; -} - -bool MidiMessage::isControllerOfType (const int controllerType) const noexcept -{ - return (data[0] & 0xf0) == 0xb0 && data[1] == controllerType; -} - -int MidiMessage::getControllerNumber() const noexcept -{ - jassert (isController()); - return data[1]; -} - -int MidiMessage::getControllerValue() const noexcept -{ - jassert (isController()); - return data[2]; -} - -MidiMessage MidiMessage::controllerEvent (const int channel, const int controllerType, const int value) noexcept -{ - // the channel must be between 1 and 16 inclusive - jassert (channel > 0 && channel <= 16); - - return MidiMessage (MidiHelpers::initialByte (0xb0, channel), - controllerType & 127, value & 127); -} - -MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const float velocity) noexcept -{ - return noteOn (channel, noteNumber, (uint8) (velocity * 127.0f)); -} - -MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const uint8 velocity) noexcept -{ - jassert (channel > 0 && channel <= 16); - jassert (isPositiveAndBelow (noteNumber, (int) 128)); - - return MidiMessage (MidiHelpers::initialByte (0x90, channel), - noteNumber & 127, MidiHelpers::validVelocity (velocity)); -} - -MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, uint8 velocity) noexcept -{ - jassert (channel > 0 && channel <= 16); - jassert (isPositiveAndBelow (noteNumber, (int) 128)); - - return MidiMessage (MidiHelpers::initialByte (0x80, channel), - noteNumber & 127, MidiHelpers::validVelocity (velocity)); -} - -MidiMessage MidiMessage::allNotesOff (const int channel) noexcept -{ - return controllerEvent (channel, 123, 0); -} - -bool MidiMessage::isAllNotesOff() const noexcept -{ - return (data[0] & 0xf0) == 0xb0 && data[1] == 123; -} - -MidiMessage MidiMessage::allSoundOff (const int channel) noexcept -{ - return controllerEvent (channel, 120, 0); -} - -bool MidiMessage::isAllSoundOff() const noexcept -{ - return (data[0] & 0xf0) == 0xb0 && data[1] == 120; -} - -MidiMessage MidiMessage::allControllersOff (const int channel) noexcept -{ - return controllerEvent (channel, 121, 0); -} - -MidiMessage MidiMessage::masterVolume (const float volume) -{ - const int vol = jlimit (0, 0x3fff, roundToInt (volume * 0x4000)); - - const uint8 buf[] = { 0xf0, 0x7f, 0x7f, 0x04, 0x01, - (uint8) (vol & 0x7f), - (uint8) (vol >> 7), - 0xf7 }; - - return MidiMessage (buf, 8); -} - -bool MidiMessage::isSysEx() const noexcept -{ - return *data == 0xf0; -} - -MidiMessage MidiMessage::createSysExMessage (const uint8* sysexData, const int dataSize) -{ - HeapBlock m (dataSize + 2); - - m[0] = 0xf0; - memcpy (m + 1, sysexData, dataSize); - m[dataSize + 1] = 0xf7; - - return MidiMessage (m, dataSize + 2); -} - -const uint8* MidiMessage::getSysExData() const noexcept -{ - return isSysEx() ? getRawData() + 1 : nullptr; -} - -int MidiMessage::getSysExDataSize() const noexcept -{ - return isSysEx() ? size - 2 : 0; -} - -bool MidiMessage::isMetaEvent() const noexcept { return *data == 0xff; } -bool MidiMessage::isActiveSense() const noexcept { return *data == 0xfe; } - -int MidiMessage::getMetaEventType() const noexcept -{ - return *data != 0xff ? -1 : data[1]; -} - -int MidiMessage::getMetaEventLength() const noexcept -{ - if (*data == 0xff) - { - int n; - return jmin (size - 2, readVariableLengthVal (data + 2, n)); - } - - return 0; -} - -const uint8* MidiMessage::getMetaEventData() const noexcept -{ - jassert (isMetaEvent()); - - int n; - const uint8* d = data + 2; - readVariableLengthVal (d, n); - return d + n; -} - -bool MidiMessage::isTrackMetaEvent() const noexcept { return getMetaEventType() == 0; } -bool MidiMessage::isEndOfTrackMetaEvent() const noexcept { return getMetaEventType() == 47; } - -bool MidiMessage::isTextMetaEvent() const noexcept -{ - const int t = getMetaEventType(); - return t > 0 && t < 16; -} - -String MidiMessage::getTextFromTextMetaEvent() const -{ - return String (reinterpret_cast (getMetaEventData()), getMetaEventLength()); -} - -bool MidiMessage::isTrackNameEvent() const noexcept { return (data[1] == 3) && (*data == 0xff); } -bool MidiMessage::isTempoMetaEvent() const noexcept { return (data[1] == 81) && (*data == 0xff); } -bool MidiMessage::isMidiChannelMetaEvent() const noexcept { return (data[1] == 0x20) && (*data == 0xff) && (data[2] == 1); } - -int MidiMessage::getMidiChannelMetaEventChannel() const noexcept -{ - jassert (isMidiChannelMetaEvent()); - return data[3] + 1; -} - -double MidiMessage::getTempoSecondsPerQuarterNote() const noexcept -{ - if (! isTempoMetaEvent()) - return 0.0; - - const uint8* const d = getMetaEventData(); - - return (((unsigned int) d[0] << 16) - | ((unsigned int) d[1] << 8) - | d[2]) - / 1000000.0; -} - -double MidiMessage::getTempoMetaEventTickLength (const short timeFormat) const noexcept -{ - if (timeFormat > 0) - { - if (! isTempoMetaEvent()) - return 0.5 / timeFormat; - - return getTempoSecondsPerQuarterNote() / timeFormat; - } - else - { - const int frameCode = (-timeFormat) >> 8; - double framesPerSecond; - - switch (frameCode) - { - case 24: framesPerSecond = 24.0; break; - case 25: framesPerSecond = 25.0; break; - case 29: framesPerSecond = 29.97; break; - case 30: framesPerSecond = 30.0; break; - default: framesPerSecond = 30.0; break; - } - - return (1.0 / framesPerSecond) / (timeFormat & 0xff); - } -} - -MidiMessage MidiMessage::tempoMetaEvent (int microsecondsPerQuarterNote) noexcept -{ - const uint8 d[] = { 0xff, 81, 3, - (uint8) (microsecondsPerQuarterNote >> 16), - (uint8) (microsecondsPerQuarterNote >> 8), - (uint8) microsecondsPerQuarterNote }; - - return MidiMessage (d, 6, 0.0); -} - -bool MidiMessage::isTimeSignatureMetaEvent() const noexcept -{ - return (data[1] == 0x58) && (*data == (uint8) 0xff); -} - -void MidiMessage::getTimeSignatureInfo (int& numerator, int& denominator) const noexcept -{ - if (isTimeSignatureMetaEvent()) - { - const uint8* const d = getMetaEventData(); - numerator = d[0]; - denominator = 1 << d[1]; - } - else - { - numerator = 4; - denominator = 4; - } -} - -MidiMessage MidiMessage::timeSignatureMetaEvent (const int numerator, const int denominator) -{ - int n = 1; - int powerOfTwo = 0; - - while (n < denominator) - { - n <<= 1; - ++powerOfTwo; - } - - const uint8 d[] = { 0xff, 0x58, 0x04, (uint8) numerator, - (uint8) powerOfTwo, 1, 96 }; - - return MidiMessage (d, 7, 0.0); -} - -MidiMessage MidiMessage::midiChannelMetaEvent (const int channel) noexcept -{ - const uint8 d[] = { 0xff, 0x20, 0x01, (uint8) jlimit (0, 0xff, channel - 1) }; - - return MidiMessage (d, 4, 0.0); -} - -bool MidiMessage::isKeySignatureMetaEvent() const noexcept -{ - return getMetaEventType() == 89; -} - -int MidiMessage::getKeySignatureNumberOfSharpsOrFlats() const noexcept -{ - return (int) *getMetaEventData(); -} - -MidiMessage MidiMessage::endOfTrack() noexcept -{ - return MidiMessage (0xff, 0x2f, 0, 0.0); -} - -bool MidiMessage::isSongPositionPointer() const noexcept { return *data == 0xf2; } -int MidiMessage::getSongPositionPointerMidiBeat() const noexcept { return data[1] | (data[2] << 7); } - -MidiMessage MidiMessage::songPositionPointer (const int positionInMidiBeats) noexcept -{ - return MidiMessage (0xf2, - positionInMidiBeats & 127, - (positionInMidiBeats >> 7) & 127); -} - -bool MidiMessage::isMidiStart() const noexcept { return *data == 0xfa; } -MidiMessage MidiMessage::midiStart() noexcept { return MidiMessage (0xfa); } - -bool MidiMessage::isMidiContinue() const noexcept { return *data == 0xfb; } -MidiMessage MidiMessage::midiContinue() noexcept { return MidiMessage (0xfb); } - -bool MidiMessage::isMidiStop() const noexcept { return *data == 0xfc; } -MidiMessage MidiMessage::midiStop() noexcept { return MidiMessage (0xfc); } - -bool MidiMessage::isMidiClock() const noexcept { return *data == 0xf8; } -MidiMessage MidiMessage::midiClock() noexcept { return MidiMessage (0xf8); } - -bool MidiMessage::isQuarterFrame() const noexcept { return *data == 0xf1; } -int MidiMessage::getQuarterFrameSequenceNumber() const noexcept { return ((int) data[1]) >> 4; } -int MidiMessage::getQuarterFrameValue() const noexcept { return ((int) data[1]) & 0x0f; } - -MidiMessage MidiMessage::quarterFrame (const int sequenceNumber, const int value) noexcept -{ - return MidiMessage (0xf1, (sequenceNumber << 4) | value); -} - -bool MidiMessage::isFullFrame() const noexcept -{ - return data[0] == 0xf0 - && data[1] == 0x7f - && size >= 10 - && data[3] == 0x01 - && data[4] == 0x01; -} - -void MidiMessage::getFullFrameParameters (int& hours, int& minutes, int& seconds, int& frames, - MidiMessage::SmpteTimecodeType& timecodeType) const noexcept -{ - jassert (isFullFrame()); - - timecodeType = (SmpteTimecodeType) (data[5] >> 5); - hours = data[5] & 0x1f; - minutes = data[6]; - seconds = data[7]; - frames = data[8]; -} - -MidiMessage MidiMessage::fullFrame (const int hours, const int minutes, - const int seconds, const int frames, - MidiMessage::SmpteTimecodeType timecodeType) -{ - const uint8 d[] = { 0xf0, 0x7f, 0x7f, 0x01, 0x01, - (uint8) ((hours & 0x01f) | (timecodeType << 5)), - (uint8) minutes, - (uint8) seconds, - (uint8) frames, - 0xf7 }; - - return MidiMessage (d, 10, 0.0); -} - -bool MidiMessage::isMidiMachineControlMessage() const noexcept -{ - return data[0] == 0xf0 - && data[1] == 0x7f - && data[3] == 0x06 - && size > 5; -} - -MidiMessage::MidiMachineControlCommand MidiMessage::getMidiMachineControlCommand() const noexcept -{ - jassert (isMidiMachineControlMessage()); - - return (MidiMachineControlCommand) data[4]; -} - -MidiMessage MidiMessage::midiMachineControlCommand (MidiMessage::MidiMachineControlCommand command) -{ - const uint8 d[] = { 0xf0, 0x7f, 0, 6, (uint8) command, 0xf7 }; - - return MidiMessage (d, 6, 0.0); -} - -bool MidiMessage::isMidiMachineControlGoto (int& hours, int& minutes, int& seconds, int& frames) const noexcept -{ - if (size >= 12 - && data[0] == 0xf0 - && data[1] == 0x7f - && data[3] == 0x06 - && data[4] == 0x44 - && data[5] == 0x06 - && data[6] == 0x01) - { - hours = data[7] % 24; // (that some machines send out hours > 24) - minutes = data[8]; - seconds = data[9]; - frames = data[10]; - - return true; - } - - return false; -} - -MidiMessage MidiMessage::midiMachineControlGoto (int hours, int minutes, int seconds, int frames) -{ - const uint8 d[] = { 0xf0, 0x7f, 0, 6, 0x44, 6, 1, - (uint8) hours, - (uint8) minutes, - (uint8) seconds, - (uint8) frames, - 0xf7 }; - - return MidiMessage (d, 12, 0.0); -} - -String MidiMessage::getMidiNoteName (int note, bool useSharps, bool includeOctaveNumber, int octaveNumForMiddleC) -{ - static const char* const sharpNoteNames[] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; - static const char* const flatNoteNames[] = { "C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B" }; - - if (isPositiveAndBelow (note, (int) 128)) - { - String s (useSharps ? sharpNoteNames [note % 12] - : flatNoteNames [note % 12]); - - if (includeOctaveNumber) - s << (note / 12 + (octaveNumForMiddleC - 5)); - - return s; - } - - return String::empty; -} - -const double MidiMessage::getMidiNoteInHertz (int noteNumber, const double frequencyOfA) noexcept -{ - noteNumber -= 12 * 6 + 9; // now 0 = A - return frequencyOfA * pow (2.0, noteNumber / 12.0); -} - -String MidiMessage::getGMInstrumentName (const int n) -{ - const char* names[] = - { - "Acoustic Grand Piano", "Bright Acoustic Piano", "Electric Grand Piano", "Honky-tonk Piano", - "Electric Piano 1", "Electric Piano 2", "Harpsichord", "Clavinet", "Celesta", "Glockenspiel", - "Music Box", "Vibraphone", "Marimba", "Xylophone", "Tubular Bells", "Dulcimer", "Drawbar Organ", - "Percussive Organ", "Rock Organ", "Church Organ", "Reed Organ", "Accordion", "Harmonica", - "Tango Accordion", "Acoustic Guitar (nylon)", "Acoustic Guitar (steel)", "Electric Guitar (jazz)", - "Electric Guitar (clean)", "Electric Guitar (mute)", "Overdriven Guitar", "Distortion Guitar", - "Guitar Harmonics", "Acoustic Bass", "Electric Bass (finger)", "Electric Bass (pick)", - "Fretless Bass", "Slap Bass 1", "Slap Bass 2", "Synth Bass 1", "Synth Bass 2", "Violin", - "Viola", "Cello", "Contrabass", "Tremolo Strings", "Pizzicato Strings", "Orchestral Harp", - "Timpani", "String Ensemble 1", "String Ensemble 2", "SynthStrings 1", "SynthStrings 2", - "Choir Aahs", "Voice Oohs", "Synth Voice", "Orchestra Hit", "Trumpet", "Trombone", "Tuba", - "Muted Trumpet", "French Horn", "Brass Section", "SynthBrass 1", "SynthBrass 2", "Soprano Sax", - "Alto Sax", "Tenor Sax", "Baritone Sax", "Oboe", "English Horn", "Bassoon", "Clarinet", - "Piccolo", "Flute", "Recorder", "Pan Flute", "Blown Bottle", "Shakuhachi", "Whistle", - "Ocarina", "Lead 1 (square)", "Lead 2 (sawtooth)", "Lead 3 (calliope)", "Lead 4 (chiff)", - "Lead 5 (charang)", "Lead 6 (voice)", "Lead 7 (fifths)", "Lead 8 (bass+lead)", "Pad 1 (new age)", - "Pad 2 (warm)", "Pad 3 (polysynth)", "Pad 4 (choir)", "Pad 5 (bowed)", "Pad 6 (metallic)", - "Pad 7 (halo)", "Pad 8 (sweep)", "FX 1 (rain)", "FX 2 (soundtrack)", "FX 3 (crystal)", - "FX 4 (atmosphere)", "FX 5 (brightness)", "FX 6 (goblins)", "FX 7 (echoes)", "FX 8 (sci-fi)", - "Sitar", "Banjo", "Shamisen", "Koto", "Kalimba", "Bag pipe", "Fiddle", "Shanai", "Tinkle Bell", - "Agogo", "Steel Drums", "Woodblock", "Taiko Drum", "Melodic Tom", "Synth Drum", "Reverse Cymbal", - "Guitar Fret Noise", "Breath Noise", "Seashore", "Bird Tweet", "Telephone Ring", "Helicopter", - "Applause", "Gunshot" - }; - - return isPositiveAndBelow (n, (int) 128) ? names[n] : (const char*) 0; -} - -String MidiMessage::getGMInstrumentBankName (const int n) -{ - const char* names[] = - { - "Piano", "Chromatic Percussion", "Organ", "Guitar", - "Bass", "Strings", "Ensemble", "Brass", - "Reed", "Pipe", "Synth Lead", "Synth Pad", - "Synth Effects", "Ethnic", "Percussive", "Sound Effects" - }; - - return isPositiveAndBelow (n, (int) 16) ? names[n] : (const char*) 0; -} - -String MidiMessage::getRhythmInstrumentName (const int n) -{ - const char* names[] = - { - "Acoustic Bass Drum", "Bass Drum 1", "Side Stick", "Acoustic Snare", - "Hand Clap", "Electric Snare", "Low Floor Tom", "Closed Hi-Hat", "High Floor Tom", - "Pedal Hi-Hat", "Low Tom", "Open Hi-Hat", "Low-Mid Tom", "Hi-Mid Tom", "Crash Cymbal 1", - "High Tom", "Ride Cymbal 1", "Chinese Cymbal", "Ride Bell", "Tambourine", "Splash Cymbal", - "Cowbell", "Crash Cymbal 2", "Vibraslap", "Ride Cymbal 2", "Hi Bongo", "Low Bongo", - "Mute Hi Conga", "Open Hi Conga", "Low Conga", "High Timbale", "Low Timbale", "High Agogo", - "Low Agogo", "Cabasa", "Maracas", "Short Whistle", "Long Whistle", "Short Guiro", - "Long Guiro", "Claves", "Hi Wood Block", "Low Wood Block", "Mute Cuica", "Open Cuica", - "Mute Triangle", "Open Triangle" - }; - - return (n >= 35 && n <= 81) ? names [n - 35] : (const char*) nullptr; -} - -String MidiMessage::getControllerName (const int n) -{ - const char* names[] = - { - "Bank Select", "Modulation Wheel (coarse)", "Breath controller (coarse)", - 0, "Foot Pedal (coarse)", "Portamento Time (coarse)", - "Data Entry (coarse)", "Volume (coarse)", "Balance (coarse)", - 0, "Pan position (coarse)", "Expression (coarse)", "Effect Control 1 (coarse)", - "Effect Control 2 (coarse)", 0, 0, "General Purpose Slider 1", "General Purpose Slider 2", - "General Purpose Slider 3", "General Purpose Slider 4", 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, "Bank Select (fine)", "Modulation Wheel (fine)", "Breath controller (fine)", - 0, "Foot Pedal (fine)", "Portamento Time (fine)", "Data Entry (fine)", "Volume (fine)", - "Balance (fine)", 0, "Pan position (fine)", "Expression (fine)", "Effect Control 1 (fine)", - "Effect Control 2 (fine)", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - "Hold Pedal (on/off)", "Portamento (on/off)", "Sustenuto Pedal (on/off)", "Soft Pedal (on/off)", - "Legato Pedal (on/off)", "Hold 2 Pedal (on/off)", "Sound Variation", "Sound Timbre", - "Sound Release Time", "Sound Attack Time", "Sound Brightness", "Sound Control 6", - "Sound Control 7", "Sound Control 8", "Sound Control 9", "Sound Control 10", - "General Purpose Button 1 (on/off)", "General Purpose Button 2 (on/off)", - "General Purpose Button 3 (on/off)", "General Purpose Button 4 (on/off)", - 0, 0, 0, 0, 0, 0, 0, "Reverb Level", "Tremolo Level", "Chorus Level", "Celeste Level", - "Phaser Level", "Data Button increment", "Data Button decrement", "Non-registered Parameter (fine)", - "Non-registered Parameter (coarse)", "Registered Parameter (fine)", "Registered Parameter (coarse)", - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "All Sound Off", "All Controllers Off", - "Local Keyboard (on/off)", "All Notes Off", "Omni Mode Off", "Omni Mode On", "Mono Operation", - "Poly Operation" - }; - - return isPositiveAndBelow (n, (int) 128) ? names[n] : (const char*) nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiMessage.cpp ***/ - - -/*** Start of inlined file: juce_MidiMessageCollector.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MidiMessageCollector::MidiMessageCollector() - : lastCallbackTime (0), - sampleRate (44100.0001) -{ -} - -MidiMessageCollector::~MidiMessageCollector() -{ -} - -void MidiMessageCollector::reset (const double sampleRate_) -{ - jassert (sampleRate_ > 0); - - const ScopedLock sl (midiCallbackLock); - sampleRate = sampleRate_; - incomingMessages.clear(); - lastCallbackTime = Time::getMillisecondCounterHiRes(); -} - -void MidiMessageCollector::addMessageToQueue (const MidiMessage& message) -{ - // you need to call reset() to set the correct sample rate before using this object - jassert (sampleRate != 44100.0001); - - // the messages that come in here need to be time-stamped correctly - see MidiInput - // for details of what the number should be. - jassert (message.getTimeStamp() != 0); - - const ScopedLock sl (midiCallbackLock); - - const int sampleNumber - = (int) ((message.getTimeStamp() - 0.001 * lastCallbackTime) * sampleRate); - - incomingMessages.addEvent (message, sampleNumber); - - // if the messages don't get used for over a second, we'd better - // get rid of any old ones to avoid the queue getting too big - if (sampleNumber > sampleRate) - incomingMessages.clear (0, sampleNumber - (int) sampleRate); -} - -void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer, - const int numSamples) -{ - // you need to call reset() to set the correct sample rate before using this object - jassert (sampleRate != 44100.0001); - - const double timeNow = Time::getMillisecondCounterHiRes(); - const double msElapsed = timeNow - lastCallbackTime; - - const ScopedLock sl (midiCallbackLock); - lastCallbackTime = timeNow; - - if (! incomingMessages.isEmpty()) - { - int numSourceSamples = jmax (1, roundToInt (msElapsed * 0.001 * sampleRate)); - - int startSample = 0; - int scale = 1 << 16; - - const uint8* midiData; - int numBytes, samplePosition; - - MidiBuffer::Iterator iter (incomingMessages); - - if (numSourceSamples > numSamples) - { - // if our list of events is longer than the buffer we're being - // asked for, scale them down to squeeze them all in.. - const int maxBlockLengthToUse = numSamples << 5; - - if (numSourceSamples > maxBlockLengthToUse) - { - startSample = numSourceSamples - maxBlockLengthToUse; - numSourceSamples = maxBlockLengthToUse; - iter.setNextSamplePosition (startSample); - } - - scale = (numSamples << 10) / numSourceSamples; - - while (iter.getNextEvent (midiData, numBytes, samplePosition)) - { - samplePosition = ((samplePosition - startSample) * scale) >> 10; - - destBuffer.addEvent (midiData, numBytes, - jlimit (0, numSamples - 1, samplePosition)); - } - } - else - { - // if our event list is shorter than the number we need, put them - // towards the end of the buffer - startSample = numSamples - numSourceSamples; - - while (iter.getNextEvent (midiData, numBytes, samplePosition)) - { - destBuffer.addEvent (midiData, numBytes, - jlimit (0, numSamples - 1, samplePosition + startSample)); - } - } - - incomingMessages.clear(); - } -} - -void MidiMessageCollector::handleNoteOn (MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity) -{ - MidiMessage m (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity)); - m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001); - - addMessageToQueue (m); -} - -void MidiMessageCollector::handleNoteOff (MidiKeyboardState*, int midiChannel, int midiNoteNumber) -{ - MidiMessage m (MidiMessage::noteOff (midiChannel, midiNoteNumber)); - m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001); - - addMessageToQueue (m); -} - -void MidiMessageCollector::handleIncomingMidiMessage (MidiInput*, const MidiMessage& message) -{ - addMessageToQueue (message); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiMessageCollector.cpp ***/ - - -/*** Start of inlined file: juce_MidiMessageSequence.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MidiMessageSequence::MidiMessageSequence() -{ -} - -MidiMessageSequence::MidiMessageSequence (const MidiMessageSequence& other) -{ - list.ensureStorageAllocated (other.list.size()); - - for (int i = 0; i < other.list.size(); ++i) - list.add (new MidiEventHolder (other.list.getUnchecked(i)->message)); -} - -MidiMessageSequence& MidiMessageSequence::operator= (const MidiMessageSequence& other) -{ - MidiMessageSequence otherCopy (other); - swapWith (otherCopy); - return *this; -} - -void MidiMessageSequence::swapWith (MidiMessageSequence& other) noexcept -{ - list.swapWithArray (other.list); -} - -MidiMessageSequence::~MidiMessageSequence() -{ -} - -void MidiMessageSequence::clear() -{ - list.clear(); -} - -int MidiMessageSequence::getNumEvents() const -{ - return list.size(); -} - -MidiMessageSequence::MidiEventHolder* MidiMessageSequence::getEventPointer (const int index) const -{ - return list [index]; -} - -double MidiMessageSequence::getTimeOfMatchingKeyUp (const int index) const -{ - const MidiEventHolder* const meh = list [index]; - - if (meh != nullptr && meh->noteOffObject != nullptr) - return meh->noteOffObject->message.getTimeStamp(); - else - return 0.0; -} - -int MidiMessageSequence::getIndexOfMatchingKeyUp (const int index) const -{ - const MidiEventHolder* const meh = list [index]; - - return meh != nullptr ? list.indexOf (meh->noteOffObject) : -1; -} - -int MidiMessageSequence::getIndexOf (MidiEventHolder* const event) const -{ - return list.indexOf (event); -} - -int MidiMessageSequence::getNextIndexAtTime (const double timeStamp) const -{ - const int numEvents = list.size(); - - int i; - for (i = 0; i < numEvents; ++i) - if (list.getUnchecked(i)->message.getTimeStamp() >= timeStamp) - break; - - return i; -} - -double MidiMessageSequence::getStartTime() const -{ - if (list.size() > 0) - return list.getUnchecked(0)->message.getTimeStamp(); - else - return 0; -} - -double MidiMessageSequence::getEndTime() const -{ - if (list.size() > 0) - return list.getLast()->message.getTimeStamp(); - else - return 0; -} - -double MidiMessageSequence::getEventTime (const int index) const -{ - if (isPositiveAndBelow (index, list.size())) - return list.getUnchecked (index)->message.getTimeStamp(); - - return 0.0; -} - -void MidiMessageSequence::addEvent (const MidiMessage& newMessage, - double timeAdjustment) -{ - MidiEventHolder* const newOne = new MidiEventHolder (newMessage); - - timeAdjustment += newMessage.getTimeStamp(); - newOne->message.setTimeStamp (timeAdjustment); - - int i; - for (i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.getTimeStamp() <= timeAdjustment) - break; - - list.insert (i + 1, newOne); -} - -void MidiMessageSequence::deleteEvent (const int index, - const bool deleteMatchingNoteUp) -{ - if (isPositiveAndBelow (index, list.size())) - { - if (deleteMatchingNoteUp) - deleteEvent (getIndexOfMatchingKeyUp (index), false); - - list.remove (index); - } -} - -void MidiMessageSequence::addSequence (const MidiMessageSequence& other, - double timeAdjustment, - double firstAllowableTime, - double endOfAllowableDestTimes) -{ - firstAllowableTime -= timeAdjustment; - endOfAllowableDestTimes -= timeAdjustment; - - for (int i = 0; i < other.list.size(); ++i) - { - const MidiMessage& m = other.list.getUnchecked(i)->message; - const double t = m.getTimeStamp(); - - if (t >= firstAllowableTime && t < endOfAllowableDestTimes) - { - MidiEventHolder* const newOne = new MidiEventHolder (m); - newOne->message.setTimeStamp (timeAdjustment + t); - - list.add (newOne); - } - } - - sort(); -} - -int MidiMessageSequence::compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) noexcept -{ - const double diff = first->message.getTimeStamp() - - second->message.getTimeStamp(); - - return (diff > 0) - (diff < 0); -} - -void MidiMessageSequence::sort() -{ - list.sort (*this, true); -} - -void MidiMessageSequence::updateMatchedPairs() -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& m1 = list.getUnchecked(i)->message; - - if (m1.isNoteOn()) - { - list.getUnchecked(i)->noteOffObject = nullptr; - const int note = m1.getNoteNumber(); - const int chan = m1.getChannel(); - const int len = list.size(); - - for (int j = i + 1; j < len; ++j) - { - const MidiMessage& m = list.getUnchecked(j)->message; - - if (m.getNoteNumber() == note && m.getChannel() == chan) - { - if (m.isNoteOff()) - { - list.getUnchecked(i)->noteOffObject = list[j]; - break; - } - else if (m.isNoteOn()) - { - list.insert (j, new MidiEventHolder (MidiMessage::noteOff (chan, note))); - list.getUnchecked(j)->message.setTimeStamp (m.getTimeStamp()); - list.getUnchecked(i)->noteOffObject = list[j]; - break; - } - } - } - } - } -} - -void MidiMessageSequence::addTimeToMessages (const double delta) -{ - for (int i = list.size(); --i >= 0;) - list.getUnchecked (i)->message.setTimeStamp (list.getUnchecked (i)->message.getTimeStamp() - + delta); -} - -void MidiMessageSequence::extractMidiChannelMessages (const int channelNumberToExtract, - MidiMessageSequence& destSequence, - const bool alsoIncludeMetaEvents) const -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isForChannel (channelNumberToExtract) - || (alsoIncludeMetaEvents && mm.isMetaEvent())) - { - destSequence.addEvent (mm); - } - } -} - -void MidiMessageSequence::extractSysExMessages (MidiMessageSequence& destSequence) const -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isSysEx()) - destSequence.addEvent (mm); - } -} - -void MidiMessageSequence::deleteMidiChannelMessages (const int channelNumberToRemove) -{ - for (int i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.isForChannel (channelNumberToRemove)) - list.remove(i); -} - -void MidiMessageSequence::deleteSysExMessages() -{ - for (int i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.isSysEx()) - list.remove(i); -} - -void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumber, - const double time, - OwnedArray& dest) -{ - bool doneProg = false; - bool donePitchWheel = false; - Array doneControllers; - doneControllers.ensureStorageAllocated (32); - - for (int i = list.size(); --i >= 0;) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isForChannel (channelNumber) - && mm.getTimeStamp() <= time) - { - if (mm.isProgramChange()) - { - if (! doneProg) - { - dest.add (new MidiMessage (mm, 0.0)); - doneProg = true; - } - } - else if (mm.isController()) - { - if (! doneControllers.contains (mm.getControllerNumber())) - { - dest.add (new MidiMessage (mm, 0.0)); - doneControllers.add (mm.getControllerNumber()); - } - } - else if (mm.isPitchWheel()) - { - if (! donePitchWheel) - { - dest.add (new MidiMessage (mm, 0.0)); - donePitchWheel = true; - } - } - } - } -} - -MidiMessageSequence::MidiEventHolder::MidiEventHolder (const MidiMessage& message_) - : message (message_), - noteOffObject (nullptr) -{ -} - -MidiMessageSequence::MidiEventHolder::~MidiEventHolder() -{ -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MidiMessageSequence.cpp ***/ - - -/*** Start of inlined file: juce_AudioPluginFormat.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioPluginFormat::AudioPluginFormat() noexcept -{ -} - -AudioPluginFormat::~AudioPluginFormat() -{ -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioPluginFormat.cpp ***/ - - -/*** Start of inlined file: juce_AudioPluginFormatManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioPluginFormatManager::AudioPluginFormatManager() -{ -} - -AudioPluginFormatManager::~AudioPluginFormatManager() -{ - clearSingletonInstance(); -} - -juce_ImplementSingleton_SingleThreaded (AudioPluginFormatManager); - -void AudioPluginFormatManager::addDefaultFormats() -{ - #if JUCE_DEBUG - // you should only call this method once! - for (int i = formats.size(); --i >= 0;) - { - #if JUCE_PLUGINHOST_VST && ! (JUCE_MAC && JUCE_64BIT) - jassert (dynamic_cast (formats[i]) == nullptr); - #endif - - #if JUCE_PLUGINHOST_AU && JUCE_MAC - jassert (dynamic_cast (formats[i]) == nullptr); - #endif - - #if JUCE_PLUGINHOST_DX && JUCE_WINDOWS - jassert (dynamic_cast (formats[i]) == nullptr); - #endif - - #if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX - jassert (dynamic_cast (formats[i]) == nullptr); - #endif - } - #endif - - #if JUCE_PLUGINHOST_AU && JUCE_MAC - formats.add (new AudioUnitPluginFormat()); - #endif - - #if JUCE_PLUGINHOST_VST && ! (JUCE_MAC && JUCE_64BIT) - formats.add (new VSTPluginFormat()); - #endif - - #if JUCE_PLUGINHOST_DX && JUCE_WINDOWS - formats.add (new DirectXPluginFormat()); - #endif - - #if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX - formats.add (new LADSPAPluginFormat()); - #endif -} - -int AudioPluginFormatManager::getNumFormats() -{ - return formats.size(); -} - -AudioPluginFormat* AudioPluginFormatManager::getFormat (const int index) -{ - return formats [index]; -} - -void AudioPluginFormatManager::addFormat (AudioPluginFormat* const format) -{ - formats.add (format); -} - -AudioPluginInstance* AudioPluginFormatManager::createPluginInstance (const PluginDescription& description, - String& errorMessage) const -{ - AudioPluginInstance* result = nullptr; - - for (int i = 0; i < formats.size(); ++i) - { - result = formats.getUnchecked(i)->createInstanceFromDescription (description); - - if (result != nullptr) - break; - } - - if (result == nullptr) - { - if (! doesPluginStillExist (description)) - errorMessage = TRANS ("This plug-in file no longer exists"); - else - errorMessage = TRANS ("This plug-in failed to load correctly"); - } - - return result; -} - -bool AudioPluginFormatManager::doesPluginStillExist (const PluginDescription& description) const -{ - for (int i = 0; i < formats.size(); ++i) - if (formats.getUnchecked(i)->getName() == description.pluginFormatName) - return formats.getUnchecked(i)->doesPluginStillExist (description); - - return false; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioPluginFormatManager.cpp ***/ - - -/*** Start of inlined file: juce_KnownPluginList.cpp ***/ -BEGIN_JUCE_NAMESPACE - -KnownPluginList::KnownPluginList() -{ -} - -KnownPluginList::~KnownPluginList() -{ -} - -void KnownPluginList::clear() -{ - if (types.size() > 0) - { - types.clear(); - sendChangeMessage(); - } -} - -PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifier) const -{ - for (int i = 0; i < types.size(); ++i) - if (types.getUnchecked(i)->fileOrIdentifier == fileOrIdentifier) - return types.getUnchecked(i); - - return nullptr; -} - -PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& identifierString) const -{ - for (int i = 0; i < types.size(); ++i) - if (types.getUnchecked(i)->createIdentifierString() == identifierString) - return types.getUnchecked(i); - - return nullptr; -} - -bool KnownPluginList::addType (const PluginDescription& type) -{ - for (int i = types.size(); --i >= 0;) - { - if (types.getUnchecked(i)->isDuplicateOf (type)) - { - // strange - found a duplicate plugin with different info.. - jassert (types.getUnchecked(i)->name == type.name); - jassert (types.getUnchecked(i)->isInstrument == type.isInstrument); - - *types.getUnchecked(i) = type; - return false; - } - } - - types.add (new PluginDescription (type)); - sendChangeMessage(); - return true; -} - -void KnownPluginList::removeType (const int index) -{ - types.remove (index); - sendChangeMessage(); -} - -namespace -{ - Time getPluginFileModTime (const String& fileOrIdentifier) - { - if (fileOrIdentifier.startsWithChar ('/') || fileOrIdentifier[1] == ':') - return File (fileOrIdentifier).getLastModificationTime(); - - return Time(); - } - - bool timesAreDifferent (const Time& t1, const Time& t2) noexcept - { - return t1 != t2 || t1 == Time(); - } -} - -bool KnownPluginList::isListingUpToDate (const String& fileOrIdentifier) const -{ - if (getTypeForFile (fileOrIdentifier) == 0) - return false; - - for (int i = types.size(); --i >= 0;) - { - const PluginDescription* const d = types.getUnchecked(i); - - if (d->fileOrIdentifier == fileOrIdentifier - && timesAreDifferent (d->lastFileModTime, getPluginFileModTime (fileOrIdentifier))) - { - return false; - } - } - - return true; -} - -bool KnownPluginList::scanAndAddFile (const String& fileOrIdentifier, - const bool dontRescanIfAlreadyInList, - OwnedArray & typesFound, - AudioPluginFormat& format) -{ - bool addedOne = false; - - if (dontRescanIfAlreadyInList - && getTypeForFile (fileOrIdentifier) != nullptr) - { - bool needsRescanning = false; - - for (int i = types.size(); --i >= 0;) - { - const PluginDescription* const d = types.getUnchecked(i); - - if (d->fileOrIdentifier == fileOrIdentifier) - { - if (timesAreDifferent (d->lastFileModTime, getPluginFileModTime (fileOrIdentifier))) - needsRescanning = true; - else - typesFound.add (new PluginDescription (*d)); - } - } - - if (! needsRescanning) - return false; - } - - OwnedArray found; - format.findAllTypesForFile (found, fileOrIdentifier); - - for (int i = 0; i < found.size(); ++i) - { - PluginDescription* const desc = found.getUnchecked(i); - jassert (desc != nullptr); - - if (addType (*desc)) - addedOne = true; - - typesFound.add (new PluginDescription (*desc)); - } - - return addedOne; -} - -void KnownPluginList::scanAndAddDragAndDroppedFiles (const StringArray& files, - OwnedArray & typesFound) -{ - for (int i = 0; i < files.size(); ++i) - { - for (int j = 0; j < AudioPluginFormatManager::getInstance()->getNumFormats(); ++j) - { - AudioPluginFormat* const format = AudioPluginFormatManager::getInstance()->getFormat (j); - - if (scanAndAddFile (files[i], true, typesFound, *format)) - return; - } - - const File f (files[i]); - - if (f.isDirectory()) - { - StringArray s; - - { - Array subFiles; - f.findChildFiles (subFiles, File::findFilesAndDirectories, false); - - for (int j = 0; j < subFiles.size(); ++j) - s.add (subFiles.getReference(j).getFullPathName()); - } - - scanAndAddDragAndDroppedFiles (s, typesFound); - } - } -} - -class PluginSorter -{ -public: - KnownPluginList::SortMethod method; - - PluginSorter() noexcept {} - - int compareElements (const PluginDescription* const first, - const PluginDescription* const second) const - { - int diff = 0; - - if (method == KnownPluginList::sortByCategory) - diff = first->category.compareLexicographically (second->category); - else if (method == KnownPluginList::sortByManufacturer) - diff = first->manufacturerName.compareLexicographically (second->manufacturerName); - else if (method == KnownPluginList::sortByFileSystemLocation) - diff = first->fileOrIdentifier.replaceCharacter ('\\', '/') - .upToLastOccurrenceOf ("/", false, false) - .compare (second->fileOrIdentifier.replaceCharacter ('\\', '/') - .upToLastOccurrenceOf ("/", false, false)); - - if (diff == 0) - diff = first->name.compareLexicographically (second->name); - - return diff; - } -}; - -void KnownPluginList::sort (const SortMethod method) -{ - if (method != defaultOrder) - { - PluginSorter sorter; - sorter.method = method; - types.sort (sorter, true); - - sendChangeMessage(); - } -} - -XmlElement* KnownPluginList::createXml() const -{ - XmlElement* const e = new XmlElement ("KNOWNPLUGINS"); - - for (int i = 0; i < types.size(); ++i) - e->addChildElement (types.getUnchecked(i)->createXml()); - - return e; -} - -void KnownPluginList::recreateFromXml (const XmlElement& xml) -{ - clear(); - - if (xml.hasTagName ("KNOWNPLUGINS")) - { - forEachXmlChildElement (xml, e) - { - PluginDescription info; - - if (info.loadFromXml (*e)) - addType (info); - } - } -} - -const int menuIdBase = 0x324503f4; - -// This is used to turn a bunch of paths into a nested menu structure. -struct PluginFilesystemTree -{ -private: - String folder; - OwnedArray subFolders; - Array plugins; - - void addPlugin (PluginDescription* const pd, const String& path) - { - if (path.isEmpty()) - { - plugins.add (pd); - } - else - { - const String firstSubFolder (path.upToFirstOccurrenceOf ("/", false, false)); - const String remainingPath (path.fromFirstOccurrenceOf ("/", false, false)); - - for (int i = subFolders.size(); --i >= 0;) - { - if (subFolders.getUnchecked(i)->folder.equalsIgnoreCase (firstSubFolder)) - { - subFolders.getUnchecked(i)->addPlugin (pd, remainingPath); - return; - } - } - - PluginFilesystemTree* const newFolder = new PluginFilesystemTree(); - newFolder->folder = firstSubFolder; - subFolders.add (newFolder); - - newFolder->addPlugin (pd, remainingPath); - } - } - - // removes any deeply nested folders that don't contain any actual plugins - void optimise() - { - for (int i = subFolders.size(); --i >= 0;) - { - PluginFilesystemTree* const sub = subFolders.getUnchecked(i); - - sub->optimise(); - - if (sub->plugins.size() == 0) - { - for (int j = 0; j < sub->subFolders.size(); ++j) - subFolders.add (sub->subFolders.getUnchecked(j)); - - sub->subFolders.clear (false); - subFolders.remove (i); - } - } - } - -public: - void buildTree (const Array & allPlugins) - { - for (int i = 0; i < allPlugins.size(); ++i) - { - String path (allPlugins.getUnchecked(i) - ->fileOrIdentifier.replaceCharacter ('\\', '/') - .upToLastOccurrenceOf ("/", false, false)); - - if (path.substring (1, 2) == ":") - path = path.substring (2); - - addPlugin (allPlugins.getUnchecked(i), path); - } - - optimise(); - } - - void addToMenu (PopupMenu& m, const OwnedArray & allPlugins) const - { - int i; - for (i = 0; i < subFolders.size(); ++i) - { - const PluginFilesystemTree* const sub = subFolders.getUnchecked(i); - - PopupMenu subMenu; - sub->addToMenu (subMenu, allPlugins); - -#if JUCE_MAC - // avoid the special AU formatting nonsense on Mac.. - m.addSubMenu (sub->folder.fromFirstOccurrenceOf (":", false, false), subMenu); -#else - m.addSubMenu (sub->folder, subMenu); -#endif - } - - for (i = 0; i < plugins.size(); ++i) - { - PluginDescription* const plugin = plugins.getUnchecked(i); - - m.addItem (allPlugins.indexOf (plugin) + menuIdBase, - plugin->name, true, false); - } - } -}; - -void KnownPluginList::addToMenu (PopupMenu& menu, const SortMethod sortMethod) const -{ - Array sorted; - - { - PluginSorter sorter; - sorter.method = sortMethod; - - for (int i = 0; i < types.size(); ++i) - sorted.addSorted (sorter, types.getUnchecked(i)); - } - - if (sortMethod == sortByCategory - || sortMethod == sortByManufacturer) - { - String lastSubMenuName; - PopupMenu sub; - - for (int i = 0; i < sorted.size(); ++i) - { - const PluginDescription* const pd = sorted.getUnchecked(i); - String thisSubMenuName (sortMethod == sortByCategory ? pd->category - : pd->manufacturerName); - - if (! thisSubMenuName.containsNonWhitespaceChars()) - thisSubMenuName = "Other"; - - if (thisSubMenuName != lastSubMenuName) - { - if (sub.getNumItems() > 0) - { - menu.addSubMenu (lastSubMenuName, sub); - sub.clear(); - } - - lastSubMenuName = thisSubMenuName; - } - - sub.addItem (types.indexOf (pd) + menuIdBase, pd->name, true, false); - } - - if (sub.getNumItems() > 0) - menu.addSubMenu (lastSubMenuName, sub); - } - else if (sortMethod == sortByFileSystemLocation) - { - PluginFilesystemTree root; - root.buildTree (sorted); - root.addToMenu (menu, types); - } - else - { - for (int i = 0; i < sorted.size(); ++i) - { - const PluginDescription* const pd = sorted.getUnchecked(i); - menu.addItem (types.indexOf (pd) + menuIdBase, pd->name, true, false); - } - } -} - -int KnownPluginList::getIndexChosenByMenu (const int menuResultCode) const -{ - const int i = menuResultCode - menuIdBase; - - return isPositiveAndBelow (i, types.size()) ? i : -1; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_KnownPluginList.cpp ***/ - - -/*** Start of inlined file: juce_PluginDescription.cpp ***/ -BEGIN_JUCE_NAMESPACE - -PluginDescription::PluginDescription() - : uid (0), - isInstrument (false), - numInputChannels (0), - numOutputChannels (0) -{ -} - -PluginDescription::~PluginDescription() -{ -} - -PluginDescription::PluginDescription (const PluginDescription& other) - : name (other.name), - descriptiveName (other.descriptiveName), - pluginFormatName (other.pluginFormatName), - category (other.category), - manufacturerName (other.manufacturerName), - version (other.version), - fileOrIdentifier (other.fileOrIdentifier), - lastFileModTime (other.lastFileModTime), - uid (other.uid), - isInstrument (other.isInstrument), - numInputChannels (other.numInputChannels), - numOutputChannels (other.numOutputChannels) -{ -} - -PluginDescription& PluginDescription::operator= (const PluginDescription& other) -{ - name = other.name; - descriptiveName = other.descriptiveName; - pluginFormatName = other.pluginFormatName; - category = other.category; - manufacturerName = other.manufacturerName; - version = other.version; - fileOrIdentifier = other.fileOrIdentifier; - uid = other.uid; - isInstrument = other.isInstrument; - lastFileModTime = other.lastFileModTime; - numInputChannels = other.numInputChannels; - numOutputChannels = other.numOutputChannels; - - return *this; -} - -bool PluginDescription::isDuplicateOf (const PluginDescription& other) const -{ - return fileOrIdentifier == other.fileOrIdentifier - && uid == other.uid; -} - -String PluginDescription::createIdentifierString() const -{ - return pluginFormatName - + "-" + name - + "-" + String::toHexString (fileOrIdentifier.hashCode()) - + "-" + String::toHexString (uid); -} - -XmlElement* PluginDescription::createXml() const -{ - XmlElement* const e = new XmlElement ("PLUGIN"); - e->setAttribute ("name", name); - if (descriptiveName != name) - e->setAttribute ("descriptiveName", descriptiveName); - - e->setAttribute ("format", pluginFormatName); - e->setAttribute ("category", category); - e->setAttribute ("manufacturer", manufacturerName); - e->setAttribute ("version", version); - e->setAttribute ("file", fileOrIdentifier); - e->setAttribute ("uid", String::toHexString (uid)); - e->setAttribute ("isInstrument", isInstrument); - e->setAttribute ("fileTime", String::toHexString (lastFileModTime.toMilliseconds())); - e->setAttribute ("numInputs", numInputChannels); - e->setAttribute ("numOutputs", numOutputChannels); - - return e; -} - -bool PluginDescription::loadFromXml (const XmlElement& xml) -{ - if (xml.hasTagName ("PLUGIN")) - { - name = xml.getStringAttribute ("name"); - descriptiveName = xml.getStringAttribute ("descriptiveName", name); - pluginFormatName = xml.getStringAttribute ("format"); - category = xml.getStringAttribute ("category"); - manufacturerName = xml.getStringAttribute ("manufacturer"); - version = xml.getStringAttribute ("version"); - fileOrIdentifier = xml.getStringAttribute ("file"); - uid = xml.getStringAttribute ("uid").getHexValue32(); - isInstrument = xml.getBoolAttribute ("isInstrument", false); - lastFileModTime = Time (xml.getStringAttribute ("fileTime").getHexValue64()); - numInputChannels = xml.getIntAttribute ("numInputs"); - numOutputChannels = xml.getIntAttribute ("numOutputs"); - - return true; - } - - return false; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PluginDescription.cpp ***/ - - -/*** Start of inlined file: juce_PluginDirectoryScanner.cpp ***/ -BEGIN_JUCE_NAMESPACE - -PluginDirectoryScanner::PluginDirectoryScanner (KnownPluginList& listToAddTo, - AudioPluginFormat& formatToLookFor, - FileSearchPath directoriesToSearch, - const bool recursive, - const File& deadMansPedalFile_) - : list (listToAddTo), - format (formatToLookFor), - deadMansPedalFile (deadMansPedalFile_), - nextIndex (0), - progress (0) -{ - directoriesToSearch.removeRedundantPaths(); - - filesOrIdentifiersToScan = format.searchPathsForPlugins (directoriesToSearch, recursive); - - // If any plugins have crashed recently when being loaded, move them to the - // end of the list to give the others a chance to load correctly.. - const StringArray crashedPlugins (getDeadMansPedalFile()); - - for (int i = 0; i < crashedPlugins.size(); ++i) - { - const String f = crashedPlugins[i]; - - for (int j = filesOrIdentifiersToScan.size(); --j >= 0;) - if (f == filesOrIdentifiersToScan[j]) - filesOrIdentifiersToScan.move (j, -1); - } -} - -PluginDirectoryScanner::~PluginDirectoryScanner() -{ -} - -const String PluginDirectoryScanner::getNextPluginFileThatWillBeScanned() const -{ - return format.getNameOfPluginFromIdentifier (filesOrIdentifiersToScan [nextIndex]); -} - -bool PluginDirectoryScanner::scanNextFile (const bool dontRescanIfAlreadyInList) -{ - String file (filesOrIdentifiersToScan [nextIndex]); - - if (file.isNotEmpty() && ! list.isListingUpToDate (file)) - { - OwnedArray typesFound; - - // Add this plugin to the end of the dead-man's pedal list in case it crashes... - StringArray crashedPlugins (getDeadMansPedalFile()); - crashedPlugins.removeString (file); - crashedPlugins.add (file); - setDeadMansPedalFile (crashedPlugins); - - list.scanAndAddFile (file, - dontRescanIfAlreadyInList, - typesFound, - format); - - // Managed to load without crashing, so remove it from the dead-man's-pedal.. - crashedPlugins.removeString (file); - setDeadMansPedalFile (crashedPlugins); - - if (typesFound.size() == 0) - failedFiles.add (file); - } - - return skipNextFile(); -} - -bool PluginDirectoryScanner::skipNextFile() -{ - if (nextIndex >= filesOrIdentifiersToScan.size()) - return false; - - progress = ++nextIndex / (float) filesOrIdentifiersToScan.size(); - return nextIndex < filesOrIdentifiersToScan.size(); -} - -StringArray PluginDirectoryScanner::getDeadMansPedalFile() -{ - StringArray lines; - - if (deadMansPedalFile != File::nonexistent) - { - deadMansPedalFile.readLines (lines); - lines.removeEmptyStrings(); - } - - return lines; -} - -void PluginDirectoryScanner::setDeadMansPedalFile (const StringArray& newContents) -{ - if (deadMansPedalFile != File::nonexistent) - deadMansPedalFile.replaceWithText (newContents.joinIntoString ("\n"), true, true); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PluginDirectoryScanner.cpp ***/ - - -/*** Start of inlined file: juce_PluginListComponent.cpp ***/ -BEGIN_JUCE_NAMESPACE - -PluginListComponent::PluginListComponent (KnownPluginList& listToEdit, - const File& deadMansPedalFile_, - PropertiesFile* const propertiesToUse_) - : list (listToEdit), - deadMansPedalFile (deadMansPedalFile_), - optionsButton ("Options..."), - propertiesToUse (propertiesToUse_) -{ - listBox.setModel (this); - addAndMakeVisible (&listBox); - - addAndMakeVisible (&optionsButton); - optionsButton.addListener (this); - optionsButton.setTriggeredOnMouseDown (true); - - setSize (400, 600); - list.addChangeListener (this); - updateList(); -} - -PluginListComponent::~PluginListComponent() -{ - list.removeChangeListener (this); -} - -void PluginListComponent::resized() -{ - listBox.setBounds (0, 0, getWidth(), getHeight() - 30); - optionsButton.changeWidthToFitText (24); - optionsButton.setTopLeftPosition (8, getHeight() - 28); -} - -void PluginListComponent::changeListenerCallback (ChangeBroadcaster*) -{ - updateList(); -} - -void PluginListComponent::updateList() -{ - listBox.updateContent(); - listBox.repaint(); -} - -int PluginListComponent::getNumRows() -{ - return list.getNumTypes(); -} - -void PluginListComponent::paintListBoxItem (int row, - Graphics& g, - int width, int height, - bool rowIsSelected) -{ - if (rowIsSelected) - g.fillAll (findColour (TextEditor::highlightColourId)); - - const PluginDescription* const pd = list.getType (row); - - if (pd != nullptr) - { - GlyphArrangement ga; - ga.addCurtailedLineOfText (Font (height * 0.7f, Font::bold), pd->name, 8.0f, height * 0.8f, width - 10.0f, true); - - g.setColour (Colours::black); - ga.draw (g); - - const Rectangle bb (ga.getBoundingBox (0, -1, false)); - - String desc; - desc << pd->pluginFormatName - << (pd->isInstrument ? " instrument" : " effect") - << " - " - << pd->numInputChannels << (pd->numInputChannels == 1 ? " in" : " ins") - << " / " - << pd->numOutputChannels << (pd->numOutputChannels == 1 ? " out" : " outs"); - - if (pd->manufacturerName.isNotEmpty()) - desc << " - " << pd->manufacturerName; - - if (pd->version.isNotEmpty()) - desc << " - " << pd->version; - - if (pd->category.isNotEmpty()) - desc << " - category: '" << pd->category << '\''; - - g.setColour (Colours::grey); - - ga.clear(); - ga.addCurtailedLineOfText (Font (height * 0.6f), desc, bb.getRight() + 10.0f, height * 0.8f, width - bb.getRight() - 12.0f, true); - ga.draw (g); - } -} - -void PluginListComponent::deleteKeyPressed (int lastRowSelected) -{ - list.removeType (lastRowSelected); -} - -void PluginListComponent::optionsMenuCallback (int result) -{ - switch (result) - { - case 1: - list.clear(); - break; - - case 2: - list.sort (KnownPluginList::sortAlphabetically); - break; - - case 3: - list.sort (KnownPluginList::sortByCategory); - break; - - case 4: - list.sort (KnownPluginList::sortByManufacturer); - break; - - case 5: - { - const SparseSet selected (listBox.getSelectedRows()); - - for (int i = list.getNumTypes(); --i >= 0;) - if (selected.contains (i)) - list.removeType (i); - - break; - } - - case 6: - { - const PluginDescription* const desc = list.getType (listBox.getSelectedRow()); - - if (desc != nullptr) - { - if (File (desc->fileOrIdentifier).existsAsFile()) - File (desc->fileOrIdentifier).getParentDirectory().startAsProcess(); - } - - break; - } - - case 7: - for (int i = list.getNumTypes(); --i >= 0;) - if (! AudioPluginFormatManager::getInstance()->doesPluginStillExist (*list.getType (i))) - list.removeType (i); - - break; - - default: - if (result != 0) - { - typeToScan = result - 10; - startTimer (1); - } - - break; - } -} - -void PluginListComponent::optionsMenuStaticCallback (int result, PluginListComponent* pluginList) -{ - if (pluginList != nullptr) - pluginList->optionsMenuCallback (result); -} - -void PluginListComponent::buttonClicked (Button* button) -{ - if (button == &optionsButton) - { - PopupMenu menu; - menu.addItem (1, TRANS("Clear list")); - menu.addItem (5, TRANS("Remove selected plugin from list"), listBox.getNumSelectedRows() > 0); - menu.addItem (6, TRANS("Show folder containing selected plugin"), listBox.getNumSelectedRows() > 0); - menu.addItem (7, TRANS("Remove any plugins whose files no longer exist")); - menu.addSeparator(); - menu.addItem (2, TRANS("Sort alphabetically")); - menu.addItem (3, TRANS("Sort by category")); - menu.addItem (4, TRANS("Sort by manufacturer")); - menu.addSeparator(); - - for (int i = 0; i < AudioPluginFormatManager::getInstance()->getNumFormats(); ++i) - { - AudioPluginFormat* const format = AudioPluginFormatManager::getInstance()->getFormat (i); - - if (format->getDefaultLocationsToSearch().getNumPaths() > 0) - menu.addItem (10 + i, "Scan for new or updated " + format->getName() + " plugins..."); - } - - menu.showMenuAsync (PopupMenu::Options().withTargetComponent (&optionsButton), - ModalCallbackFunction::forComponent (optionsMenuStaticCallback, this)); - } -} - -void PluginListComponent::timerCallback() -{ - stopTimer(); - scanFor (AudioPluginFormatManager::getInstance()->getFormat (typeToScan)); -} - -bool PluginListComponent::isInterestedInFileDrag (const StringArray& /*files*/) -{ - return true; -} - -void PluginListComponent::filesDropped (const StringArray& files, int, int) -{ - OwnedArray typesFound; - list.scanAndAddDragAndDroppedFiles (files, typesFound); -} - -void PluginListComponent::scanFor (AudioPluginFormat* format) -{ -#if JUCE_MODAL_LOOPS_PERMITTED - if (format == nullptr) - return; - - FileSearchPath path (format->getDefaultLocationsToSearch()); - - if (propertiesToUse != nullptr) - path = propertiesToUse->getValue ("lastPluginScanPath_" + format->getName(), path.toString()); - - { - AlertWindow aw (TRANS("Select folders to scan..."), String::empty, AlertWindow::NoIcon); - FileSearchPathListComponent pathList; - pathList.setSize (500, 300); - pathList.setPath (path); - - aw.addCustomComponent (&pathList); - aw.addButton (TRANS("Scan"), 1, KeyPress::returnKey); - aw.addButton (TRANS("Cancel"), 0, KeyPress::escapeKey); - - if (aw.runModalLoop() == 0) - return; - - path = pathList.getPath(); - } - - if (propertiesToUse != nullptr) - { - propertiesToUse->setValue ("lastPluginScanPath_" + format->getName(), path.toString()); - propertiesToUse->saveIfNeeded(); - } - - double progress = 0.0; - - AlertWindow aw (TRANS("Scanning for plugins..."), - TRANS("Searching for all possible plugin files..."), AlertWindow::NoIcon); - - aw.addButton (TRANS("Cancel"), 0, KeyPress::escapeKey); - aw.addProgressBarComponent (progress); - - aw.enterModalState(); - - MessageManager::getInstance()->runDispatchLoopUntil (300); - - PluginDirectoryScanner scanner (list, *format, path, true, deadMansPedalFile); - - for (;;) - { - aw.setMessage (TRANS("Testing:\n\n") - + scanner.getNextPluginFileThatWillBeScanned()); - - MessageManager::getInstance()->runDispatchLoopUntil (20); - - if (! scanner.scanNextFile (true)) - break; - - if (! aw.isCurrentlyModal()) - break; - - progress = scanner.getProgress(); - } - - if (scanner.getFailedFiles().size() > 0) - { - StringArray shortNames; - - for (int i = 0; i < scanner.getFailedFiles().size(); ++i) - shortNames.add (File (scanner.getFailedFiles()[i]).getFileName()); - - AlertWindow::showMessageBox (AlertWindow::InfoIcon, - TRANS("Scan complete"), - TRANS("Note that the following files appeared to be plugin files, but failed to load correctly:\n\n") - + shortNames.joinIntoString (", ")); - } -#else - jassertfalse; // this method needs refactoring to work without modal loops.. -#endif -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_PluginListComponent.cpp ***/ - - -/*** Start of inlined file: juce_AudioUnitPluginFormat.mm ***/ -#if JUCE_PLUGINHOST_AU && ! (JUCE_LINUX || JUCE_WINDOWS) - -#include -#include -#include - -#if JUCE_SUPPORT_CARBON -#include -#include -#endif - -BEGIN_JUCE_NAMESPACE - -#if JUCE_MAC && JUCE_SUPPORT_CARBON - -#endif - -#if JUCE_MAC - -// Change this to disable logging of various activities -#ifndef AU_LOGGING - #define AU_LOGGING 1 -#endif - -#if AU_LOGGING - #define log(a) Logger::writeToLog(a); -#else - #define log(a) -#endif - -namespace AudioUnitFormatHelpers -{ - static int insideCallback = 0; - - const String osTypeToString (OSType type) - { - const juce_wchar s[4] = { (juce_wchar) ((type >> 24) & 0xff), - (juce_wchar) ((type >> 16) & 0xff), - (juce_wchar) ((type >> 8) & 0xff), - (juce_wchar) (type & 0xff) }; - return String (s, 4); - } - - OSType stringToOSType (const String& s1) - { - const String s (s1 + " "); - - return (((OSType) (unsigned char) s[0]) << 24) - | (((OSType) (unsigned char) s[1]) << 16) - | (((OSType) (unsigned char) s[2]) << 8) - | ((OSType) (unsigned char) s[3]); - } - - static const char* auIdentifierPrefix = "AudioUnit:"; - - const String createAUPluginIdentifier (const ComponentDescription& desc) - { - jassert (osTypeToString ('abcd') == "abcd"); // agh, must have got the endianness wrong.. - jassert (stringToOSType ("abcd") == (OSType) 'abcd'); // ditto - - String s (auIdentifierPrefix); - - if (desc.componentType == kAudioUnitType_MusicDevice) - s << "Synths/"; - else if (desc.componentType == kAudioUnitType_MusicEffect - || desc.componentType == kAudioUnitType_Effect) - s << "Effects/"; - else if (desc.componentType == kAudioUnitType_Generator) - s << "Generators/"; - else if (desc.componentType == kAudioUnitType_Panner) - s << "Panners/"; - - s << osTypeToString (desc.componentType) << "," - << osTypeToString (desc.componentSubType) << "," - << osTypeToString (desc.componentManufacturer); - - return s; - } - - void getAUDetails (ComponentRecord* comp, String& name, String& manufacturer) - { - Handle componentNameHandle = NewHandle (sizeof (void*)); - Handle componentInfoHandle = NewHandle (sizeof (void*)); - - if (componentNameHandle != 0 && componentInfoHandle != 0) - { - ComponentDescription desc; - - if (GetComponentInfo (comp, &desc, componentNameHandle, componentInfoHandle, 0) == noErr) - { - ConstStr255Param nameString = (ConstStr255Param) (*componentNameHandle); - ConstStr255Param infoString = (ConstStr255Param) (*componentInfoHandle); - - if (nameString != 0 && nameString[0] != 0) - { - const String all ((const char*) nameString + 1, nameString[0]); - DBG ("name: "+ all); - - manufacturer = all.upToFirstOccurrenceOf (":", false, false).trim(); - name = all.fromFirstOccurrenceOf (":", false, false).trim(); - } - - if (infoString != 0 && infoString[0] != 0) - { - DBG ("info: " + String ((const char*) infoString + 1, infoString[0])); - } - - if (name.isEmpty()) - name = ""; - } - - DisposeHandle (componentNameHandle); - DisposeHandle (componentInfoHandle); - } - } - - bool getComponentDescFromIdentifier (const String& fileOrIdentifier, ComponentDescription& desc, - String& name, String& version, String& manufacturer) - { - zerostruct (desc); - - if (fileOrIdentifier.startsWithIgnoreCase (auIdentifierPrefix)) - { - String s (fileOrIdentifier.substring (jmax (fileOrIdentifier.lastIndexOfChar (':'), - fileOrIdentifier.lastIndexOfChar ('/')) + 1)); - - StringArray tokens; - tokens.addTokens (s, ",", String::empty); - tokens.trim(); - tokens.removeEmptyStrings(); - - if (tokens.size() == 3) - { - desc.componentType = stringToOSType (tokens[0]); - desc.componentSubType = stringToOSType (tokens[1]); - desc.componentManufacturer = stringToOSType (tokens[2]); - - ComponentRecord* comp = FindNextComponent (0, &desc); - - if (comp != 0) - { - getAUDetails (comp, name, manufacturer); - return true; - } - } - } - - return false; - } -} - -class AudioUnitPluginWindowCarbon; -class AudioUnitPluginWindowCocoa; - -class AudioUnitPluginInstance : public AudioPluginInstance -{ -public: - - ~AudioUnitPluginInstance(); - - void initialise(); - - // AudioPluginInstance methods: - - void fillInPluginDescription (PluginDescription& desc) const - { - desc.name = pluginName; - desc.descriptiveName = pluginName; - desc.fileOrIdentifier = AudioUnitFormatHelpers::createAUPluginIdentifier (componentDesc); - desc.uid = ((int) componentDesc.componentType) - ^ ((int) componentDesc.componentSubType) - ^ ((int) componentDesc.componentManufacturer); - desc.lastFileModTime = Time(); - desc.pluginFormatName = "AudioUnit"; - desc.category = getCategory(); - desc.manufacturerName = manufacturer; - desc.version = version; - desc.numInputChannels = getNumInputChannels(); - desc.numOutputChannels = getNumOutputChannels(); - desc.isInstrument = (componentDesc.componentType == kAudioUnitType_MusicDevice); - } - - void* getPlatformSpecificData() { return audioUnit; } - const String getName() const { return pluginName; } - bool acceptsMidi() const { return wantsMidiMessages; } - bool producesMidi() const { return false; } - - // AudioProcessor methods: - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages); - - bool hasEditor() const; - AudioProcessorEditor* createEditor(); - - const String getInputChannelName (int index) const; - bool isInputChannelStereoPair (int index) const; - - const String getOutputChannelName (int index) const; - bool isOutputChannelStereoPair (int index) const; - - int getNumParameters(); - float getParameter (int index); - void setParameter (int index, float newValue); - const String getParameterName (int index); - const String getParameterText (int index); - bool isParameterAutomatable (int index) const; - - int getNumPrograms(); - int getCurrentProgram(); - void setCurrentProgram (int index); - const String getProgramName (int index); - void changeProgramName (int index, const String& newName); - - void getStateInformation (MemoryBlock& destData); - void getCurrentProgramStateInformation (MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - - void refreshParameterListFromPlugin(); - -private: - - friend class AudioUnitPluginWindowCarbon; - friend class AudioUnitPluginWindowCocoa; - friend class AudioUnitPluginFormat; - - ComponentDescription componentDesc; - String pluginName, manufacturer, version; - String fileOrIdentifier; - CriticalSection lock; - bool wantsMidiMessages, wasPlaying, prepared; - - HeapBlock outputBufferList; - AudioTimeStamp timeStamp; - AudioSampleBuffer* currentBuffer; - - AudioUnit audioUnit; - Array parameterIds; - - bool getComponentDescFromFile (const String& fileOrIdentifier); - void setPluginCallbacks(); - - OSStatus renderGetInput (AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) const; - - static OSStatus renderGetInputCallback (void* inRefCon, - AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) - { - return ((AudioUnitPluginInstance*) inRefCon) - ->renderGetInput (ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); - } - - OSStatus getBeatAndTempo (Float64* outCurrentBeat, Float64* outCurrentTempo) const; - OSStatus getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, Float32* outTimeSig_Numerator, - UInt32* outTimeSig_Denominator, Float64* outCurrentMeasureDownBeat) const; - OSStatus getTransportState (Boolean* outIsPlaying, Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling, - Float64* outCycleStartBeat, Float64* outCycleEndBeat); - - static OSStatus getBeatAndTempoCallback (void* inHostUserData, Float64* outCurrentBeat, Float64* outCurrentTempo) - { - return ((AudioUnitPluginInstance*) inHostUserData)->getBeatAndTempo (outCurrentBeat, outCurrentTempo); - } - - static OSStatus getMusicalTimeLocationCallback (void* inHostUserData, UInt32* outDeltaSampleOffsetToNextBeat, - Float32* outTimeSig_Numerator, UInt32* outTimeSig_Denominator, - Float64* outCurrentMeasureDownBeat) - { - return ((AudioUnitPluginInstance*) inHostUserData) - ->getMusicalTimeLocation (outDeltaSampleOffsetToNextBeat, outTimeSig_Numerator, - outTimeSig_Denominator, outCurrentMeasureDownBeat); - } - - static OSStatus getTransportStateCallback (void* inHostUserData, Boolean* outIsPlaying, Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling, - Float64* outCycleStartBeat, Float64* outCycleEndBeat) - { - return ((AudioUnitPluginInstance*) inHostUserData) - ->getTransportState (outIsPlaying, outTransportStateChanged, - outCurrentSampleInTimeLine, outIsCycling, - outCycleStartBeat, outCycleEndBeat); - } - - void getNumChannels (int& numIns, int& numOuts) - { - numIns = 0; - numOuts = 0; - - AUChannelInfo supportedChannels [128]; - UInt32 supportedChannelsSize = sizeof (supportedChannels); - - if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, - 0, supportedChannels, &supportedChannelsSize) == noErr - && supportedChannelsSize > 0) - { - int explicitNumIns = 0; - int explicitNumOuts = 0; - int maximumNumIns = 0; - int maximumNumOuts = 0; - - for (int i = 0; i < supportedChannelsSize / sizeof (AUChannelInfo); ++i) - { - const int inChannels = (int) supportedChannels[i].inChannels; - const int outChannels = (int) supportedChannels[i].outChannels; - - if (inChannels < 0) - maximumNumIns = jmin (maximumNumIns, inChannels); - else - explicitNumIns = jmax (explicitNumIns, inChannels); - - if (outChannels < 0) - maximumNumOuts = jmin (maximumNumOuts, outChannels); - else - explicitNumOuts = jmax (explicitNumOuts, outChannels); - } - - if ((maximumNumIns == -1 && maximumNumOuts == -1) // (special meaning: any number of ins/outs, as long as they match) - || (maximumNumIns == -2 && maximumNumOuts == -1) // (special meaning: any number of ins/outs, even if they don't match) - || (maximumNumIns == -1 && maximumNumOuts == -2)) - { - numIns = numOuts = 2; - } - else - { - numIns = explicitNumIns; - numOuts = explicitNumOuts; - - if (maximumNumIns == -1 || (maximumNumIns < 0 && explicitNumIns <= -maximumNumIns)) - numIns = 2; - - if (maximumNumOuts == -1 || (maximumNumOuts < 0 && explicitNumOuts <= -maximumNumOuts)) - numOuts = 2; - } - } - else - { - // (this really means the plugin will take any number of ins/outs as long - // as they are the same) - numIns = numOuts = 2; - } - } - - const String getCategory() const; - - AudioUnitPluginInstance (const String& fileOrIdentifier); - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioUnitPluginInstance); -}; - -AudioUnitPluginInstance::AudioUnitPluginInstance (const String& fileOrIdentifier) - : fileOrIdentifier (fileOrIdentifier), - wantsMidiMessages (false), wasPlaying (false), prepared (false), - currentBuffer (nullptr), - audioUnit (0) -{ - using namespace AudioUnitFormatHelpers; - - try - { - ++insideCallback; - - log ("Opening AU: " + fileOrIdentifier); - - if (getComponentDescFromFile (fileOrIdentifier)) - { - ComponentRecord* const comp = FindNextComponent (0, &componentDesc); - - if (comp != 0) - { - audioUnit = (AudioUnit) OpenComponent (comp); - - wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice - || componentDesc.componentType == kAudioUnitType_MusicEffect; - } - } - - --insideCallback; - } - catch (...) - { - --insideCallback; - } -} - -AudioUnitPluginInstance::~AudioUnitPluginInstance() -{ - const ScopedLock sl (lock); - - jassert (AudioUnitFormatHelpers::insideCallback == 0); - - if (audioUnit != 0) - { - AudioUnitUninitialize (audioUnit); - CloseComponent (audioUnit); - audioUnit = 0; - } -} - -bool AudioUnitPluginInstance::getComponentDescFromFile (const String& fileOrIdentifier) -{ - zerostruct (componentDesc); - - if (AudioUnitFormatHelpers::getComponentDescFromIdentifier (fileOrIdentifier, componentDesc, pluginName, version, manufacturer)) - return true; - - const File file (fileOrIdentifier); - if (! file.hasFileExtension (".component")) - return false; - - const char* const utf8 = fileOrIdentifier.toUTF8(); - CFURLRef url = CFURLCreateFromFileSystemRepresentation (0, (const UInt8*) utf8, - strlen (utf8), file.isDirectory()); - if (url != 0) - { - CFBundleRef bundleRef = CFBundleCreate (kCFAllocatorDefault, url); - CFRelease (url); - - if (bundleRef != 0) - { - CFTypeRef name = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleName")); - - if (name != 0 && CFGetTypeID (name) == CFStringGetTypeID()) - pluginName = String::fromCFString ((CFStringRef) name); - - if (pluginName.isEmpty()) - pluginName = file.getFileNameWithoutExtension(); - - CFTypeRef versionString = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleVersion")); - - if (versionString != 0 && CFGetTypeID (versionString) == CFStringGetTypeID()) - version = String::fromCFString ((CFStringRef) versionString); - - CFTypeRef manuString = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleGetInfoString")); - - if (manuString != 0 && CFGetTypeID (manuString) == CFStringGetTypeID()) - manufacturer = String::fromCFString ((CFStringRef) manuString); - - short resFileId = CFBundleOpenBundleResourceMap (bundleRef); - UseResFile (resFileId); - - for (int i = 1; i <= Count1Resources ('thng'); ++i) - { - Handle h = Get1IndResource ('thng', i); - - if (h != 0) - { - HLock (h); - const uint32* const types = (const uint32*) *h; - - if (types[0] == kAudioUnitType_MusicDevice - || types[0] == kAudioUnitType_MusicEffect - || types[0] == kAudioUnitType_Effect - || types[0] == kAudioUnitType_Generator - || types[0] == kAudioUnitType_Panner) - { - componentDesc.componentType = types[0]; - componentDesc.componentSubType = types[1]; - componentDesc.componentManufacturer = types[2]; - break; - } - - HUnlock (h); - ReleaseResource (h); - } - } - - CFBundleCloseBundleResourceMap (bundleRef, resFileId); - CFRelease (bundleRef); - } - } - - return componentDesc.componentType != 0 && componentDesc.componentSubType != 0; -} - -void AudioUnitPluginInstance::initialise() -{ - refreshParameterListFromPlugin(); - setPluginCallbacks(); - - int numIns, numOuts; - getNumChannels (numIns, numOuts); - setPlayConfigDetails (numIns, numOuts, 0, 0); - setLatencySamples (0); -} - -void AudioUnitPluginInstance::refreshParameterListFromPlugin() -{ - parameterIds.clear(); - - if (audioUnit != 0) - { - UInt32 paramListSize = 0; - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, - 0, 0, ¶mListSize); - - if (paramListSize > 0) - { - parameterIds.insertMultiple (0, 0, paramListSize / sizeof (int)); - - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, - 0, parameterIds.getRawDataPointer(), ¶mListSize); - } - } -} - -void AudioUnitPluginInstance::setPluginCallbacks() -{ - if (audioUnit != 0) - { - { - AURenderCallbackStruct info = { 0 }; - info.inputProcRefCon = this; - info.inputProc = renderGetInputCallback; - - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, - 0, &info, sizeof (info)); - } - - { - HostCallbackInfo info = { 0 }; - info.hostUserData = this; - info.beatAndTempoProc = getBeatAndTempoCallback; - info.musicalTimeLocationProc = getMusicalTimeLocationCallback; - info.transportStateProc = getTransportStateCallback; - - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_HostCallbacks, kAudioUnitScope_Global, - 0, &info, sizeof (info)); - } - } -} - -void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, - int samplesPerBlockExpected) -{ - if (audioUnit != 0) - { - releaseResources(); - - Float64 sampleRateIn = 0, sampleRateOut = 0; - UInt32 sampleRateSize = sizeof (sampleRateIn); - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sampleRateIn, &sampleRateSize); - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sampleRateOut, &sampleRateSize); - - if (sampleRateIn != sampleRate_ || sampleRateOut != sampleRate_) - { - Float64 sr = sampleRate_; - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sr, sizeof (Float64)); - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sr, sizeof (Float64)); - } - - int numIns, numOuts; - getNumChannels (numIns, numOuts); - setPlayConfigDetails (numIns, numOuts, sampleRate_, samplesPerBlockExpected); - - Float64 latencySecs = 0.0; - UInt32 latencySize = sizeof (latencySecs); - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, - 0, &latencySecs, &latencySize); - - setLatencySamples (roundToInt (latencySecs * sampleRate_)); - - AudioUnitReset (audioUnit, kAudioUnitScope_Input, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Output, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Global, 0); - - { - AudioStreamBasicDescription stream = { 0 }; - stream.mSampleRate = sampleRate_; - stream.mFormatID = kAudioFormatLinearPCM; - stream.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved; - stream.mFramesPerPacket = 1; - stream.mBytesPerPacket = 4; - stream.mBytesPerFrame = 4; - stream.mBitsPerChannel = 32; - stream.mChannelsPerFrame = numIns; - - OSStatus err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, - 0, &stream, sizeof (stream)); - - stream.mChannelsPerFrame = numOuts; - - err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, - 0, &stream, sizeof (stream)); - } - - outputBufferList.calloc (sizeof (AudioBufferList) + sizeof (AudioBuffer) * (numOuts + 1), 1); - outputBufferList->mNumberBuffers = numOuts; - - for (int i = numOuts; --i >= 0;) - outputBufferList->mBuffers[i].mNumberChannels = 1; - - zerostruct (timeStamp); - timeStamp.mSampleTime = 0; - timeStamp.mHostTime = AudioGetCurrentHostTime(); - timeStamp.mFlags = kAudioTimeStampSampleTimeValid | kAudioTimeStampHostTimeValid; - - currentBuffer = 0; - wasPlaying = false; - - prepared = (AudioUnitInitialize (audioUnit) == noErr); - } -} - -void AudioUnitPluginInstance::releaseResources() -{ - if (prepared) - { - AudioUnitUninitialize (audioUnit); - - AudioUnitReset (audioUnit, kAudioUnitScope_Input, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Output, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Global, 0); - - outputBufferList.free(); - currentBuffer = 0; - prepared = false; - } -} - -OSStatus AudioUnitPluginInstance::renderGetInput (AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) const -{ - if (inBusNumber == 0 - && currentBuffer != 0) - { - jassert (inNumberFrames == currentBuffer->getNumSamples()); // if this ever happens, might need to add extra handling - - for (int i = 0; i < ioData->mNumberBuffers; ++i) - { - if (i < currentBuffer->getNumChannels()) - { - memcpy (ioData->mBuffers[i].mData, - currentBuffer->getSampleData (i, 0), - sizeof (float) * inNumberFrames); - } - else - { - zeromem (ioData->mBuffers[i].mData, - sizeof (float) * inNumberFrames); - } - } - } - - return noErr; -} - -void AudioUnitPluginInstance::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - if (prepared) - { - AudioUnitRenderActionFlags flags = 0; - - timeStamp.mHostTime = AudioGetCurrentHostTime(); - - for (int i = getNumOutputChannels(); --i >= 0;) - { - outputBufferList->mBuffers[i].mDataByteSize = sizeof (float) * numSamples; - outputBufferList->mBuffers[i].mData = buffer.getSampleData (i, 0); - } - - currentBuffer = &buffer; - - if (wantsMidiMessages) - { - const uint8* midiEventData; - int midiEventSize, midiEventPosition; - MidiBuffer::Iterator i (midiMessages); - - while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) - { - if (midiEventSize <= 3) - MusicDeviceMIDIEvent (audioUnit, - midiEventData[0], midiEventData[1], midiEventData[2], - midiEventPosition); - else - MusicDeviceSysEx (audioUnit, midiEventData, midiEventSize); - } - - midiMessages.clear(); - } - - AudioUnitRender (audioUnit, &flags, &timeStamp, - 0, numSamples, outputBufferList); - - timeStamp.mSampleTime += numSamples; - } - else - { - // Plugin not working correctly, so just bypass.. - for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) - buffer.clear (i, 0, buffer.getNumSamples()); - } -} - -OSStatus AudioUnitPluginInstance::getBeatAndTempo (Float64* outCurrentBeat, Float64* outCurrentTempo) const -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != nullptr && ph->getCurrentPosition (result)) - { - if (outCurrentBeat != nullptr) - *outCurrentBeat = result.ppqPosition; - - if (outCurrentTempo != nullptr) - *outCurrentTempo = result.bpm; - } - else - { - if (outCurrentBeat != nullptr) - *outCurrentBeat = 0; - - if (outCurrentTempo != nullptr) - *outCurrentTempo = 120.0; - } - - return noErr; -} - -OSStatus AudioUnitPluginInstance::getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, - Float32* outTimeSig_Numerator, - UInt32* outTimeSig_Denominator, - Float64* outCurrentMeasureDownBeat) const -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != nullptr && ph->getCurrentPosition (result)) - { - if (outTimeSig_Numerator != nullptr) - *outTimeSig_Numerator = result.timeSigNumerator; - - if (outTimeSig_Denominator != nullptr) - *outTimeSig_Denominator = result.timeSigDenominator; - - if (outDeltaSampleOffsetToNextBeat != nullptr) - *outDeltaSampleOffsetToNextBeat = 0; //xxx - - if (outCurrentMeasureDownBeat != nullptr) - *outCurrentMeasureDownBeat = result.ppqPositionOfLastBarStart; //xxx wrong - } - else - { - if (outDeltaSampleOffsetToNextBeat != nullptr) - *outDeltaSampleOffsetToNextBeat = 0; - - if (outTimeSig_Numerator != nullptr) - *outTimeSig_Numerator = 4; - - if (outTimeSig_Denominator != nullptr) - *outTimeSig_Denominator = 4; - - if (outCurrentMeasureDownBeat != nullptr) - *outCurrentMeasureDownBeat = 0; - } - - return noErr; -} - -OSStatus AudioUnitPluginInstance::getTransportState (Boolean* outIsPlaying, - Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, - Boolean* outIsCycling, - Float64* outCycleStartBeat, - Float64* outCycleEndBeat) -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != nullptr && ph->getCurrentPosition (result)) - { - if (outIsPlaying != nullptr) - *outIsPlaying = result.isPlaying; - - if (outTransportStateChanged != nullptr) - { - *outTransportStateChanged = result.isPlaying != wasPlaying; - wasPlaying = result.isPlaying; - } - - if (outCurrentSampleInTimeLine != nullptr) - *outCurrentSampleInTimeLine = roundToInt (result.timeInSeconds * getSampleRate()); - - if (outIsCycling != nullptr) - *outIsCycling = false; - - if (outCycleStartBeat != nullptr) - *outCycleStartBeat = 0; - - if (outCycleEndBeat != nullptr) - *outCycleEndBeat = 0; - } - else - { - if (outIsPlaying != nullptr) - *outIsPlaying = false; - - if (outTransportStateChanged != nullptr) - *outTransportStateChanged = false; - - if (outCurrentSampleInTimeLine != nullptr) - *outCurrentSampleInTimeLine = 0; - - if (outIsCycling != nullptr) - *outIsCycling = false; - - if (outCycleStartBeat != nullptr) - *outCycleStartBeat = 0; - - if (outCycleEndBeat != nullptr) - *outCycleEndBeat = 0; - } - - return noErr; -} - -class AudioUnitPluginWindowCocoa : public AudioProcessorEditor, - public Timer -{ -public: - AudioUnitPluginWindowCocoa (AudioUnitPluginInstance& plugin_, const bool createGenericViewIfNeeded) - : AudioProcessorEditor (&plugin_), - plugin (plugin_) - { - addAndMakeVisible (&wrapper); - - setOpaque (true); - setVisible (true); - setSize (100, 100); - - createView (createGenericViewIfNeeded); - } - - ~AudioUnitPluginWindowCocoa() - { - const bool wasValid = isValid(); - - wrapper.setView (0); - - if (wasValid) - plugin.editorBeingDeleted (this); - } - - bool isValid() const { return wrapper.getView() != 0; } - - void paint (Graphics& g) - { - g.fillAll (Colours::white); - } - - void resized() - { - wrapper.setSize (getWidth(), getHeight()); - } - - void timerCallback() - { - wrapper.resizeToFitView(); - startTimer (jmin (713, getTimerInterval() + 51)); - } - - void childBoundsChanged (Component* child) - { - setSize (wrapper.getWidth(), wrapper.getHeight()); - startTimer (70); - } - -private: - AudioUnitPluginInstance& plugin; - NSViewComponent wrapper; - - bool createView (const bool createGenericViewIfNeeded) - { - NSView* pluginView = nil; - - UInt32 dataSize = 0; - Boolean isWritable = false; - - AudioUnitInitialize (plugin.audioUnit); - - if (AudioUnitGetPropertyInfo (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, &dataSize, &isWritable) == noErr - && dataSize != 0 - && AudioUnitGetPropertyInfo (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, &dataSize, &isWritable) == noErr) - { - HeapBlock info; - info.calloc (dataSize, 1); - - if (AudioUnitGetProperty (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, info, &dataSize) == noErr) - { - NSString* viewClassName = (NSString*) (info->mCocoaAUViewClass[0]); - NSString* path = (NSString*) CFURLCopyPath (info->mCocoaAUViewBundleLocation); - NSBundle* viewBundle = [NSBundle bundleWithPath: [path autorelease]]; - Class viewClass = [viewBundle classNamed: viewClassName]; - - if ([viewClass conformsToProtocol: @protocol (AUCocoaUIBase)] - && [viewClass instancesRespondToSelector: @selector (interfaceVersion)] - && [viewClass instancesRespondToSelector: @selector (uiViewForAudioUnit: withSize:)]) - { - id factory = [[[viewClass alloc] init] autorelease]; - pluginView = [factory uiViewForAudioUnit: plugin.audioUnit - withSize: NSMakeSize (getWidth(), getHeight())]; - } - - for (int i = (dataSize - sizeof (CFURLRef)) / sizeof (CFStringRef); --i >= 0;) - CFRelease (info->mCocoaAUViewClass[i]); - - CFRelease (info->mCocoaAUViewBundleLocation); - } - } - - if (createGenericViewIfNeeded && (pluginView == 0)) - pluginView = [[AUGenericView alloc] initWithAudioUnit: plugin.audioUnit]; - - wrapper.setView (pluginView); - - if (pluginView != nil) - { - timerCallback(); - startTimer (70); - } - - return pluginView != nil; - } -}; - -#if JUCE_SUPPORT_CARBON - -class AudioUnitPluginWindowCarbon : public AudioProcessorEditor -{ -public: - - AudioUnitPluginWindowCarbon (AudioUnitPluginInstance& plugin_) - : AudioProcessorEditor (&plugin_), - plugin (plugin_), - viewComponent (0) - { - addAndMakeVisible (innerWrapper = new InnerWrapperComponent (this)); - - setOpaque (true); - setVisible (true); - setSize (400, 300); - - ComponentDescription viewList [16]; - UInt32 viewListSize = sizeof (viewList); - AudioUnitGetProperty (plugin.audioUnit, kAudioUnitProperty_GetUIComponentList, kAudioUnitScope_Global, - 0, &viewList, &viewListSize); - - componentRecord = FindNextComponent (0, &viewList[0]); - } - - ~AudioUnitPluginWindowCarbon() - { - innerWrapper = 0; - - if (isValid()) - plugin.editorBeingDeleted (this); - } - - bool isValid() const noexcept { return componentRecord != 0; } - - void paint (Graphics& g) - { - g.fillAll (Colours::black); - } - - void resized() - { - innerWrapper->setSize (getWidth(), getHeight()); - } - - bool keyStateChanged (bool) - { - return false; - } - - bool keyPressed (const KeyPress&) - { - return false; - } - - AudioUnit getAudioUnit() const { return plugin.audioUnit; } - - AudioUnitCarbonView getViewComponent() - { - if (viewComponent == 0 && componentRecord != 0) - viewComponent = (AudioUnitCarbonView) OpenComponent (componentRecord); - - return viewComponent; - } - - void closeViewComponent() - { - if (viewComponent != 0) - { - log ("Closing AU GUI: " + plugin.getName()); - - CloseComponent (viewComponent); - viewComponent = 0; - } - } - -private: - - AudioUnitPluginInstance& plugin; - ComponentRecord* componentRecord; - AudioUnitCarbonView viewComponent; - - class InnerWrapperComponent : public CarbonViewWrapperComponent - { - public: - InnerWrapperComponent (AudioUnitPluginWindowCarbon* const owner_) - : owner (owner_) - { - } - - ~InnerWrapperComponent() - { - deleteWindow(); - } - - HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) - { - log ("Opening AU GUI: " + owner->plugin.getName()); - - AudioUnitCarbonView viewComponent = owner->getViewComponent(); - - if (viewComponent == 0) - return 0; - - Float32Point pos = { 0, 0 }; - Float32Point size = { 250, 200 }; - - HIViewRef pluginView = 0; - - AudioUnitCarbonViewCreate (viewComponent, - owner->getAudioUnit(), - windowRef, - rootView, - &pos, - &size, - (ControlRef*) &pluginView); - - return pluginView; - } - - void removeView (HIViewRef) - { - owner->closeViewComponent(); - } - - private: - AudioUnitPluginWindowCarbon* const owner; - }; - - friend class InnerWrapperComponent; - ScopedPointer innerWrapper; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioUnitPluginWindowCarbon); -}; - -#endif - -bool AudioUnitPluginInstance::hasEditor() const -{ - return true; -} - -AudioProcessorEditor* AudioUnitPluginInstance::createEditor() -{ - ScopedPointer w (new AudioUnitPluginWindowCocoa (*this, false)); - - if (! static_cast (static_cast (w))->isValid()) - w = 0; - -#if JUCE_SUPPORT_CARBON - if (w == nullptr) - { - w = new AudioUnitPluginWindowCarbon (*this); - - if (! static_cast (static_cast (w))->isValid()) - w = 0; - } -#endif - - if (w == nullptr) - w = new AudioUnitPluginWindowCocoa (*this, true); // use AUGenericView as a fallback - - return w.release(); -} - -const String AudioUnitPluginInstance::getCategory() const -{ - const char* result = nullptr; - - switch (componentDesc.componentType) - { - case kAudioUnitType_Effect: - case kAudioUnitType_MusicEffect: result = "Effect"; break; - case kAudioUnitType_MusicDevice: result = "Synth"; break; - case kAudioUnitType_Generator: result = "Generator"; break; - case kAudioUnitType_Panner: result = "Panner"; break; - default: break; - } - - return result; -} - -int AudioUnitPluginInstance::getNumParameters() -{ - return parameterIds.size(); -} - -float AudioUnitPluginInstance::getParameter (int index) -{ - const ScopedLock sl (lock); - - Float32 value = 0.0f; - - if (audioUnit != 0 && isPositiveAndBelow (index, parameterIds.size())) - { - AudioUnitGetParameter (audioUnit, - (UInt32) parameterIds.getUnchecked (index), - kAudioUnitScope_Global, 0, - &value); - } - - return value; -} - -void AudioUnitPluginInstance::setParameter (int index, float newValue) -{ - const ScopedLock sl (lock); - - if (audioUnit != 0 && isPositiveAndBelow (index, parameterIds.size())) - { - AudioUnitSetParameter (audioUnit, - (UInt32) parameterIds.getUnchecked (index), - kAudioUnitScope_Global, 0, - newValue, 0); - } -} - -const String AudioUnitPluginInstance::getParameterName (int index) -{ - AudioUnitParameterInfo info = { 0 }; - UInt32 sz = sizeof (info); - - String name; - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ParameterInfo, - kAudioUnitScope_Global, - parameterIds [index], &info, &sz) == noErr) - { - if ((info.flags & kAudioUnitParameterFlag_HasCFNameString) != 0) - name = String::fromCFString (info.cfNameString); - else - name = String (info.name, sizeof (info.name)); - } - - return name; -} - -const String AudioUnitPluginInstance::getParameterText (int index) -{ - return String (getParameter (index)); -} - -bool AudioUnitPluginInstance::isParameterAutomatable (int index) const -{ - AudioUnitParameterInfo info; - UInt32 sz = sizeof (info); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ParameterInfo, - kAudioUnitScope_Global, - parameterIds [index], &info, &sz) == noErr) - { - return (info.flags & kAudioUnitParameterFlag_NonRealTime) == 0; - } - - return true; -} - -int AudioUnitPluginInstance::getNumPrograms() -{ - CFArrayRef presets; - UInt32 sz = sizeof (CFArrayRef); - int num = 0; - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, &presets, &sz) == noErr) - { - num = (int) CFArrayGetCount (presets); - CFRelease (presets); - } - - return num; -} - -int AudioUnitPluginInstance::getCurrentProgram() -{ - AUPreset current; - current.presetNumber = 0; - UInt32 sz = sizeof (AUPreset); - - AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, ¤t, &sz); - - return current.presetNumber; -} - -void AudioUnitPluginInstance::setCurrentProgram (int newIndex) -{ - AUPreset current; - current.presetNumber = newIndex; - current.presetName = 0; - - AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_PresentPreset, - kAudioUnitScope_Global, - 0, ¤t, sizeof (AUPreset)); -} - -const String AudioUnitPluginInstance::getProgramName (int index) -{ - String s; - CFArrayRef presets; - UInt32 sz = sizeof (CFArrayRef); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, &presets, &sz) == noErr) - { - for (CFIndex i = 0; i < CFArrayGetCount (presets); ++i) - { - const AUPreset* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, i); - - if (p != nullptr && p->presetNumber == index) - { - s = String::fromCFString (p->presetName); - break; - } - } - - CFRelease (presets); - } - - return s; -} - -void AudioUnitPluginInstance::changeProgramName (int index, const String& newName) -{ - jassertfalse; // xxx not implemented! -} - -const String AudioUnitPluginInstance::getInputChannelName (int index) const -{ - if (isPositiveAndBelow (index, getNumInputChannels())) - return "Input " + String (index + 1); - - return String::empty; -} - -bool AudioUnitPluginInstance::isInputChannelStereoPair (int index) const -{ - if (! isPositiveAndBelow (index, getNumInputChannels())) - return false; - - return true; -} - -const String AudioUnitPluginInstance::getOutputChannelName (int index) const -{ - if (isPositiveAndBelow (index, getNumOutputChannels())) - return "Output " + String (index + 1); - - return String::empty; -} - -bool AudioUnitPluginInstance::isOutputChannelStereoPair (int index) const -{ - if (! isPositiveAndBelow (index, getNumOutputChannels())) - return false; - - return true; -} - -void AudioUnitPluginInstance::getStateInformation (MemoryBlock& destData) -{ - getCurrentProgramStateInformation (destData); -} - -void AudioUnitPluginInstance::getCurrentProgramStateInformation (MemoryBlock& destData) -{ - CFPropertyListRef propertyList = 0; - UInt32 sz = sizeof (CFPropertyListRef); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ClassInfo, - kAudioUnitScope_Global, - 0, &propertyList, &sz) == noErr) - { - CFWriteStreamRef stream = CFWriteStreamCreateWithAllocatedBuffers (kCFAllocatorDefault, kCFAllocatorDefault); - CFWriteStreamOpen (stream); - - CFIndex bytesWritten = CFPropertyListWriteToStream (propertyList, stream, kCFPropertyListBinaryFormat_v1_0, 0); - CFWriteStreamClose (stream); - - CFDataRef data = (CFDataRef) CFWriteStreamCopyProperty (stream, kCFStreamPropertyDataWritten); - - destData.setSize (bytesWritten); - destData.copyFrom (CFDataGetBytePtr (data), 0, destData.getSize()); - CFRelease (data); - - CFRelease (stream); - CFRelease (propertyList); - } -} - -void AudioUnitPluginInstance::setStateInformation (const void* data, int sizeInBytes) -{ - setCurrentProgramStateInformation (data, sizeInBytes); -} - -void AudioUnitPluginInstance::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - CFReadStreamRef stream = CFReadStreamCreateWithBytesNoCopy (kCFAllocatorDefault, - (const UInt8*) data, - sizeInBytes, - kCFAllocatorNull); - CFReadStreamOpen (stream); - - CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0; - CFPropertyListRef propertyList = CFPropertyListCreateFromStream (kCFAllocatorDefault, - stream, - 0, - kCFPropertyListImmutable, - &format, - 0); - CFRelease (stream); - - if (propertyList != 0) - AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_ClassInfo, - kAudioUnitScope_Global, - 0, &propertyList, sizeof (propertyList)); -} - -AudioUnitPluginFormat::AudioUnitPluginFormat() -{ -} - -AudioUnitPluginFormat::~AudioUnitPluginFormat() -{ -} - -void AudioUnitPluginFormat::findAllTypesForFile (OwnedArray & results, - const String& fileOrIdentifier) -{ - if (! fileMightContainThisPluginType (fileOrIdentifier)) - return; - - PluginDescription desc; - desc.fileOrIdentifier = fileOrIdentifier; - desc.uid = 0; - - try - { - ScopedPointer createdInstance (createInstanceFromDescription (desc)); - AudioUnitPluginInstance* const auInstance = dynamic_cast ((AudioPluginInstance*) createdInstance); - - if (auInstance != nullptr) - { - auInstance->fillInPluginDescription (desc); - results.add (new PluginDescription (desc)); - } - } - catch (...) - { - // crashed while loading... - } -} - -AudioPluginInstance* AudioUnitPluginFormat::createInstanceFromDescription (const PluginDescription& desc) -{ - if (fileMightContainThisPluginType (desc.fileOrIdentifier)) - { - ScopedPointer result (new AudioUnitPluginInstance (desc.fileOrIdentifier)); - - if (result->audioUnit != 0) - { - result->initialise(); - return result.release(); - } - } - - return nullptr; -} - -StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath& /*directoriesToSearch*/, - const bool /*recursive*/) -{ - StringArray result; - ComponentRecord* comp = 0; - - for (;;) - { - ComponentDescription desc = { 0 }; - comp = FindNextComponent (comp, &desc); - - if (comp == 0) - break; - - GetComponentInfo (comp, &desc, 0, 0, 0); - - if (desc.componentType == kAudioUnitType_MusicDevice - || desc.componentType == kAudioUnitType_MusicEffect - || desc.componentType == kAudioUnitType_Effect - || desc.componentType == kAudioUnitType_Generator - || desc.componentType == kAudioUnitType_Panner) - { - const String s (AudioUnitFormatHelpers::createAUPluginIdentifier (desc)); - DBG (s); - result.add (s); - } - } - - return result; -} - -bool AudioUnitPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier) -{ - ComponentDescription desc; - - String name, version, manufacturer; - if (AudioUnitFormatHelpers::getComponentDescFromIdentifier (fileOrIdentifier, desc, name, version, manufacturer)) - return FindNextComponent (0, &desc) != 0; - - const File f (fileOrIdentifier); - - return f.hasFileExtension (".component") - && f.isDirectory(); -} - -String AudioUnitPluginFormat::getNameOfPluginFromIdentifier (const String& fileOrIdentifier) -{ - ComponentDescription desc; - String name, version, manufacturer; - AudioUnitFormatHelpers::getComponentDescFromIdentifier (fileOrIdentifier, desc, name, version, manufacturer); - - if (name.isEmpty()) - name = fileOrIdentifier; - - return name; -} - -bool AudioUnitPluginFormat::doesPluginStillExist (const PluginDescription& desc) -{ - if (desc.fileOrIdentifier.startsWithIgnoreCase (AudioUnitFormatHelpers::auIdentifierPrefix)) - return fileMightContainThisPluginType (desc.fileOrIdentifier); - else - return File (desc.fileOrIdentifier).exists(); -} - -FileSearchPath AudioUnitPluginFormat::getDefaultLocationsToSearch() -{ - return FileSearchPath ("/(Default AudioUnit locations)"); -} - -#endif - -END_JUCE_NAMESPACE - -#undef log - -#endif - -/*** End of inlined file: juce_AudioUnitPluginFormat.mm ***/ - - -/*** Start of inlined file: juce_VSTPluginFormat.mm ***/ -// This file just wraps juce_VSTPluginFormat.cpp in an objective-C wrapper -#define JUCE_MAC_VST_INCLUDED 1 - -/*** Start of inlined file: juce_VSTPluginFormat.cpp ***/ -#if JUCE_PLUGINHOST_VST && (JUCE_MAC_VST_INCLUDED || ! JUCE_MAC) - -#if JUCE_WINDOWS - #undef _WIN32_WINNT - #define _WIN32_WINNT 0x500 - #undef STRICT - #define STRICT 1 - #include - #include - #pragma warning (disable : 4312 4355) - #ifdef __INTEL_COMPILER - #pragma warning (disable : 1899) - #endif -#elif JUCE_LINUX - #include - #include - #include - #include - #include - #undef Font - #undef KeyPress - #undef Drawable - #undef Time -#else - #include - #include -#endif - -#if ! (JUCE_MAC && JUCE_64BIT) - -BEGIN_JUCE_NAMESPACE - -#if JUCE_MAC && JUCE_SUPPORT_CARBON - -#endif - -#if JUCE_MAC - static bool makeFSRefFromPath (FSRef* destFSRef, const String& path) - { - return FSPathMakeRef (reinterpret_cast (path.toUTF8().getAddress()), destFSRef, 0) == noErr; - } -#endif - -#undef PRAGMA_ALIGN_SUPPORTED -#define VST_FORCE_DEPRECATED 0 - -#if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4996) -#endif - -/* Obviously you're going to need the Steinberg vstsdk2.4 folder in - your include path if you want to add VST support. - - If you're not interested in VSTs, you can disable them by changing the - JUCE_PLUGINHOST_VST flag in juce_Config.h -*/ -#include - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -#if JUCE_LINUX - #define Font JUCE_NAMESPACE::Font - #define KeyPress JUCE_NAMESPACE::KeyPress - #define Drawable JUCE_NAMESPACE::Drawable - #define Time JUCE_NAMESPACE::Time -#endif - - -/*** Start of inlined file: juce_VSTMidiEventList.h ***/ -#ifdef __aeffect__ - -#ifndef __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ -#define __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ - -/** Holds a set of VSTMidiEvent objects and makes it easy to add - events to the list. - - This is used by both the VST hosting code and the plugin wrapper. -*/ -class VSTMidiEventList -{ -public: - - VSTMidiEventList() - : numEventsUsed (0), numEventsAllocated (0) - { - } - - ~VSTMidiEventList() - { - freeEvents(); - } - - void clear() - { - numEventsUsed = 0; - - if (events != nullptr) - events->numEvents = 0; - } - - void addEvent (const void* const midiData, const int numBytes, const int frameOffset) - { - ensureSize (numEventsUsed + 1); - - VstMidiEvent* const e = (VstMidiEvent*) (events->events [numEventsUsed]); - events->numEvents = ++numEventsUsed; - - if (numBytes <= 4) - { - if (e->type == kVstSysExType) - { - delete[] (((VstMidiSysexEvent*) e)->sysexDump); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - e->noteLength = 0; - e->noteOffset = 0; - e->detune = 0; - e->noteOffVelocity = 0; - } - - e->deltaFrames = frameOffset; - memcpy (e->midiData, midiData, numBytes); - } - else - { - VstMidiSysexEvent* const se = (VstMidiSysexEvent*) e; - - if (se->type == kVstSysExType) - delete[] se->sysexDump; - - se->sysexDump = new char [numBytes]; - memcpy (se->sysexDump, midiData, numBytes); - - se->type = kVstSysExType; - se->byteSize = sizeof (VstMidiSysexEvent); - se->deltaFrames = frameOffset; - se->flags = 0; - se->dumpBytes = numBytes; - se->resvd1 = 0; - se->resvd2 = 0; - } - } - - // Handy method to pull the events out of an event buffer supplied by the host - // or plugin. - static void addEventsToMidiBuffer (const VstEvents* events, MidiBuffer& dest) - { - for (int i = 0; i < events->numEvents; ++i) - { - const VstEvent* const e = events->events[i]; - - if (e != nullptr) - { - if (e->type == kVstMidiType) - { - dest.addEvent ((const JUCE_NAMESPACE::uint8*) ((const VstMidiEvent*) e)->midiData, - 4, e->deltaFrames); - } - else if (e->type == kVstSysExType) - { - dest.addEvent ((const JUCE_NAMESPACE::uint8*) ((const VstMidiSysexEvent*) e)->sysexDump, - (int) ((const VstMidiSysexEvent*) e)->dumpBytes, - e->deltaFrames); - } - } - } - } - - void ensureSize (int numEventsNeeded) - { - if (numEventsNeeded > numEventsAllocated) - { - numEventsNeeded = (numEventsNeeded + 32) & ~31; - - const int size = 20 + sizeof (VstEvent*) * numEventsNeeded; - - if (events == nullptr) - events.calloc (size, 1); - else - events.realloc (size, 1); - - for (int i = numEventsAllocated; i < numEventsNeeded; ++i) - events->events[i] = allocateVSTEvent(); - - numEventsAllocated = numEventsNeeded; - } - } - - void freeEvents() - { - if (events != nullptr) - { - for (int i = numEventsAllocated; --i >= 0;) - freeVSTEvent (events->events[i]); - - events.free(); - numEventsUsed = 0; - numEventsAllocated = 0; - } - } - - HeapBlock events; - -private: - int numEventsUsed, numEventsAllocated; - - static VstEvent* allocateVSTEvent() - { - VstEvent* const e = (VstEvent*) ::calloc (1, sizeof (VstMidiEvent) > sizeof (VstMidiSysexEvent) ? sizeof (VstMidiEvent) - : sizeof (VstMidiSysexEvent)); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - return e; - } - - static void freeVSTEvent (VstEvent* e) - { - if (e->type == kVstSysExType) - delete[] (((VstMidiSysexEvent*) e)->sysexDump); - - ::free (e); - } -}; - -#endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ -#endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ - -/*** End of inlined file: juce_VSTMidiEventList.h ***/ - -#if ! JUCE_WINDOWS - static void _fpreset() {} - static void _clearfp() {} -#endif - -extern void JUCE_API juce_callAnyTimersSynchronously(); - -const int fxbVersionNum = 1; - -struct fxProgram -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCk' - long version; - long fxID; // fx unique id - long fxVersion; - long numParams; - char prgName[28]; - float params[1]; // variable no. of parameters -}; - -struct fxSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxBk' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char future[128]; - fxProgram programs[1]; // variable no. of programs -}; - -struct fxChunkSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCh', 'FPCh', or 'FBCh' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char future[128]; - long chunkSize; - char chunk[8]; // variable -}; - -struct fxProgramSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCh', 'FPCh', or 'FBCh' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char name[28]; - long chunkSize; - char chunk[8]; // variable -}; - -namespace -{ - long vst_swap (const long x) noexcept - { - #ifdef JUCE_LITTLE_ENDIAN - return (long) ByteOrder::swap ((uint32) x); - #else - return x; - #endif - } - - float vst_swapFloat (const float x) noexcept - { - #ifdef JUCE_LITTLE_ENDIAN - union { uint32 asInt; float asFloat; } n; - n.asFloat = x; - n.asInt = ByteOrder::swap (n.asInt); - return n.asFloat; - #else - return x; - #endif - } - - double getVSTHostTimeNanoseconds() - { - #if JUCE_WINDOWS - return timeGetTime() * 1000000.0; - #elif JUCE_LINUX - timeval micro; - gettimeofday (µ, 0); - return micro.tv_usec * 1000.0; - #elif JUCE_MAC - UnsignedWide micro; - Microseconds (µ); - return micro.lo * 1000.0; - #endif - } -} - -typedef AEffect* (VSTCALLBACK *MainCall) (audioMasterCallback); - -static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt); - -static int shellUIDToCreate = 0; -static int insideVSTCallback = 0; - -class IdleCallRecursionPreventer -{ -public: - IdleCallRecursionPreventer() - : isMessageThread (MessageManager::getInstance()->isThisTheMessageThread()) - { - if (isMessageThread) - ++insideVSTCallback; - } - - ~IdleCallRecursionPreventer() - { - if (isMessageThread) - --insideVSTCallback; - } - -private: - const bool isMessageThread; - - JUCE_DECLARE_NON_COPYABLE (IdleCallRecursionPreventer); -}; - -class VSTPluginWindow; - -// Change this to disable logging of various VST activities -#ifndef VST_LOGGING - #define VST_LOGGING 1 -#endif - -#if VST_LOGGING - #define log(a) Logger::writeToLog(a); -#else - #define log(a) -#endif - -#if JUCE_MAC && JUCE_PPC -static void* NewCFMFromMachO (void* const machofp) noexcept -{ - void* result = (void*) new char[8]; - - ((void**) result)[0] = machofp; - ((void**) result)[1] = result; - - return result; -} -#endif - -#if JUCE_LINUX - -extern Display* display; -extern XContext windowHandleXContext; - -typedef void (*EventProcPtr) (XEvent* ev); - -static bool xErrorTriggered; - -namespace -{ - int temporaryErrorHandler (Display*, XErrorEvent*) - { - xErrorTriggered = true; - return 0; - } - - int getPropertyFromXWindow (Window handle, Atom atom) - { - XErrorHandler oldErrorHandler = XSetErrorHandler (temporaryErrorHandler); - xErrorTriggered = false; - - int userSize; - unsigned long bytes, userCount; - unsigned char* data; - Atom userType; - - XGetWindowProperty (display, handle, atom, 0, 1, false, AnyPropertyType, - &userType, &userSize, &userCount, &bytes, &data); - - XSetErrorHandler (oldErrorHandler); - - return (userCount == 1 && ! xErrorTriggered) ? *reinterpret_cast (data) - : 0; - } - - Window getChildWindow (Window windowToCheck) - { - Window rootWindow, parentWindow; - Window* childWindows; - unsigned int numChildren; - - XQueryTree (display, - windowToCheck, - &rootWindow, - &parentWindow, - &childWindows, - &numChildren); - - if (numChildren > 0) - return childWindows [0]; - - return 0; - } - - void translateJuceToXButtonModifiers (const MouseEvent& e, XEvent& ev) noexcept - { - if (e.mods.isLeftButtonDown()) - { - ev.xbutton.button = Button1; - ev.xbutton.state |= Button1Mask; - } - else if (e.mods.isRightButtonDown()) - { - ev.xbutton.button = Button3; - ev.xbutton.state |= Button3Mask; - } - else if (e.mods.isMiddleButtonDown()) - { - ev.xbutton.button = Button2; - ev.xbutton.state |= Button2Mask; - } - } - - void translateJuceToXMotionModifiers (const MouseEvent& e, XEvent& ev) noexcept - { - if (e.mods.isLeftButtonDown()) ev.xmotion.state |= Button1Mask; - else if (e.mods.isRightButtonDown()) ev.xmotion.state |= Button3Mask; - else if (e.mods.isMiddleButtonDown()) ev.xmotion.state |= Button2Mask; - } - - void translateJuceToXCrossingModifiers (const MouseEvent& e, XEvent& ev) noexcept - { - if (e.mods.isLeftButtonDown()) ev.xcrossing.state |= Button1Mask; - else if (e.mods.isRightButtonDown()) ev.xcrossing.state |= Button3Mask; - else if (e.mods.isMiddleButtonDown()) ev.xcrossing.state |= Button2Mask; - } - - void translateJuceToXMouseWheelModifiers (const MouseEvent& e, const float increment, XEvent& ev) noexcept - { - if (increment < 0) - { - ev.xbutton.button = Button5; - ev.xbutton.state |= Button5Mask; - } - else if (increment > 0) - { - ev.xbutton.button = Button4; - ev.xbutton.state |= Button4Mask; - } - } -} - -#endif - -class ModuleHandle : public ReferenceCountedObject -{ -public: - - File file; - MainCall moduleMain; - String pluginName; - - static Array & getActiveModules() - { - static Array activeModules; - return activeModules; - } - - static ModuleHandle* findOrCreateModule (const File& file) - { - for (int i = getActiveModules().size(); --i >= 0;) - { - ModuleHandle* const module = getActiveModules().getUnchecked(i); - - if (module->file == file) - return module; - } - - _fpreset(); // (doesn't do any harm) - - const IdleCallRecursionPreventer icrp; - shellUIDToCreate = 0; - - log ("Attempting to load VST: " + file.getFullPathName()); - - ScopedPointer m (new ModuleHandle (file)); - - if (! m->open()) - m = nullptr; - - _fpreset(); // (doesn't do any harm) - - return m.release(); - } - - ModuleHandle (const File& file_) - : file (file_), - moduleMain (0) - #if JUCE_MAC - , fragId (0), resHandle (0), bundleRef (0), resFileId (0) - #endif - { - getActiveModules().add (this); - - #if JUCE_WINDOWS || JUCE_LINUX - fullParentDirectoryPathName = file_.getParentDirectory().getFullPathName(); - #elif JUCE_MAC - FSRef ref; - makeFSRefFromPath (&ref, file_.getParentDirectory().getFullPathName()); - FSGetCatalogInfo (&ref, kFSCatInfoNone, 0, 0, &parentDirFSSpec, 0); - #endif - } - - ~ModuleHandle() - { - getActiveModules().removeValue (this); - close(); - } - -#if JUCE_WINDOWS || JUCE_LINUX - DynamicLibrary module; - String fullParentDirectoryPathName; - - bool open() - { - #if JUCE_WINDOWS - static bool timePeriodSet = false; - - if (! timePeriodSet) - { - timePeriodSet = true; - timeBeginPeriod (2); - } - #endif - - pluginName = file.getFileNameWithoutExtension(); - - module.open (file.getFullPathName()); - - moduleMain = (MainCall) module.getFunction ("VSTPluginMain"); - - if (moduleMain == nullptr) - moduleMain = (MainCall) module.getFunction ("main"); - - return moduleMain != nullptr; - } - - void close() - { - _fpreset(); // (doesn't do any harm) - - module.close(); - } - - void closeEffect (AEffect* eff) - { - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - } - -#else - CFragConnectionID fragId; - Handle resHandle; - CFBundleRef bundleRef; - FSSpec parentDirFSSpec; - short resFileId; - - bool open() - { - bool ok = false; - const String filename (file.getFullPathName()); - - if (file.hasFileExtension (".vst")) - { - const char* const utf8 = filename.toUTF8().getAddress(); - CFURLRef url = CFURLCreateFromFileSystemRepresentation (0, (const UInt8*) utf8, - strlen (utf8), file.isDirectory()); - - if (url != 0) - { - bundleRef = CFBundleCreate (kCFAllocatorDefault, url); - CFRelease (url); - - if (bundleRef != 0) - { - if (CFBundleLoadExecutable (bundleRef)) - { - moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef, CFSTR("main_macho")); - - if (moduleMain == 0) - moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef, CFSTR("VSTPluginMain")); - - if (moduleMain != 0) - { - CFTypeRef name = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleName")); - - if (name != 0) - { - if (CFGetTypeID (name) == CFStringGetTypeID()) - { - char buffer[1024]; - - if (CFStringGetCString ((CFStringRef) name, buffer, sizeof (buffer), CFStringGetSystemEncoding())) - pluginName = buffer; - } - } - - if (pluginName.isEmpty()) - pluginName = file.getFileNameWithoutExtension(); - - resFileId = CFBundleOpenBundleResourceMap (bundleRef); - - ok = true; - } - } - - if (! ok) - { - CFBundleUnloadExecutable (bundleRef); - CFRelease (bundleRef); - bundleRef = 0; - } - } - } - } -#if JUCE_PPC - else - { - FSRef fn; - - if (FSPathMakeRef ((UInt8*) filename.toUTF8().getAddress(), &fn, 0) == noErr) - { - resFileId = FSOpenResFile (&fn, fsRdPerm); - - if (resFileId != -1) - { - const int numEffs = Count1Resources ('aEff'); - - for (int i = 0; i < numEffs; ++i) - { - resHandle = Get1IndResource ('aEff', i + 1); - - if (resHandle != 0) - { - OSType type; - Str255 name; - SInt16 id; - GetResInfo (resHandle, &id, &type, name); - pluginName = String ((const char*) name + 1, name[0]); - DetachResource (resHandle); - HLock (resHandle); - - Ptr ptr; - Str255 errorText; - - OSErr err = GetMemFragment (*resHandle, GetHandleSize (resHandle), - name, kPrivateCFragCopy, - &fragId, &ptr, errorText); - - if (err == noErr) - { - moduleMain = (MainCall) newMachOFromCFM (ptr); - ok = true; - } - else - { - HUnlock (resHandle); - } - - break; - } - } - - if (! ok) - CloseResFile (resFileId); - } - } - } -#endif - - return ok; - } - - void close() - { - #if JUCE_PPC - if (fragId != 0) - { - if (moduleMain != 0) - disposeMachOFromCFM ((void*) moduleMain); - - CloseConnection (&fragId); - HUnlock (resHandle); - - if (resFileId != 0) - CloseResFile (resFileId); - } - else - #endif - if (bundleRef != 0) - { - CFBundleCloseBundleResourceMap (bundleRef, resFileId); - - if (CFGetRetainCount (bundleRef) == 1) - CFBundleUnloadExecutable (bundleRef); - - if (CFGetRetainCount (bundleRef) > 0) - CFRelease (bundleRef); - } - } - - void closeEffect (AEffect* eff) - { - #if JUCE_PPC - if (fragId != 0) - { - Array thingsToDelete; - thingsToDelete.add ((void*) eff->dispatcher); - thingsToDelete.add ((void*) eff->process); - thingsToDelete.add ((void*) eff->setParameter); - thingsToDelete.add ((void*) eff->getParameter); - thingsToDelete.add ((void*) eff->processReplacing); - - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - - for (int i = thingsToDelete.size(); --i >= 0;) - disposeMachOFromCFM (thingsToDelete[i]); - } - else - #endif - { - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - } - } - - #if JUCE_PPC - static void* newMachOFromCFM (void* cfmfp) - { - if (cfmfp == 0) - return nullptr; - - UInt32* const mfp = new UInt32[6]; - - mfp[0] = 0x3d800000 | ((UInt32) cfmfp >> 16); - mfp[1] = 0x618c0000 | ((UInt32) cfmfp & 0xffff); - mfp[2] = 0x800c0000; - mfp[3] = 0x804c0004; - mfp[4] = 0x7c0903a6; - mfp[5] = 0x4e800420; - - MakeDataExecutable (mfp, sizeof (UInt32) * 6); - return mfp; - } - - static void disposeMachOFromCFM (void* ptr) - { - delete[] static_cast (ptr); - } - - void coerceAEffectFunctionCalls (AEffect* eff) - { - if (fragId != 0) - { - eff->dispatcher = (AEffectDispatcherProc) newMachOFromCFM ((void*) eff->dispatcher); - eff->process = (AEffectProcessProc) newMachOFromCFM ((void*) eff->process); - eff->setParameter = (AEffectSetParameterProc) newMachOFromCFM ((void*) eff->setParameter); - eff->getParameter = (AEffectGetParameterProc) newMachOFromCFM ((void*) eff->getParameter); - eff->processReplacing = (AEffectProcessProc) newMachOFromCFM ((void*) eff->processReplacing); - } - } - #endif - -#endif - -private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle); -}; - -/** - An instance of a plugin, created by a VSTPluginFormat. - -*/ -class VSTPluginInstance : public AudioPluginInstance, - private Timer, - private AsyncUpdater -{ -public: - - ~VSTPluginInstance(); - - // AudioPluginInstance methods: - - void fillInPluginDescription (PluginDescription& desc) const - { - desc.name = name; - - { - char buffer [512] = { 0 }; - dispatch (effGetEffectName, 0, 0, buffer, 0); - - desc.descriptiveName = String (buffer).trim(); - - if (desc.descriptiveName.isEmpty()) - desc.descriptiveName = name; - } - - desc.fileOrIdentifier = module->file.getFullPathName(); - desc.uid = getUID(); - desc.lastFileModTime = module->file.getLastModificationTime(); - desc.pluginFormatName = "VST"; - desc.category = getCategory(); - - { - char buffer [kVstMaxVendorStrLen + 8] = { 0 }; - dispatch (effGetVendorString, 0, 0, buffer, 0); - desc.manufacturerName = buffer; - } - - desc.version = getVersion(); - desc.numInputChannels = getNumInputChannels(); - desc.numOutputChannels = getNumOutputChannels(); - desc.isInstrument = (effect != nullptr && (effect->flags & effFlagsIsSynth) != 0); - } - - void* getPlatformSpecificData() { return effect; } - const String getName() const { return name; } - int getUID() const; - bool acceptsMidi() const { return wantsMidiMessages; } - bool producesMidi() const { return dispatch (effCanDo, 0, 0, (void*) "sendVstMidiEvent", 0) > 0; } - - // AudioProcessor methods: - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages); - - bool hasEditor() const { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; } - AudioProcessorEditor* createEditor(); - - const String getInputChannelName (int index) const; - bool isInputChannelStereoPair (int index) const; - - const String getOutputChannelName (int index) const; - bool isOutputChannelStereoPair (int index) const; - - int getNumParameters() { return effect != nullptr ? effect->numParams : 0; } - float getParameter (int index); - void setParameter (int index, float newValue); - const String getParameterName (int index); - const String getParameterText (int index); - bool isParameterAutomatable (int index) const; - - int getNumPrograms() { return effect != nullptr ? effect->numPrograms : 0; } - int getCurrentProgram() { return dispatch (effGetProgram, 0, 0, 0, 0); } - void setCurrentProgram (int index); - const String getProgramName (int index); - void changeProgramName (int index, const String& newName); - - void getStateInformation (MemoryBlock& destData); - void getCurrentProgramStateInformation (MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - - void timerCallback(); - void handleAsyncUpdate(); - VstIntPtr handleCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt); - -private: - - friend class VSTPluginWindow; - friend class VSTPluginFormat; - - AEffect* effect; - String name; - CriticalSection lock; - bool wantsMidiMessages, initialised, isPowerOn; - mutable StringArray programNames; - AudioSampleBuffer tempBuffer; - CriticalSection midiInLock; - MidiBuffer incomingMidi; - VSTMidiEventList midiEventsToSend; - VstTimeInfo vstHostTime; - - ReferenceCountedObjectPtr module; - - int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) const; - bool restoreProgramSettings (const fxProgram* const prog); - const String getCurrentProgramName(); - void setParamsInProgramBlock (fxProgram* const prog); - void updateStoredProgramNames(); - void initialise(); - void handleMidiFromPlugin (const VstEvents* const events); - void createTempParameterStore (MemoryBlock& dest); - void restoreFromTempParameterStore (const MemoryBlock& mb); - const String getParameterLabel (int index) const; - - bool usesChunks() const noexcept { return effect != nullptr && (effect->flags & effFlagsProgramChunks) != 0; } - void getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const; - void setChunkData (const char* data, int size, bool isPreset); - bool loadFromFXBFile (const void* data, int numBytes); - bool saveToFXBFile (MemoryBlock& dest, bool isFXB, int maxSizeMB); - - int getVersionNumber() const noexcept { return effect != nullptr ? effect->version : 0; } - const String getVersion() const; - const String getCategory() const; - - void setPower (const bool on); - - VSTPluginInstance (const ReferenceCountedObjectPtr & module); - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginInstance); -}; - -VSTPluginInstance::VSTPluginInstance (const ReferenceCountedObjectPtr & module_) - : effect (nullptr), - name (module_->pluginName), - wantsMidiMessages (false), - initialised (false), - isPowerOn (false), - tempBuffer (1, 1), - module (module_) -{ - try - { - const IdleCallRecursionPreventer icrp; - _fpreset(); - - log ("Creating VST instance: " + name); - - #if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - - #if JUCE_PPC - if (module->fragId != 0) - { - static void* audioMasterCoerced = nullptr; - if (audioMasterCoerced == nullptr) - audioMasterCoerced = NewCFMFromMachO ((void*) &audioMaster); - - effect = module->moduleMain ((audioMasterCallback) audioMasterCoerced); - } - else - #endif - #endif - { - effect = module->moduleMain (&audioMaster); - } - - if (effect != nullptr && effect->magic == kEffectMagic) - { - #if JUCE_PPC - module->coerceAEffectFunctionCalls (effect); - #endif - - jassert (effect->resvd2 == 0); - jassert (effect->object != 0); - - _fpreset(); // some dodgy plugs fuck around with this - } - else - { - effect = nullptr; - } - } - catch (...) - {} -} - -VSTPluginInstance::~VSTPluginInstance() -{ - const ScopedLock sl (lock); - - if (effect != nullptr && effect->magic == kEffectMagic) - { - try - { - #if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - #endif - - // Must delete any editors before deleting the plugin instance! - jassert (getActiveEditor() == 0); - - _fpreset(); // some dodgy plugs fuck around with this - - module->closeEffect (effect); - } - catch (...) - {} - } - - module = nullptr; - effect = nullptr; -} - -void VSTPluginInstance::initialise() -{ - if (initialised || effect == 0) - return; - - log ("Initialising VST: " + module->pluginName); - initialised = true; - - dispatch (effIdentify, 0, 0, 0, 0); - - if (getSampleRate() > 0) - dispatch (effSetSampleRate, 0, 0, 0, (float) getSampleRate()); - - if (getBlockSize() > 0) - dispatch (effSetBlockSize, 0, jmax (32, getBlockSize()), 0, 0); - - dispatch (effOpen, 0, 0, 0, 0); - - setPlayConfigDetails (effect->numInputs, effect->numOutputs, - getSampleRate(), getBlockSize()); - - if (getNumPrograms() > 1) - setCurrentProgram (0); - else - dispatch (effSetProgram, 0, 0, 0, 0); - - int i; - for (i = effect->numInputs; --i >= 0;) - dispatch (effConnectInput, i, 1, 0, 0); - - for (i = effect->numOutputs; --i >= 0;) - dispatch (effConnectOutput, i, 1, 0, 0); - - updateStoredProgramNames(); - - wantsMidiMessages = dispatch (effCanDo, 0, 0, (void*) "receiveVstMidiEvent", 0) > 0; - - setLatencySamples (effect->initialDelay); -} - -void VSTPluginInstance::prepareToPlay (double sampleRate_, - int samplesPerBlockExpected) -{ - setPlayConfigDetails (effect->numInputs, effect->numOutputs, - sampleRate_, samplesPerBlockExpected); - - setLatencySamples (effect->initialDelay); - - vstHostTime.tempo = 120.0; - vstHostTime.timeSigNumerator = 4; - vstHostTime.timeSigDenominator = 4; - vstHostTime.sampleRate = sampleRate_; - vstHostTime.samplePos = 0; - vstHostTime.flags = kVstNanosValid; /*| kVstTransportPlaying | kVstTempoValid | kVstTimeSigValid*/; - - initialise(); - - if (initialised) - { - wantsMidiMessages = wantsMidiMessages - || (dispatch (effCanDo, 0, 0, (void*) "receiveVstMidiEvent", 0) > 0); - - if (wantsMidiMessages) - midiEventsToSend.ensureSize (256); - else - midiEventsToSend.freeEvents(); - - incomingMidi.clear(); - - dispatch (effSetSampleRate, 0, 0, 0, (float) sampleRate_); - dispatch (effSetBlockSize, 0, jmax (16, samplesPerBlockExpected), 0, 0); - - tempBuffer.setSize (jmax (1, effect->numOutputs), samplesPerBlockExpected); - - if (! isPowerOn) - setPower (true); - - // dodgy hack to force some plugins to initialise the sample rate.. - if ((! hasEditor()) && getNumParameters() > 0) - { - const float old = getParameter (0); - setParameter (0, (old < 0.5f) ? 1.0f : 0.0f); - setParameter (0, old); - } - - dispatch (effStartProcess, 0, 0, 0, 0); - } -} - -void VSTPluginInstance::releaseResources() -{ - if (initialised) - { - dispatch (effStopProcess, 0, 0, 0, 0); - setPower (false); - } - - tempBuffer.setSize (1, 1); - incomingMidi.clear(); - - midiEventsToSend.freeEvents(); -} - -void VSTPluginInstance::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - if (initialised) - { - AudioPlayHead* playHead = getPlayHead(); - - if (playHead != nullptr) - { - AudioPlayHead::CurrentPositionInfo position; - playHead->getCurrentPosition (position); - - vstHostTime.tempo = position.bpm; - vstHostTime.timeSigNumerator = position.timeSigNumerator; - vstHostTime.timeSigDenominator = position.timeSigDenominator; - vstHostTime.ppqPos = position.ppqPosition; - vstHostTime.barStartPos = position.ppqPositionOfLastBarStart; - vstHostTime.flags |= kVstTempoValid | kVstTimeSigValid | kVstPpqPosValid | kVstBarsValid; - - if (position.isPlaying) - vstHostTime.flags |= kVstTransportPlaying; - else - vstHostTime.flags &= ~kVstTransportPlaying; - } - - vstHostTime.nanoSeconds = getVSTHostTimeNanoseconds(); - - if (wantsMidiMessages) - { - midiEventsToSend.clear(); - midiEventsToSend.ensureSize (1); - - MidiBuffer::Iterator iter (midiMessages); - const uint8* midiData; - int numBytesOfMidiData, samplePosition; - - while (iter.getNextEvent (midiData, numBytesOfMidiData, samplePosition)) - { - midiEventsToSend.addEvent (midiData, numBytesOfMidiData, - jlimit (0, numSamples - 1, samplePosition)); - } - - try - { - effect->dispatcher (effect, effProcessEvents, 0, 0, midiEventsToSend.events, 0); - } - catch (...) - {} - } - - _clearfp(); - - if ((effect->flags & effFlagsCanReplacing) != 0) - { - try - { - effect->processReplacing (effect, buffer.getArrayOfChannels(), buffer.getArrayOfChannels(), numSamples); - } - catch (...) - {} - } - else - { - tempBuffer.setSize (effect->numOutputs, numSamples); - tempBuffer.clear(); - - try - { - effect->process (effect, buffer.getArrayOfChannels(), tempBuffer.getArrayOfChannels(), numSamples); - } - catch (...) - {} - - for (int i = effect->numOutputs; --i >= 0;) - buffer.copyFrom (i, 0, tempBuffer.getSampleData (i), numSamples); - } - } - else - { - // Not initialised, so just bypass.. - for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) - buffer.clear (i, 0, buffer.getNumSamples()); - } - - { - // copy any incoming midi.. - const ScopedLock sl (midiInLock); - - midiMessages.swapWith (incomingMidi); - incomingMidi.clear(); - } -} - -void VSTPluginInstance::handleMidiFromPlugin (const VstEvents* const events) -{ - if (events != nullptr) - { - const ScopedLock sl (midiInLock); - VSTMidiEventList::addEventsToMidiBuffer (events, incomingMidi); - } -} - -static Array activeVSTWindows; - -class VSTPluginWindow : public AudioProcessorEditor, - #if ! JUCE_MAC - public ComponentMovementWatcher, - #endif - public Timer -{ -public: - - VSTPluginWindow (VSTPluginInstance& plugin_) - : AudioProcessorEditor (&plugin_), - #if ! JUCE_MAC - ComponentMovementWatcher (this), - #endif - plugin (plugin_), - isOpen (false), - recursiveResize (false), - pluginWantsKeys (false), - pluginRefusesToResize (false), - alreadyInside (false) - { - #if JUCE_WINDOWS - sizeCheckCount = 0; - pluginHWND = 0; - #elif JUCE_LINUX - pluginWindow = None; - pluginProc = None; - #else - addAndMakeVisible (innerWrapper = new InnerWrapperComponent (this)); - #endif - - activeVSTWindows.add (this); - - setSize (1, 1); - setOpaque (true); - setVisible (true); - } - - ~VSTPluginWindow() - { - #if JUCE_MAC - innerWrapper = nullptr; - #else - closePluginWindow(); - #endif - - activeVSTWindows.removeValue (this); - plugin.editorBeingDeleted (this); - } - -#if ! JUCE_MAC - void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) - { - if (recursiveResize) - return; - - Component* const topComp = getTopLevelComponent(); - - if (topComp->getPeer() != nullptr) - { - const Point pos (topComp->getLocalPoint (this, Point())); - - recursiveResize = true; - - #if JUCE_WINDOWS - if (pluginHWND != 0) - MoveWindow (pluginHWND, pos.getX(), pos.getY(), getWidth(), getHeight(), TRUE); - #elif JUCE_LINUX - if (pluginWindow != 0) - { - XResizeWindow (display, pluginWindow, getWidth(), getHeight()); - XMoveWindow (display, pluginWindow, pos.getX(), pos.getY()); - XMapRaised (display, pluginWindow); - } - #endif - - recursiveResize = false; - } - } - - void componentVisibilityChanged() - { - if (isShowing()) - openPluginWindow(); - else - closePluginWindow(); - - componentMovedOrResized (true, true); - } - - void componentPeerChanged() - { - closePluginWindow(); - openPluginWindow(); - } -#endif - - bool keyStateChanged (bool) - { - return pluginWantsKeys; - } - - bool keyPressed (const KeyPress&) - { - return pluginWantsKeys; - } - -#if JUCE_MAC - void paint (Graphics& g) - { - g.fillAll (Colours::black); - } -#else - void paint (Graphics& g) - { - if (isOpen) - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - { - const Point pos (getScreenPosition() - peer->getScreenPosition()); - peer->addMaskedRegion (pos.getX(), pos.getY(), getWidth(), getHeight()); - - #if JUCE_LINUX - if (pluginWindow != 0) - { - const Rectangle clip (g.getClipBounds()); - - XEvent ev = { 0 }; - ev.xexpose.type = Expose; - ev.xexpose.display = display; - ev.xexpose.window = pluginWindow; - ev.xexpose.x = clip.getX(); - ev.xexpose.y = clip.getY(); - ev.xexpose.width = clip.getWidth(); - ev.xexpose.height = clip.getHeight(); - - sendEventToChild (&ev); - } - #endif - } - } - else - { - g.fillAll (Colours::black); - } - } -#endif - - void timerCallback() - { - #if JUCE_WINDOWS - if (--sizeCheckCount <= 0) - { - sizeCheckCount = 10; - - checkPluginWindowSize(); - } - #endif - - try - { - static bool reentrant = false; - - if (! reentrant) - { - reentrant = true; - plugin.dispatch (effEditIdle, 0, 0, 0, 0); - reentrant = false; - } - } - catch (...) - {} - } - - void mouseDown (const MouseEvent& e) - { - #if JUCE_LINUX - if (pluginWindow == 0) - return; - - toFront (true); - - XEvent ev = { 0 }; - ev.xbutton.display = display; - ev.xbutton.type = ButtonPress; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXButtonModifiers (e, ev); - - sendEventToChild (&ev); - - #elif JUCE_WINDOWS - (void) e; - - toFront (true); - #endif - } - - void broughtToFront() - { - activeVSTWindows.removeValue (this); - activeVSTWindows.add (this); - - #if JUCE_MAC - dispatch (effEditTop, 0, 0, 0, 0); - #endif - } - -private: - VSTPluginInstance& plugin; - bool isOpen, recursiveResize; - bool pluginWantsKeys, pluginRefusesToResize, alreadyInside; - - #if JUCE_WINDOWS - HWND pluginHWND; - void* originalWndProc; - int sizeCheckCount; - #elif JUCE_LINUX - Window pluginWindow; - EventProcPtr pluginProc; - #endif - -#if JUCE_MAC - void openPluginWindow (WindowRef parentWindow) - { - if (isOpen || parentWindow == 0) - return; - - isOpen = true; - - ERect* rect = nullptr; - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effEditOpen, 0, 0, parentWindow, 0); - - // do this before and after like in the steinberg example - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code - - // Install keyboard hooks - pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0); - - // double-check it's not too tiny - int w = 250, h = 150; - - if (rect != nullptr) - { - w = rect->right - rect->left; - h = rect->bottom - rect->top; - - if (w == 0 || h == 0) - { - w = 250; - h = 150; - } - } - - w = jmax (w, 32); - h = jmax (h, 32); - - setSize (w, h); - - startTimer (18 + JUCE_NAMESPACE::Random::getSystemRandom().nextInt (5)); - repaint(); - } - -#else - void openPluginWindow() - { - if (isOpen || getWindowHandle() == 0) - return; - - log ("Opening VST UI: " + plugin.name); - isOpen = true; - - ERect* rect = nullptr; - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effEditOpen, 0, 0, getWindowHandle(), 0); - - // do this before and after like in the steinberg example - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code - - // Install keyboard hooks - pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0); - - #if JUCE_WINDOWS - originalWndProc = 0; - pluginHWND = GetWindow ((HWND) getWindowHandle(), GW_CHILD); - - if (pluginHWND == 0) - { - isOpen = false; - setSize (300, 150); - return; - } - - #pragma warning (push) - #pragma warning (disable: 4244) - - originalWndProc = (void*) GetWindowLongPtr (pluginHWND, GWLP_WNDPROC); - - if (! pluginWantsKeys) - SetWindowLongPtr (pluginHWND, GWLP_WNDPROC, (LONG_PTR) vstHookWndProc); - - #pragma warning (pop) - - int w, h; - RECT r; - GetWindowRect (pluginHWND, &r); - w = r.right - r.left; - h = r.bottom - r.top; - - if (rect != nullptr) - { - const int rw = rect->right - rect->left; - const int rh = rect->bottom - rect->top; - - if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && rw != w && rh != h) - || ((w == 0 && rw > 0) || (h == 0 && rh > 0))) - { - // very dodgy logic to decide which size is right. - if (abs (rw - w) > 350 || abs (rh - h) > 350) - { - SetWindowPos (pluginHWND, 0, - 0, 0, rw, rh, - SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER); - - GetWindowRect (pluginHWND, &r); - - w = r.right - r.left; - h = r.bottom - r.top; - - pluginRefusesToResize = (w != rw) || (h != rh); - - w = rw; - h = rh; - } - } - } - - #elif JUCE_LINUX - pluginWindow = getChildWindow ((Window) getWindowHandle()); - - if (pluginWindow != 0) - pluginProc = (EventProcPtr) getPropertyFromXWindow (pluginWindow, - XInternAtom (display, "_XEventProc", False)); - - int w = 250, h = 150; - - if (rect != nullptr) - { - w = rect->right - rect->left; - h = rect->bottom - rect->top; - - if (w == 0 || h == 0) - { - w = 250; - h = 150; - } - } - - if (pluginWindow != 0) - XMapRaised (display, pluginWindow); - #endif - - // double-check it's not too tiny - w = jmax (w, 32); - h = jmax (h, 32); - - setSize (w, h); - - #if JUCE_WINDOWS - checkPluginWindowSize(); - #endif - - startTimer (18 + JUCE_NAMESPACE::Random::getSystemRandom().nextInt (5)); - repaint(); - } -#endif - -#if ! JUCE_MAC - void closePluginWindow() - { - if (isOpen) - { - log ("Closing VST UI: " + plugin.getName()); - isOpen = false; - - dispatch (effEditClose, 0, 0, 0, 0); - - #if JUCE_WINDOWS - #pragma warning (push) - #pragma warning (disable: 4244) - - if (pluginHWND != 0 && IsWindow (pluginHWND)) - SetWindowLongPtr (pluginHWND, GWLP_WNDPROC, (LONG_PTR) originalWndProc); - - #pragma warning (pop) - - stopTimer(); - - if (pluginHWND != 0 && IsWindow (pluginHWND)) - DestroyWindow (pluginHWND); - - pluginHWND = 0; - #elif JUCE_LINUX - stopTimer(); - pluginWindow = 0; - pluginProc = 0; - #endif - } - } -#endif - - int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) - { - return plugin.dispatch (opcode, index, value, ptr, opt); - } - -#if JUCE_WINDOWS - void checkPluginWindowSize() - { - RECT r; - GetWindowRect (pluginHWND, &r); - const int w = r.right - r.left; - const int h = r.bottom - r.top; - - if (isShowing() && w > 0 && h > 0 - && (w != getWidth() || h != getHeight()) - && ! pluginRefusesToResize) - { - setSize (w, h); - sizeCheckCount = 0; - } - } - - // hooks to get keyboard events from VST windows.. - static LRESULT CALLBACK vstHookWndProc (HWND hW, UINT message, WPARAM wParam, LPARAM lParam) - { - for (int i = activeVSTWindows.size(); --i >= 0;) - { - const VSTPluginWindow* const w = activeVSTWindows.getUnchecked (i); - - if (w->pluginHWND == hW) - { - if (message == WM_CHAR - || message == WM_KEYDOWN - || message == WM_SYSKEYDOWN - || message == WM_KEYUP - || message == WM_SYSKEYUP - || message == WM_APPCOMMAND) - { - SendMessage ((HWND) w->getTopLevelComponent()->getWindowHandle(), - message, wParam, lParam); - } - - return CallWindowProc ((WNDPROC) (w->originalWndProc), - (HWND) w->pluginHWND, - message, - wParam, - lParam); - } - } - - return DefWindowProc (hW, message, wParam, lParam); - } -#endif - -#if JUCE_LINUX - - // overload mouse/keyboard events to forward them to the plugin's inner window.. - void sendEventToChild (XEvent* event) - { - if (pluginProc != 0) - { - // if the plugin publishes an event procedure, pass the event directly.. - pluginProc (event); - } - else if (pluginWindow != 0) - { - // if the plugin has a window, then send the event to the window so that - // its message thread will pick it up.. - XSendEvent (display, pluginWindow, False, 0L, event); - XFlush (display); - } - } - - void mouseEnter (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xcrossing.display = display; - ev.xcrossing.type = EnterNotify; - ev.xcrossing.window = pluginWindow; - ev.xcrossing.root = RootWindow (display, DefaultScreen (display)); - ev.xcrossing.time = CurrentTime; - ev.xcrossing.x = e.x; - ev.xcrossing.y = e.y; - ev.xcrossing.x_root = e.getScreenX(); - ev.xcrossing.y_root = e.getScreenY(); - ev.xcrossing.mode = NotifyNormal; // NotifyGrab, NotifyUngrab - ev.xcrossing.detail = NotifyAncestor; // NotifyVirtual, NotifyInferior, NotifyNonlinear,NotifyNonlinearVirtual - - translateJuceToXCrossingModifiers (e, ev); - - sendEventToChild (&ev); - } - } - - void mouseExit (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xcrossing.display = display; - ev.xcrossing.type = LeaveNotify; - ev.xcrossing.window = pluginWindow; - ev.xcrossing.root = RootWindow (display, DefaultScreen (display)); - ev.xcrossing.time = CurrentTime; - ev.xcrossing.x = e.x; - ev.xcrossing.y = e.y; - ev.xcrossing.x_root = e.getScreenX(); - ev.xcrossing.y_root = e.getScreenY(); - ev.xcrossing.mode = NotifyNormal; // NotifyGrab, NotifyUngrab - ev.xcrossing.detail = NotifyAncestor; // NotifyVirtual, NotifyInferior, NotifyNonlinear,NotifyNonlinearVirtual - ev.xcrossing.focus = hasKeyboardFocus (true); // TODO - yes ? - - translateJuceToXCrossingModifiers (e, ev); - - sendEventToChild (&ev); - } - } - - void mouseMove (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xmotion.display = display; - ev.xmotion.type = MotionNotify; - ev.xmotion.window = pluginWindow; - ev.xmotion.root = RootWindow (display, DefaultScreen (display)); - ev.xmotion.time = CurrentTime; - ev.xmotion.is_hint = NotifyNormal; - ev.xmotion.x = e.x; - ev.xmotion.y = e.y; - ev.xmotion.x_root = e.getScreenX(); - ev.xmotion.y_root = e.getScreenY(); - - sendEventToChild (&ev); - } - } - - void mouseDrag (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xmotion.display = display; - ev.xmotion.type = MotionNotify; - ev.xmotion.window = pluginWindow; - ev.xmotion.root = RootWindow (display, DefaultScreen (display)); - ev.xmotion.time = CurrentTime; - ev.xmotion.x = e.x ; - ev.xmotion.y = e.y; - ev.xmotion.x_root = e.getScreenX(); - ev.xmotion.y_root = e.getScreenY(); - ev.xmotion.is_hint = NotifyNormal; - - translateJuceToXMotionModifiers (e, ev); - sendEventToChild (&ev); - } - } - - void mouseUp (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xbutton.display = display; - ev.xbutton.type = ButtonRelease; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXButtonModifiers (e, ev); - sendEventToChild (&ev); - } - } - - void mouseWheelMove (const MouseEvent& e, - float incrementX, - float incrementY) - { - if (pluginWindow != 0) - { - XEvent ev = { 0 }; - ev.xbutton.display = display; - ev.xbutton.type = ButtonPress; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXMouseWheelModifiers (e, incrementY, ev); - sendEventToChild (&ev); - - // TODO - put a usleep here ? - - ev.xbutton.type = ButtonRelease; - sendEventToChild (&ev); - } - } -#endif - -#if JUCE_MAC - -#if ! JUCE_SUPPORT_CARBON - #error "To build VSTs, you need to enable the JUCE_SUPPORT_CARBON flag in your config!" -#endif - - class InnerWrapperComponent : public CarbonViewWrapperComponent - { - public: - InnerWrapperComponent (VSTPluginWindow* const owner_) - : owner (owner_), - alreadyInside (false) - { - } - - ~InnerWrapperComponent() - { - deleteWindow(); - } - - HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) - { - owner->openPluginWindow (windowRef); - return 0; - } - - void removeView (HIViewRef) - { - owner->dispatch (effEditClose, 0, 0, 0, 0); - owner->dispatch (effEditSleep, 0, 0, 0, 0); - } - - bool getEmbeddedViewSize (int& w, int& h) - { - ERect* rect = nullptr; - owner->dispatch (effEditGetRect, 0, 0, &rect, 0); - w = rect->right - rect->left; - h = rect->bottom - rect->top; - return true; - } - - void mouseDown (int x, int y) - { - if (! alreadyInside) - { - alreadyInside = true; - getTopLevelComponent()->toFront (true); - owner->dispatch (effEditMouse, x, y, 0, 0); - alreadyInside = false; - } - else - { - PostEvent (::mouseDown, 0); - } - } - - void paint() - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - { - const Point pos (getScreenPosition() - peer->getScreenPosition()); - ERect r; - r.left = pos.getX(); - r.right = r.left + getWidth(); - r.top = pos.getY(); - r.bottom = r.top + getHeight(); - - owner->dispatch (effEditDraw, 0, 0, &r, 0); - } - } - - private: - VSTPluginWindow* const owner; - bool alreadyInside; - }; - - friend class InnerWrapperComponent; - ScopedPointer innerWrapper; - - void resized() - { - innerWrapper->setSize (getWidth(), getHeight()); - } -#endif - -private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow); -}; - -AudioProcessorEditor* VSTPluginInstance::createEditor() -{ - if (hasEditor()) - return new VSTPluginWindow (*this); - - return nullptr; -} - -void VSTPluginInstance::handleAsyncUpdate() -{ - // indicates that something about the plugin has changed.. - updateHostDisplay(); -} - -bool VSTPluginInstance::restoreProgramSettings (const fxProgram* const prog) -{ - if (vst_swap (prog->chunkMagic) == 'CcnK' && vst_swap (prog->fxMagic) == 'FxCk') - { - changeProgramName (getCurrentProgram(), prog->prgName); - - for (int i = 0; i < vst_swap (prog->numParams); ++i) - setParameter (i, vst_swapFloat (prog->params[i])); - - return true; - } - - return false; -} - -bool VSTPluginInstance::loadFromFXBFile (const void* const data, - const int dataSize) -{ - if (dataSize < 28) - return false; - - const fxSet* const set = (const fxSet*) data; - - if ((vst_swap (set->chunkMagic) != 'CcnK' && vst_swap (set->chunkMagic) != 'KncC') - || vst_swap (set->version) > fxbVersionNum) - return false; - - if (vst_swap (set->fxMagic) == 'FxBk') - { - // bank of programs - if (vst_swap (set->numPrograms) >= 0) - { - const int oldProg = getCurrentProgram(); - const int numParams = vst_swap (((const fxProgram*) (set->programs))->numParams); - const int progLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - - for (int i = 0; i < vst_swap (set->numPrograms); ++i) - { - if (i != oldProg) - { - const fxProgram* const prog = (const fxProgram*) (((const char*) (set->programs)) + i * progLen); - if (((const char*) prog) - ((const char*) set) >= dataSize) - return false; - - if (vst_swap (set->numPrograms) > 0) - setCurrentProgram (i); - - if (! restoreProgramSettings (prog)) - return false; - } - } - - if (vst_swap (set->numPrograms) > 0) - setCurrentProgram (oldProg); - - const fxProgram* const prog = (const fxProgram*) (((const char*) (set->programs)) + oldProg * progLen); - if (((const char*) prog) - ((const char*) set) >= dataSize) - return false; - - if (! restoreProgramSettings (prog)) - return false; - } - } - else if (vst_swap (set->fxMagic) == 'FxCk') - { - // single program - const fxProgram* const prog = (const fxProgram*) data; - - if (vst_swap (prog->chunkMagic) != 'CcnK') - return false; - - changeProgramName (getCurrentProgram(), prog->prgName); - - for (int i = 0; i < vst_swap (prog->numParams); ++i) - setParameter (i, vst_swapFloat (prog->params[i])); - } - else if (vst_swap (set->fxMagic) == 'FBCh' || vst_swap (set->fxMagic) == 'hCBF') - { - // non-preset chunk - const fxChunkSet* const cset = (const fxChunkSet*) data; - - if (vst_swap (cset->chunkSize) + sizeof (fxChunkSet) - 8 > (unsigned int) dataSize) - return false; - - setChunkData (cset->chunk, vst_swap (cset->chunkSize), false); - } - else if (vst_swap (set->fxMagic) == 'FPCh' || vst_swap (set->fxMagic) == 'hCPF') - { - // preset chunk - const fxProgramSet* const cset = (const fxProgramSet*) data; - - if (vst_swap (cset->chunkSize) + sizeof (fxProgramSet) - 8 > (unsigned int) dataSize) - return false; - - setChunkData (cset->chunk, vst_swap (cset->chunkSize), true); - - changeProgramName (getCurrentProgram(), cset->name); - } - else - { - return false; - } - - return true; -} - -void VSTPluginInstance::setParamsInProgramBlock (fxProgram* const prog) -{ - const int numParams = getNumParameters(); - - prog->chunkMagic = vst_swap ('CcnK'); - prog->byteSize = 0; - prog->fxMagic = vst_swap ('FxCk'); - prog->version = vst_swap (fxbVersionNum); - prog->fxID = vst_swap (getUID()); - prog->fxVersion = vst_swap (getVersionNumber()); - prog->numParams = vst_swap (numParams); - - getCurrentProgramName().copyToUTF8 (prog->prgName, sizeof (prog->prgName) - 1); - - for (int i = 0; i < numParams; ++i) - prog->params[i] = vst_swapFloat (getParameter (i)); -} - -bool VSTPluginInstance::saveToFXBFile (MemoryBlock& dest, bool isFXB, int maxSizeMB) -{ - const int numPrograms = getNumPrograms(); - const int numParams = getNumParameters(); - - if (usesChunks()) - { - if (isFXB) - { - MemoryBlock chunk; - getChunkData (chunk, false, maxSizeMB); - - const size_t totalLen = sizeof (fxChunkSet) + chunk.getSize() - 8; - dest.setSize (totalLen, true); - - fxChunkSet* const set = (fxChunkSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FBCh'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - set->chunkSize = vst_swap ((long) chunk.getSize()); - - chunk.copyTo (set->chunk, 0, chunk.getSize()); - } - else - { - MemoryBlock chunk; - getChunkData (chunk, true, maxSizeMB); - - const size_t totalLen = sizeof (fxProgramSet) + chunk.getSize() - 8; - dest.setSize (totalLen, true); - - fxProgramSet* const set = (fxProgramSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FPCh'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - set->chunkSize = vst_swap ((long) chunk.getSize()); - - getCurrentProgramName().copyToUTF8 (set->name, sizeof (set->name) - 1); - chunk.copyTo (set->chunk, 0, chunk.getSize()); - } - } - else - { - if (isFXB) - { - const int progLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - const int len = (sizeof (fxSet) - sizeof (fxProgram)) + progLen * jmax (1, numPrograms); - dest.setSize (len, true); - - fxSet* const set = (fxSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FxBk'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - - const int oldProgram = getCurrentProgram(); - MemoryBlock oldSettings; - createTempParameterStore (oldSettings); - - setParamsInProgramBlock ((fxProgram*) (((char*) (set->programs)) + oldProgram * progLen)); - - for (int i = 0; i < numPrograms; ++i) - { - if (i != oldProgram) - { - setCurrentProgram (i); - setParamsInProgramBlock ((fxProgram*) (((char*) (set->programs)) + i * progLen)); - } - } - - setCurrentProgram (oldProgram); - restoreFromTempParameterStore (oldSettings); - } - else - { - const int totalLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - dest.setSize (totalLen, true); - - setParamsInProgramBlock ((fxProgram*) dest.getData()); - } - } - - return true; -} - -void VSTPluginInstance::getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const -{ - if (usesChunks()) - { - void* data = nullptr; - const int bytes = dispatch (effGetChunk, isPreset ? 1 : 0, 0, &data, 0.0f); - - if (data != nullptr && bytes <= maxSizeMB * 1024 * 1024) - { - mb.setSize (bytes); - mb.copyFrom (data, 0, bytes); - } - } -} - -void VSTPluginInstance::setChunkData (const char* data, int size, bool isPreset) -{ - if (size > 0 && usesChunks()) - { - dispatch (effSetChunk, isPreset ? 1 : 0, size, (void*) data, 0.0f); - - if (! isPreset) - updateStoredProgramNames(); - } -} - -void VSTPluginInstance::timerCallback() -{ - if (dispatch (effIdle, 0, 0, 0, 0) == 0) - stopTimer(); -} - -int VSTPluginInstance::dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) const -{ - int result = 0; - - if (effect != nullptr) - { - const ScopedLock sl (lock); - const IdleCallRecursionPreventer icrp; - - try - { - #if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - #endif - - result = effect->dispatcher (effect, opcode, index, value, ptr, opt); - - #if JUCE_MAC - module->resFileId = CurResFile(); - #endif - } - catch (...) - {} - } - - return result; -} - -namespace -{ - static const int defaultVSTSampleRateValue = 16384; - static const int defaultVSTBlockSizeValue = 512; - - // handles non plugin-specific callbacks.. - VstIntPtr handleGeneralCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt) - { - (void) index; - (void) value; - (void) opt; - - switch (opcode) - { - case audioMasterCanDo: - { - static const char* canDos[] = { "supplyIdle", - "sendVstEvents", - "sendVstMidiEvent", - "sendVstTimeInfo", - "receiveVstEvents", - "receiveVstMidiEvent", - "supportShell", - "shellCategory" }; - - for (int i = 0; i < numElementsInArray (canDos); ++i) - if (strcmp (canDos[i], (const char*) ptr) == 0) - return 1; - - return 0; - } - - case audioMasterVersion: return 0x2400; - case audioMasterCurrentId: return shellUIDToCreate; - case audioMasterGetNumAutomatableParameters: return 0; - case audioMasterGetAutomationState: return 1; - case audioMasterGetVendorVersion: return 0x0101; - - case audioMasterGetVendorString: - case audioMasterGetProductString: - { - String hostName ("Juce VST Host"); - - if (JUCEApplication::getInstance() != nullptr) - hostName = JUCEApplication::getInstance()->getApplicationName(); - - hostName.copyToUTF8 ((char*) ptr, jmin (kVstMaxVendorStrLen, kVstMaxProductStrLen) - 1); - break; - } - - case audioMasterGetSampleRate: return (VstIntPtr) defaultVSTSampleRateValue; - case audioMasterGetBlockSize: return (VstIntPtr) defaultVSTBlockSizeValue; - case audioMasterSetOutputSampleRate: return 0; - - default: - DBG ("*** Unhandled VST Callback: " + String ((int) opcode)); - break; - } - - return 0; - } -} - -// handles callbacks for a specific plugin -VstIntPtr VSTPluginInstance::handleCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt) -{ - switch (opcode) - { - case audioMasterAutomate: - sendParamChangeMessageToListeners (index, opt); - break; - - case audioMasterProcessEvents: - handleMidiFromPlugin ((const VstEvents*) ptr); - break; - - case audioMasterGetTime: - #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4311) - #endif - - return (VstIntPtr) &vstHostTime; - - #if JUCE_MSVC - #pragma warning (pop) - #endif - break; - - case audioMasterIdle: - if (insideVSTCallback == 0 && MessageManager::getInstance()->isThisTheMessageThread()) - { - const IdleCallRecursionPreventer icrp; - - #if JUCE_MAC - if (getActiveEditor() != nullptr) - dispatch (effEditIdle, 0, 0, 0, 0); - #endif - - juce_callAnyTimersSynchronously(); - - handleUpdateNowIfNeeded(); - - for (int i = ComponentPeer::getNumPeers(); --i >= 0;) - ComponentPeer::getPeer (i)->performAnyPendingRepaintsNow(); - } - break; - - case audioMasterUpdateDisplay: - triggerAsyncUpdate(); - break; - - case audioMasterTempoAt: - // returns (10000 * bpm) - break; - - case audioMasterNeedIdle: - startTimer (50); - break; - - case audioMasterSizeWindow: - if (getActiveEditor() != nullptr) - getActiveEditor()->setSize (index, value); - - return 1; - - case audioMasterGetSampleRate: - return (VstIntPtr) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue); - - case audioMasterGetBlockSize: - return (VstIntPtr) (getBlockSize() > 0 ? getBlockSize() : defaultVSTBlockSizeValue); - - case audioMasterWantMidi: - wantsMidiMessages = true; - break; - - case audioMasterGetDirectory: - #if JUCE_MAC - return (VstIntPtr) (void*) &module->parentDirFSSpec; - #else - return (VstIntPtr) (pointer_sized_uint) module->fullParentDirectoryPathName.toUTF8().getAddress(); - #endif - - case audioMasterGetAutomationState: - // returns 0: not supported, 1: off, 2:read, 3:write, 4:read/write - break; - - // none of these are handled (yet).. - case audioMasterBeginEdit: - case audioMasterEndEdit: - case audioMasterSetTime: - case audioMasterPinConnected: - case audioMasterGetParameterQuantization: - case audioMasterIOChanged: - case audioMasterGetInputLatency: - case audioMasterGetOutputLatency: - case audioMasterGetPreviousPlug: - case audioMasterGetNextPlug: - case audioMasterWillReplaceOrAccumulate: - case audioMasterGetCurrentProcessLevel: - case audioMasterOfflineStart: - case audioMasterOfflineRead: - case audioMasterOfflineWrite: - case audioMasterOfflineGetCurrentPass: - case audioMasterOfflineGetCurrentMetaPass: - case audioMasterVendorSpecific: - case audioMasterSetIcon: - case audioMasterGetLanguage: - case audioMasterOpenWindow: - case audioMasterCloseWindow: - break; - - default: - return handleGeneralCallback (opcode, index, value, ptr, opt); - } - - return 0; -} - -// entry point for all callbacks from the plugin -static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt) -{ - try - { - if (effect != nullptr && effect->resvd2 != 0) - { - return ((VSTPluginInstance*)(effect->resvd2)) - ->handleCallback (opcode, index, value, ptr, opt); - } - - return handleGeneralCallback (opcode, index, value, ptr, opt); - } - catch (...) - { - return 0; - } -} - -const String VSTPluginInstance::getVersion() const -{ - unsigned int v = dispatch (effGetVendorVersion, 0, 0, 0, 0); - - String s; - - if (v == 0 || v == -1) - v = getVersionNumber(); - - if (v != 0) - { - int versionBits[4]; - int n = 0; - - while (v != 0) - { - versionBits [n++] = (v & 0xff); - v >>= 8; - } - - s << 'V'; - - while (n > 0) - { - s << versionBits [--n]; - - if (n > 0) - s << '.'; - } - } - - return s; -} - -int VSTPluginInstance::getUID() const -{ - int uid = effect != nullptr ? effect->uniqueID : 0; - - if (uid == 0) - uid = module->file.hashCode(); - - return uid; -} - -const String VSTPluginInstance::getCategory() const -{ - const char* result = nullptr; - - switch (dispatch (effGetPlugCategory, 0, 0, 0, 0)) - { - case kPlugCategEffect: result = "Effect"; break; - case kPlugCategSynth: result = "Synth"; break; - case kPlugCategAnalysis: result = "Anaylsis"; break; - case kPlugCategMastering: result = "Mastering"; break; - case kPlugCategSpacializer: result = "Spacial"; break; - case kPlugCategRoomFx: result = "Reverb"; break; - case kPlugSurroundFx: result = "Surround"; break; - case kPlugCategRestoration: result = "Restoration"; break; - case kPlugCategGenerator: result = "Tone generation"; break; - default: break; - } - - return result; -} - -float VSTPluginInstance::getParameter (int index) -{ - if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams)) - { - try - { - const ScopedLock sl (lock); - return effect->getParameter (effect, index); - } - catch (...) - { - } - } - - return 0.0f; -} - -void VSTPluginInstance::setParameter (int index, float newValue) -{ - if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams)) - { - try - { - const ScopedLock sl (lock); - - if (effect->getParameter (effect, index) != newValue) - effect->setParameter (effect, index, newValue); - } - catch (...) - { - } - } -} - -const String VSTPluginInstance::getParameterName (int index) -{ - if (effect != nullptr) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256] = { 0 }; - dispatch (effGetParamName, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -const String VSTPluginInstance::getParameterLabel (int index) const -{ - if (effect != nullptr) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256] = { 0 }; - dispatch (effGetParamLabel, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -const String VSTPluginInstance::getParameterText (int index) -{ - if (effect != nullptr) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256] = { 0 }; - dispatch (effGetParamDisplay, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -bool VSTPluginInstance::isParameterAutomatable (int index) const -{ - if (effect != nullptr) - { - jassert (index >= 0 && index < effect->numParams); - return dispatch (effCanBeAutomated, index, 0, 0, 0) != 0; - } - - return false; -} - -void VSTPluginInstance::createTempParameterStore (MemoryBlock& dest) -{ - dest.setSize (64 + 4 * getNumParameters()); - dest.fillWith (0); - - getCurrentProgramName().copyToUTF8 ((char*) dest.getData(), 63); - - float* const p = (float*) (((char*) dest.getData()) + 64); - for (int i = 0; i < getNumParameters(); ++i) - p[i] = getParameter(i); -} - -void VSTPluginInstance::restoreFromTempParameterStore (const MemoryBlock& m) -{ - changeProgramName (getCurrentProgram(), (const char*) m.getData()); - - float* p = (float*) (((char*) m.getData()) + 64); - for (int i = 0; i < getNumParameters(); ++i) - setParameter (i, p[i]); -} - -void VSTPluginInstance::setCurrentProgram (int newIndex) -{ - if (getNumPrograms() > 0 && newIndex != getCurrentProgram()) - dispatch (effSetProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), 0, 0); -} - -const String VSTPluginInstance::getProgramName (int index) -{ - if (index == getCurrentProgram()) - { - return getCurrentProgramName(); - } - else if (effect != nullptr) - { - char nm [256] = { 0 }; - - if (dispatch (effGetProgramNameIndexed, - jlimit (0, getNumPrograms(), index), - -1, nm, 0) != 0) - { - return String (nm).trim(); - } - } - - return programNames [index]; -} - -void VSTPluginInstance::changeProgramName (int index, const String& newName) -{ - if (index == getCurrentProgram()) - { - if (getNumPrograms() > 0 && newName != getCurrentProgramName()) - dispatch (effSetProgramName, 0, 0, (void*) newName.substring (0, 24).toUTF8().getAddress(), 0.0f); - } - else - { - jassertfalse; // xxx not implemented! - } -} - -void VSTPluginInstance::updateStoredProgramNames() -{ - if (effect != nullptr && getNumPrograms() > 0) - { - char nm [256] = { 0 }; - - // only do this if the plugin can't use indexed names.. - if (dispatch (effGetProgramNameIndexed, 0, -1, nm, 0) == 0) - { - const int oldProgram = getCurrentProgram(); - MemoryBlock oldSettings; - createTempParameterStore (oldSettings); - - for (int i = 0; i < getNumPrograms(); ++i) - { - setCurrentProgram (i); - getCurrentProgramName(); // (this updates the list) - } - - setCurrentProgram (oldProgram); - restoreFromTempParameterStore (oldSettings); - } - } -} - -const String VSTPluginInstance::getCurrentProgramName() -{ - if (effect != nullptr) - { - char nm [256] = { 0 }; - dispatch (effGetProgramName, 0, 0, nm, 0); - - const int index = getCurrentProgram(); - if (programNames[index].isEmpty()) - { - while (programNames.size() < index) - programNames.add (String::empty); - - programNames.set (index, String (nm).trim()); - } - - return String (nm).trim(); - } - - return String::empty; -} - -const String VSTPluginInstance::getInputChannelName (int index) const -{ - if (index >= 0 && index < getNumInputChannels()) - { - VstPinProperties pinProps; - if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) - return String (pinProps.label, sizeof (pinProps.label)); - } - - return String::empty; -} - -bool VSTPluginInstance::isInputChannelStereoPair (int index) const -{ - if (index < 0 || index >= getNumInputChannels()) - return false; - - VstPinProperties pinProps; - if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) - return (pinProps.flags & kVstPinIsStereo) != 0; - - return true; -} - -const String VSTPluginInstance::getOutputChannelName (int index) const -{ - if (index >= 0 && index < getNumOutputChannels()) - { - VstPinProperties pinProps; - if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) - return String (pinProps.label, sizeof (pinProps.label)); - } - - return String::empty; -} - -bool VSTPluginInstance::isOutputChannelStereoPair (int index) const -{ - if (index < 0 || index >= getNumOutputChannels()) - return false; - - VstPinProperties pinProps; - if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) - return (pinProps.flags & kVstPinIsStereo) != 0; - - return true; -} - -void VSTPluginInstance::setPower (const bool on) -{ - dispatch (effMainsChanged, 0, on ? 1 : 0, 0, 0); - isPowerOn = on; -} - -const int defaultMaxSizeMB = 64; - -void VSTPluginInstance::getStateInformation (MemoryBlock& destData) -{ - saveToFXBFile (destData, true, defaultMaxSizeMB); -} - -void VSTPluginInstance::getCurrentProgramStateInformation (MemoryBlock& destData) -{ - saveToFXBFile (destData, false, defaultMaxSizeMB); -} - -void VSTPluginInstance::setStateInformation (const void* data, int sizeInBytes) -{ - loadFromFXBFile (data, sizeInBytes); -} - -void VSTPluginInstance::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - loadFromFXBFile (data, sizeInBytes); -} - -VSTPluginFormat::VSTPluginFormat() -{ -} - -VSTPluginFormat::~VSTPluginFormat() -{ -} - -void VSTPluginFormat::findAllTypesForFile (OwnedArray & results, - const String& fileOrIdentifier) -{ - if (! fileMightContainThisPluginType (fileOrIdentifier)) - return; - - PluginDescription desc; - desc.fileOrIdentifier = fileOrIdentifier; - desc.uid = 0; - - ScopedPointer instance (dynamic_cast (createInstanceFromDescription (desc))); - - if (instance == 0) - return; - - try - { - #if JUCE_MAC - if (instance->module->resFileId != 0) - UseResFile (instance->module->resFileId); - #endif - - instance->fillInPluginDescription (desc); - - VstPlugCategory category = (VstPlugCategory) instance->dispatch (effGetPlugCategory, 0, 0, 0, 0); - - if (category != kPlugCategShell) - { - // Normal plugin... - results.add (new PluginDescription (desc)); - - instance->dispatch (effOpen, 0, 0, 0, 0); - } - else - { - // It's a shell plugin, so iterate all the subtypes... - for (;;) - { - char shellEffectName [64] = { 0 }; - const int uid = instance->dispatch (effShellGetNextPlugin, 0, 0, shellEffectName, 0); - - if (uid == 0) - { - break; - } - else - { - desc.uid = uid; - desc.name = shellEffectName; - desc.descriptiveName = shellEffectName; - - bool alreadyThere = false; - - for (int i = results.size(); --i >= 0;) - { - PluginDescription* const d = results.getUnchecked(i); - - if (d->isDuplicateOf (desc)) - { - alreadyThere = true; - break; - } - } - - if (! alreadyThere) - results.add (new PluginDescription (desc)); - } - } - } - } - catch (...) - { - // crashed while loading... - } -} - -AudioPluginInstance* VSTPluginFormat::createInstanceFromDescription (const PluginDescription& desc) -{ - ScopedPointer result; - - if (fileMightContainThisPluginType (desc.fileOrIdentifier)) - { - File file (desc.fileOrIdentifier); - - const File previousWorkingDirectory (File::getCurrentWorkingDirectory()); - file.getParentDirectory().setAsCurrentWorkingDirectory(); - - const ReferenceCountedObjectPtr module (ModuleHandle::findOrCreateModule (file)); - - if (module != nullptr) - { - shellUIDToCreate = desc.uid; - - result = new VSTPluginInstance (module); - - if (result->effect != nullptr) - { - result->effect->resvd2 = (VstIntPtr) (pointer_sized_int) (VSTPluginInstance*) result; - result->initialise(); - } - else - { - result = nullptr; - } - } - - previousWorkingDirectory.setAsCurrentWorkingDirectory(); - } - - return result.release(); -} - -bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier) -{ - const File f (fileOrIdentifier); - - #if JUCE_MAC - if (f.isDirectory() && f.hasFileExtension (".vst")) - return true; - - #if JUCE_PPC - FSRef fileRef; - if (makeFSRefFromPath (&fileRef, f.getFullPathName())) - { - const short resFileId = FSOpenResFile (&fileRef, fsRdPerm); - - if (resFileId != -1) - { - const int numEffects = Count1Resources ('aEff'); - CloseResFile (resFileId); - - if (numEffects > 0) - return true; - } - } - #endif - - return false; - #elif JUCE_WINDOWS - return f.existsAsFile() && f.hasFileExtension (".dll"); - #elif JUCE_LINUX - return f.existsAsFile() && f.hasFileExtension (".so"); - #endif -} - -String VSTPluginFormat::getNameOfPluginFromIdentifier (const String& fileOrIdentifier) -{ - return fileOrIdentifier; -} - -bool VSTPluginFormat::doesPluginStillExist (const PluginDescription& desc) -{ - return File (desc.fileOrIdentifier).exists(); -} - -StringArray VSTPluginFormat::searchPathsForPlugins (const FileSearchPath& directoriesToSearch, const bool recursive) -{ - StringArray results; - - for (int j = 0; j < directoriesToSearch.getNumPaths(); ++j) - recursiveFileSearch (results, directoriesToSearch [j], recursive); - - return results; -} - -void VSTPluginFormat::recursiveFileSearch (StringArray& results, const File& dir, const bool recursive) -{ - // avoid allowing the dir iterator to be recursive, because we want to avoid letting it delve inside - // .component or .vst directories. - DirectoryIterator iter (dir, false, "*", File::findFilesAndDirectories); - - while (iter.next()) - { - const File f (iter.getFile()); - bool isPlugin = false; - - if (fileMightContainThisPluginType (f.getFullPathName())) - { - isPlugin = true; - results.add (f.getFullPathName()); - } - - if (recursive && (! isPlugin) && f.isDirectory()) - recursiveFileSearch (results, f, true); - } -} - -FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() -{ - #if JUCE_MAC - return FileSearchPath ("~/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST"); - #elif JUCE_WINDOWS - const String programFiles (File::getSpecialLocation (File::globalApplicationsDirectory).getFullPathName()); - - return FileSearchPath (programFiles + "\\Steinberg\\VstPlugins"); - #elif JUCE_LINUX - return FileSearchPath ("/usr/lib/vst"); - #endif -} - -END_JUCE_NAMESPACE - -#endif - -#undef log - -#endif - -/*** End of inlined file: juce_VSTPluginFormat.cpp ***/ - - -/*** End of inlined file: juce_VSTPluginFormat.mm ***/ - - -/*** Start of inlined file: juce_AudioProcessor.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioProcessor::AudioProcessor() - : playHead (nullptr), - sampleRate (0), - blockSize (0), - numInputChannels (0), - numOutputChannels (0), - latencySamples (0), - suspended (false), - nonRealtime (false) -{ -} - -AudioProcessor::~AudioProcessor() -{ - // ooh, nasty - the editor should have been deleted before the filter - // that it refers to is deleted.. - jassert (activeEditor == nullptr); - - #if JUCE_DEBUG - // This will fail if you've called beginParameterChangeGesture() for one - // or more parameters without having made a corresponding call to endParameterChangeGesture... - jassert (changingParams.countNumberOfSetBits() == 0); - #endif -} - -void AudioProcessor::setPlayHead (AudioPlayHead* const newPlayHead) noexcept -{ - playHead = newPlayHead; -} - -void AudioProcessor::addListener (AudioProcessorListener* const newListener) -{ - const ScopedLock sl (listenerLock); - listeners.addIfNotAlreadyThere (newListener); -} - -void AudioProcessor::removeListener (AudioProcessorListener* const listenerToRemove) -{ - const ScopedLock sl (listenerLock); - listeners.removeValue (listenerToRemove); -} - -void AudioProcessor::setPlayConfigDetails (const int numIns, - const int numOuts, - const double sampleRate_, - const int blockSize_) noexcept -{ - numInputChannels = numIns; - numOutputChannels = numOuts; - sampleRate = sampleRate_; - blockSize = blockSize_; -} - -void AudioProcessor::setNonRealtime (const bool nonRealtime_) noexcept -{ - nonRealtime = nonRealtime_; -} - -void AudioProcessor::setLatencySamples (const int newLatency) -{ - if (latencySamples != newLatency) - { - latencySamples = newLatency; - updateHostDisplay(); - } -} - -void AudioProcessor::setParameterNotifyingHost (const int parameterIndex, - const float newValue) -{ - setParameter (parameterIndex, newValue); - sendParamChangeMessageToListeners (parameterIndex, newValue); -} - -void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex, const float newValue) -{ - jassert (isPositiveAndBelow (parameterIndex, getNumParameters())); - - for (int i = listeners.size(); --i >= 0;) - { - AudioProcessorListener* l; - - { - const ScopedLock sl (listenerLock); - l = listeners [i]; - } - - if (l != nullptr) - l->audioProcessorParameterChanged (this, parameterIndex, newValue); - } -} - -void AudioProcessor::beginParameterChangeGesture (int parameterIndex) -{ - jassert (isPositiveAndBelow (parameterIndex, getNumParameters())); - - #if JUCE_DEBUG - // This means you've called beginParameterChangeGesture twice in succession without a matching - // call to endParameterChangeGesture. That might be fine in most hosts, but better to avoid doing it. - jassert (! changingParams [parameterIndex]); - changingParams.setBit (parameterIndex); - #endif - - for (int i = listeners.size(); --i >= 0;) - { - AudioProcessorListener* l; - - { - const ScopedLock sl (listenerLock); - l = listeners [i]; - } - - if (l != nullptr) - l->audioProcessorParameterChangeGestureBegin (this, parameterIndex); - } -} - -void AudioProcessor::endParameterChangeGesture (int parameterIndex) -{ - jassert (isPositiveAndBelow (parameterIndex, getNumParameters())); - - #if JUCE_DEBUG - // This means you've called endParameterChangeGesture without having previously called - // endParameterChangeGesture. That might be fine in most hosts, but better to keep the - // calls matched correctly. - jassert (changingParams [parameterIndex]); - changingParams.clearBit (parameterIndex); - #endif - - for (int i = listeners.size(); --i >= 0;) - { - AudioProcessorListener* l; - - { - const ScopedLock sl (listenerLock); - l = listeners [i]; - } - - if (l != nullptr) - l->audioProcessorParameterChangeGestureEnd (this, parameterIndex); - } -} - -void AudioProcessor::updateHostDisplay() -{ - for (int i = listeners.size(); --i >= 0;) - { - AudioProcessorListener* l; - - { - const ScopedLock sl (listenerLock); - l = listeners [i]; - } - - if (l != nullptr) - l->audioProcessorChanged (this); - } -} - -bool AudioProcessor::isParameterAutomatable (int /*parameterIndex*/) const -{ - return true; -} - -bool AudioProcessor::isMetaParameter (int /*parameterIndex*/) const -{ - return false; -} - -void AudioProcessor::suspendProcessing (const bool shouldBeSuspended) -{ - const ScopedLock sl (callbackLock); - suspended = shouldBeSuspended; -} - -void AudioProcessor::reset() -{ -} - -void AudioProcessor::editorBeingDeleted (AudioProcessorEditor* const editor) noexcept -{ - const ScopedLock sl (callbackLock); - - if (activeEditor == editor) - activeEditor = nullptr; -} - -AudioProcessorEditor* AudioProcessor::createEditorIfNeeded() -{ - if (activeEditor != nullptr) - return activeEditor; - - AudioProcessorEditor* const ed = createEditor(); - - // You must make your hasEditor() method return a consistent result! - jassert (hasEditor() == (ed != nullptr)); - - if (ed != nullptr) - { - // you must give your editor comp a size before returning it.. - jassert (ed->getWidth() > 0 && ed->getHeight() > 0); - - const ScopedLock sl (callbackLock); - activeEditor = ed; - } - - return ed; -} - -void AudioProcessor::getCurrentProgramStateInformation (JUCE_NAMESPACE::MemoryBlock& destData) -{ - getStateInformation (destData); -} - -void AudioProcessor::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - setStateInformation (data, sizeInBytes); -} - -// magic number to identify memory blocks that we've stored as XML -const uint32 magicXmlNumber = 0x21324356; - -void AudioProcessor::copyXmlToBinary (const XmlElement& xml, - JUCE_NAMESPACE::MemoryBlock& destData) -{ - const String xmlString (xml.createDocument (String::empty, true, false)); - const int stringLength = xmlString.getNumBytesAsUTF8(); - - destData.setSize (stringLength + 10); - - char* const d = static_cast (destData.getData()); - *(uint32*) d = ByteOrder::swapIfBigEndian ((const uint32) magicXmlNumber); - *(uint32*) (d + 4) = ByteOrder::swapIfBigEndian ((const uint32) stringLength); - - xmlString.copyToUTF8 (d + 8, stringLength + 1); -} - -XmlElement* AudioProcessor::getXmlFromBinary (const void* data, - const int sizeInBytes) -{ - if (sizeInBytes > 8 - && ByteOrder::littleEndianInt (data) == magicXmlNumber) - { - const int stringLength = (int) ByteOrder::littleEndianInt (addBytesToPointer (data, 4)); - - if (stringLength > 0) - return XmlDocument::parse (String::fromUTF8 (static_cast (data) + 8, - jmin ((sizeInBytes - 8), stringLength))); - } - - return nullptr; -} - -void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {} -void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) {} - -bool AudioPlayHead::CurrentPositionInfo::operator== (const CurrentPositionInfo& other) const noexcept -{ - return timeInSeconds == other.timeInSeconds - && ppqPosition == other.ppqPosition - && editOriginTime == other.editOriginTime - && ppqPositionOfLastBarStart == other.ppqPositionOfLastBarStart - && frameRate == other.frameRate - && isPlaying == other.isPlaying - && isRecording == other.isRecording - && bpm == other.bpm - && timeSigNumerator == other.timeSigNumerator - && timeSigDenominator == other.timeSigDenominator; -} - -bool AudioPlayHead::CurrentPositionInfo::operator!= (const CurrentPositionInfo& other) const noexcept -{ - return ! operator== (other); -} - -void AudioPlayHead::CurrentPositionInfo::resetToDefault() -{ - zerostruct (*this); - timeSigNumerator = 4; - timeSigDenominator = 4; - bpm = 120; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioProcessor.cpp ***/ - - -/*** Start of inlined file: juce_AudioProcessorEditor.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* const owner_) - : owner (owner_) -{ - // the filter must be valid.. - jassert (owner != nullptr); -} - -AudioProcessorEditor::~AudioProcessorEditor() -{ - // if this fails, then the wrapper hasn't called editorBeingDeleted() on the - // filter for some reason.. - jassert (owner->getActiveEditor() != this); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioProcessorEditor.cpp ***/ - - -/*** Start of inlined file: juce_AudioProcessorGraph.cpp ***/ -BEGIN_JUCE_NAMESPACE - -const int AudioProcessorGraph::midiChannelIndex = 0x1000; - -namespace GraphRenderingOps -{ - -class AudioGraphRenderingOp -{ -public: - AudioGraphRenderingOp() {} - virtual ~AudioGraphRenderingOp() {} - - virtual void perform (AudioSampleBuffer& sharedBufferChans, - const OwnedArray & sharedMidiBuffers, - const int numSamples) = 0; - - JUCE_LEAK_DETECTOR (AudioGraphRenderingOp); -}; - -class ClearChannelOp : public AudioGraphRenderingOp -{ -public: - ClearChannelOp (const int channelNum_) - : channelNum (channelNum_) - {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) - { - sharedBufferChans.clear (channelNum, 0, numSamples); - } - -private: - const int channelNum; - - JUCE_DECLARE_NON_COPYABLE (ClearChannelOp); -}; - -class CopyChannelOp : public AudioGraphRenderingOp -{ -public: - CopyChannelOp (const int srcChannelNum_, const int dstChannelNum_) - : srcChannelNum (srcChannelNum_), - dstChannelNum (dstChannelNum_) - {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) - { - sharedBufferChans.copyFrom (dstChannelNum, 0, sharedBufferChans, srcChannelNum, 0, numSamples); - } - -private: - const int srcChannelNum, dstChannelNum; - - JUCE_DECLARE_NON_COPYABLE (CopyChannelOp); -}; - -class AddChannelOp : public AudioGraphRenderingOp -{ -public: - AddChannelOp (const int srcChannelNum_, const int dstChannelNum_) - : srcChannelNum (srcChannelNum_), - dstChannelNum (dstChannelNum_) - {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) - { - sharedBufferChans.addFrom (dstChannelNum, 0, sharedBufferChans, srcChannelNum, 0, numSamples); - } - -private: - const int srcChannelNum, dstChannelNum; - - JUCE_DECLARE_NON_COPYABLE (AddChannelOp); -}; - -class ClearMidiBufferOp : public AudioGraphRenderingOp -{ -public: - ClearMidiBufferOp (const int bufferNum_) - : bufferNum (bufferNum_) - {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int) - { - sharedMidiBuffers.getUnchecked (bufferNum)->clear(); - } - -private: - const int bufferNum; - - JUCE_DECLARE_NON_COPYABLE (ClearMidiBufferOp); -}; - -class CopyMidiBufferOp : public AudioGraphRenderingOp -{ -public: - CopyMidiBufferOp (const int srcBufferNum_, const int dstBufferNum_) - : srcBufferNum (srcBufferNum_), - dstBufferNum (dstBufferNum_) - {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int) - { - *sharedMidiBuffers.getUnchecked (dstBufferNum) = *sharedMidiBuffers.getUnchecked (srcBufferNum); - } - -private: - const int srcBufferNum, dstBufferNum; - - JUCE_DECLARE_NON_COPYABLE (CopyMidiBufferOp); -}; - -class AddMidiBufferOp : public AudioGraphRenderingOp -{ -public: - AddMidiBufferOp (const int srcBufferNum_, const int dstBufferNum_) - : srcBufferNum (srcBufferNum_), - dstBufferNum (dstBufferNum_) - {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int numSamples) - { - sharedMidiBuffers.getUnchecked (dstBufferNum) - ->addEvents (*sharedMidiBuffers.getUnchecked (srcBufferNum), 0, numSamples, 0); - } - -private: - const int srcBufferNum, dstBufferNum; - - JUCE_DECLARE_NON_COPYABLE (AddMidiBufferOp); -}; - -class DelayChannelOp : public AudioGraphRenderingOp -{ -public: - DelayChannelOp (const int channel_, const int numSamplesDelay_) - : channel (channel_), - bufferSize (numSamplesDelay_ + 1), - readIndex (0), writeIndex (numSamplesDelay_) - { - buffer.calloc (bufferSize); - } - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) - { - float* data = sharedBufferChans.getSampleData (channel, 0); - - for (int i = numSamples; --i >= 0;) - { - buffer [writeIndex] = *data; - *data++ = buffer [readIndex]; - - if (++readIndex >= bufferSize) readIndex = 0; - if (++writeIndex >= bufferSize) writeIndex = 0; - } - } - -private: - HeapBlock buffer; - const int channel, bufferSize; - int readIndex, writeIndex; - - JUCE_DECLARE_NON_COPYABLE (DelayChannelOp); -}; - -class ProcessBufferOp : public AudioGraphRenderingOp -{ -public: - ProcessBufferOp (const AudioProcessorGraph::Node::Ptr& node_, - const Array & audioChannelsToUse_, - const int totalChans_, - const int midiBufferToUse_) - : node (node_), - processor (node_->getProcessor()), - audioChannelsToUse (audioChannelsToUse_), - totalChans (jmax (1, totalChans_)), - midiBufferToUse (midiBufferToUse_) - { - channels.calloc (totalChans); - - while (audioChannelsToUse.size() < totalChans) - audioChannelsToUse.add (0); - } - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray & sharedMidiBuffers, const int numSamples) - { - for (int i = totalChans; --i >= 0;) - channels[i] = sharedBufferChans.getSampleData (audioChannelsToUse.getUnchecked (i), 0); - - AudioSampleBuffer buffer (channels, totalChans, numSamples); - - processor->processBlock (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); - } - - const AudioProcessorGraph::Node::Ptr node; - AudioProcessor* const processor; - -private: - Array audioChannelsToUse; - HeapBlock channels; - int totalChans; - int midiBufferToUse; - - JUCE_DECLARE_NON_COPYABLE (ProcessBufferOp); -}; - -/** Used to calculate the correct sequence of rendering ops needed, based on - the best re-use of shared buffers at each stage. -*/ -class RenderingOpSequenceCalculator -{ -public: - - RenderingOpSequenceCalculator (AudioProcessorGraph& graph_, - const Array& orderedNodes_, - Array& renderingOps) - : graph (graph_), - orderedNodes (orderedNodes_), - totalLatency (0) - { - nodeIds.add ((uint32) zeroNodeID); // first buffer is read-only zeros - channels.add (0); - - midiNodeIds.add ((uint32) zeroNodeID); - - for (int i = 0; i < orderedNodes.size(); ++i) - { - createRenderingOpsForNode ((AudioProcessorGraph::Node*) orderedNodes.getUnchecked(i), - renderingOps, i); - - markAnyUnusedBuffersAsFree (i); - } - - graph.setLatencySamples (totalLatency); - } - - int getNumBuffersNeeded() const { return nodeIds.size(); } - int getNumMidiBuffersNeeded() const { return midiNodeIds.size(); } - -private: - - AudioProcessorGraph& graph; - const Array& orderedNodes; - Array channels; - Array nodeIds, midiNodeIds; - - enum { freeNodeID = 0xffffffff, zeroNodeID = 0xfffffffe }; - - static bool isNodeBusy (uint32 nodeID) noexcept { return nodeID != freeNodeID && nodeID != zeroNodeID; } - - Array nodeDelayIDs; - Array nodeDelays; - int totalLatency; - - int getNodeDelay (const uint32 nodeID) const { return nodeDelays [nodeDelayIDs.indexOf (nodeID)]; } - - void setNodeDelay (const uint32 nodeID, const int latency) - { - const int index = nodeDelayIDs.indexOf (nodeID); - - if (index >= 0) - { - nodeDelays.set (index, latency); - } - else - { - nodeDelayIDs.add (nodeID); - nodeDelays.add (latency); - } - } - - int getInputLatencyForNode (const uint32 nodeID) const - { - int maxLatency = 0; - - for (int i = graph.getNumConnections(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = graph.getConnection (i); - - if (c->destNodeId == nodeID) - maxLatency = jmax (maxLatency, getNodeDelay (c->sourceNodeId)); - } - - return maxLatency; - } - - void createRenderingOpsForNode (AudioProcessorGraph::Node* const node, - Array& renderingOps, - const int ourRenderingIndex) - { - const int numIns = node->getProcessor()->getNumInputChannels(); - const int numOuts = node->getProcessor()->getNumOutputChannels(); - const int totalChans = jmax (numIns, numOuts); - - Array audioChannelsToUse; - int midiBufferToUse = -1; - - int maxLatency = getInputLatencyForNode (node->nodeId); - - for (int inputChan = 0; inputChan < numIns; ++inputChan) - { - // get a list of all the inputs to this node - Array sourceNodes, sourceOutputChans; - - for (int i = graph.getNumConnections(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = graph.getConnection (i); - - if (c->destNodeId == node->nodeId && c->destChannelIndex == inputChan) - { - sourceNodes.add (c->sourceNodeId); - sourceOutputChans.add (c->sourceChannelIndex); - } - } - - int bufIndex = -1; - - if (sourceNodes.size() == 0) - { - // unconnected input channel - - if (inputChan >= numOuts) - { - bufIndex = getReadOnlyEmptyBuffer(); - jassert (bufIndex >= 0); - } - else - { - bufIndex = getFreeBuffer (false); - renderingOps.add (new ClearChannelOp (bufIndex)); - } - } - else if (sourceNodes.size() == 1) - { - // channel with a straightforward single input.. - const int srcNode = sourceNodes.getUnchecked(0); - const int srcChan = sourceOutputChans.getUnchecked(0); - - bufIndex = getBufferContaining (srcNode, srcChan); - - if (bufIndex < 0) - { - // if not found, this is probably a feedback loop - bufIndex = getReadOnlyEmptyBuffer(); - jassert (bufIndex >= 0); - } - - if (inputChan < numOuts - && isBufferNeededLater (ourRenderingIndex, - inputChan, - srcNode, srcChan)) - { - // can't mess up this channel because it's needed later by another node, so we - // need to use a copy of it.. - const int newFreeBuffer = getFreeBuffer (false); - - renderingOps.add (new CopyChannelOp (bufIndex, newFreeBuffer)); - - bufIndex = newFreeBuffer; - } - - const int nodeDelay = getNodeDelay (srcNode); - - if (nodeDelay < maxLatency) - renderingOps.add (new DelayChannelOp (bufIndex, maxLatency - nodeDelay)); - } - else - { - // channel with a mix of several inputs.. - - // try to find a re-usable channel from our inputs.. - int reusableInputIndex = -1; - - for (int i = 0; i < sourceNodes.size(); ++i) - { - const int sourceBufIndex = getBufferContaining (sourceNodes.getUnchecked(i), - sourceOutputChans.getUnchecked(i)); - - if (sourceBufIndex >= 0 - && ! isBufferNeededLater (ourRenderingIndex, - inputChan, - sourceNodes.getUnchecked(i), - sourceOutputChans.getUnchecked(i))) - { - // we've found one of our input chans that can be re-used.. - reusableInputIndex = i; - bufIndex = sourceBufIndex; - - const int nodeDelay = getNodeDelay (sourceNodes.getUnchecked (i)); - if (nodeDelay < maxLatency) - renderingOps.add (new DelayChannelOp (sourceBufIndex, maxLatency - nodeDelay)); - - break; - } - } - - if (reusableInputIndex < 0) - { - // can't re-use any of our input chans, so get a new one and copy everything into it.. - bufIndex = getFreeBuffer (false); - jassert (bufIndex != 0); - - const int srcIndex = getBufferContaining (sourceNodes.getUnchecked (0), - sourceOutputChans.getUnchecked (0)); - if (srcIndex < 0) - { - // if not found, this is probably a feedback loop - renderingOps.add (new ClearChannelOp (bufIndex)); - } - else - { - renderingOps.add (new CopyChannelOp (srcIndex, bufIndex)); - } - - reusableInputIndex = 0; - const int nodeDelay = getNodeDelay (sourceNodes.getFirst()); - - if (nodeDelay < maxLatency) - renderingOps.add (new DelayChannelOp (bufIndex, maxLatency - nodeDelay)); - } - - for (int j = 0; j < sourceNodes.size(); ++j) - { - if (j != reusableInputIndex) - { - const int srcIndex = getBufferContaining (sourceNodes.getUnchecked(j), - sourceOutputChans.getUnchecked(j)); - if (srcIndex >= 0) - { - const int nodeDelay = getNodeDelay (sourceNodes.getUnchecked (j)); - - if (nodeDelay < maxLatency) - { - if (! isBufferNeededLater (ourRenderingIndex, inputChan, - sourceNodes.getUnchecked(j), - sourceOutputChans.getUnchecked(j))) - { - renderingOps.add (new DelayChannelOp (srcIndex, maxLatency - nodeDelay)); - } - else // buffer is reused elsewhere, can't be delayed - { - const int bufferToDelay = getFreeBuffer (false); - renderingOps.add (new CopyChannelOp (srcIndex, bufferToDelay)); - renderingOps.add (new DelayChannelOp (bufferToDelay, maxLatency - nodeDelay)); - renderingOps.add (new AddChannelOp (bufferToDelay, bufIndex)); - } - } - else - { - renderingOps.add (new AddChannelOp (srcIndex, bufIndex)); - } - } - } - } - } - - jassert (bufIndex >= 0); - audioChannelsToUse.add (bufIndex); - - if (inputChan < numOuts) - markBufferAsContaining (bufIndex, node->nodeId, inputChan); - } - - for (int outputChan = numIns; outputChan < numOuts; ++outputChan) - { - const int bufIndex = getFreeBuffer (false); - jassert (bufIndex != 0); - audioChannelsToUse.add (bufIndex); - - markBufferAsContaining (bufIndex, node->nodeId, outputChan); - } - - // Now the same thing for midi.. - Array midiSourceNodes; - - for (int i = graph.getNumConnections(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = graph.getConnection (i); - - if (c->destNodeId == node->nodeId && c->destChannelIndex == AudioProcessorGraph::midiChannelIndex) - midiSourceNodes.add (c->sourceNodeId); - } - - if (midiSourceNodes.size() == 0) - { - // No midi inputs.. - midiBufferToUse = getFreeBuffer (true); // need to pick a buffer even if the processor doesn't use midi - - if (node->getProcessor()->acceptsMidi() || node->getProcessor()->producesMidi()) - renderingOps.add (new ClearMidiBufferOp (midiBufferToUse)); - } - else if (midiSourceNodes.size() == 1) - { - // One midi input.. - midiBufferToUse = getBufferContaining (midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex); - - if (midiBufferToUse >= 0) - { - if (isBufferNeededLater (ourRenderingIndex, - AudioProcessorGraph::midiChannelIndex, - midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex)) - { - // can't mess up this channel because it's needed later by another node, so we - // need to use a copy of it.. - const int newFreeBuffer = getFreeBuffer (true); - renderingOps.add (new CopyMidiBufferOp (midiBufferToUse, newFreeBuffer)); - midiBufferToUse = newFreeBuffer; - } - } - else - { - // probably a feedback loop, so just use an empty one.. - midiBufferToUse = getFreeBuffer (true); // need to pick a buffer even if the processor doesn't use midi - } - } - else - { - // More than one midi input being mixed.. - int reusableInputIndex = -1; - - for (int i = 0; i < midiSourceNodes.size(); ++i) - { - const int sourceBufIndex = getBufferContaining (midiSourceNodes.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex); - - if (sourceBufIndex >= 0 - && ! isBufferNeededLater (ourRenderingIndex, - AudioProcessorGraph::midiChannelIndex, - midiSourceNodes.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex)) - { - // we've found one of our input buffers that can be re-used.. - reusableInputIndex = i; - midiBufferToUse = sourceBufIndex; - break; - } - } - - if (reusableInputIndex < 0) - { - // can't re-use any of our input buffers, so get a new one and copy everything into it.. - midiBufferToUse = getFreeBuffer (true); - jassert (midiBufferToUse >= 0); - - const int srcIndex = getBufferContaining (midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex); - if (srcIndex >= 0) - renderingOps.add (new CopyMidiBufferOp (srcIndex, midiBufferToUse)); - else - renderingOps.add (new ClearMidiBufferOp (midiBufferToUse)); - - reusableInputIndex = 0; - } - - for (int j = 0; j < midiSourceNodes.size(); ++j) - { - if (j != reusableInputIndex) - { - const int srcIndex = getBufferContaining (midiSourceNodes.getUnchecked(j), - AudioProcessorGraph::midiChannelIndex); - if (srcIndex >= 0) - renderingOps.add (new AddMidiBufferOp (srcIndex, midiBufferToUse)); - } - } - } - - if (node->getProcessor()->producesMidi()) - markBufferAsContaining (midiBufferToUse, node->nodeId, - AudioProcessorGraph::midiChannelIndex); - - setNodeDelay (node->nodeId, maxLatency + node->getProcessor()->getLatencySamples()); - - if (numOuts == 0) - totalLatency = maxLatency; - - renderingOps.add (new ProcessBufferOp (node, audioChannelsToUse, - totalChans, midiBufferToUse)); - } - - int getFreeBuffer (const bool forMidi) - { - if (forMidi) - { - for (int i = 1; i < midiNodeIds.size(); ++i) - if (midiNodeIds.getUnchecked(i) == freeNodeID) - return i; - - midiNodeIds.add ((uint32) freeNodeID); - return midiNodeIds.size() - 1; - } - else - { - for (int i = 1; i < nodeIds.size(); ++i) - if (nodeIds.getUnchecked(i) == freeNodeID) - return i; - - nodeIds.add ((uint32) freeNodeID); - channels.add (0); - return nodeIds.size() - 1; - } - } - - int getReadOnlyEmptyBuffer() const noexcept - { - return 0; - } - - int getBufferContaining (const uint32 nodeId, const int outputChannel) const noexcept - { - if (outputChannel == AudioProcessorGraph::midiChannelIndex) - { - for (int i = midiNodeIds.size(); --i >= 0;) - if (midiNodeIds.getUnchecked(i) == nodeId) - return i; - } - else - { - for (int i = nodeIds.size(); --i >= 0;) - if (nodeIds.getUnchecked(i) == nodeId - && channels.getUnchecked(i) == outputChannel) - return i; - } - - return -1; - } - - void markAnyUnusedBuffersAsFree (const int stepIndex) - { - int i; - for (i = 0; i < nodeIds.size(); ++i) - { - if (isNodeBusy (nodeIds.getUnchecked(i)) - && ! isBufferNeededLater (stepIndex, -1, - nodeIds.getUnchecked(i), - channels.getUnchecked(i))) - { - nodeIds.set (i, (uint32) freeNodeID); - } - } - - for (i = 0; i < midiNodeIds.size(); ++i) - { - if (isNodeBusy (midiNodeIds.getUnchecked(i)) - && ! isBufferNeededLater (stepIndex, -1, - midiNodeIds.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex)) - { - midiNodeIds.set (i, (uint32) freeNodeID); - } - } - } - - bool isBufferNeededLater (int stepIndexToSearchFrom, - int inputChannelOfIndexToIgnore, - const uint32 nodeId, - const int outputChanIndex) const - { - while (stepIndexToSearchFrom < orderedNodes.size()) - { - const AudioProcessorGraph::Node* const node = (const AudioProcessorGraph::Node*) orderedNodes.getUnchecked (stepIndexToSearchFrom); - - if (outputChanIndex == AudioProcessorGraph::midiChannelIndex) - { - if (inputChannelOfIndexToIgnore != AudioProcessorGraph::midiChannelIndex - && graph.getConnectionBetween (nodeId, AudioProcessorGraph::midiChannelIndex, - node->nodeId, AudioProcessorGraph::midiChannelIndex) != nullptr) - return true; - } - else - { - for (int i = 0; i < node->getProcessor()->getNumInputChannels(); ++i) - if (i != inputChannelOfIndexToIgnore - && graph.getConnectionBetween (nodeId, outputChanIndex, - node->nodeId, i) != nullptr) - return true; - } - - inputChannelOfIndexToIgnore = -1; - ++stepIndexToSearchFrom; - } - - return false; - } - - void markBufferAsContaining (int bufferNum, uint32 nodeId, int outputIndex) - { - if (outputIndex == AudioProcessorGraph::midiChannelIndex) - { - jassert (bufferNum > 0 && bufferNum < midiNodeIds.size()); - - midiNodeIds.set (bufferNum, nodeId); - } - else - { - jassert (bufferNum >= 0 && bufferNum < nodeIds.size()); - - nodeIds.set (bufferNum, nodeId); - channels.set (bufferNum, outputIndex); - } - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RenderingOpSequenceCalculator); -}; - -// Holds a fast lookup table for checking which nodes are inputs to others. -class ConnectionLookupTable -{ -public: - explicit ConnectionLookupTable (const OwnedArray& connections) - { - for (int i = 0; i < connections.size(); ++i) - { - const AudioProcessorGraph::Connection* const c = connections.getUnchecked(i); - - int index; - Entry* entry = findEntry (c->destNodeId, index); - - if (entry == nullptr) - { - entry = new Entry (c->destNodeId); - entries.insert (index, entry); - } - - entry->srcNodes.add (c->sourceNodeId); - } - } - - bool isAnInputTo (const uint32 possibleInputId, - const uint32 possibleDestinationId) const noexcept - { - return isAnInputToRecursive (possibleInputId, possibleDestinationId, entries.size()); - } - -private: - - struct Entry - { - explicit Entry (const uint32 destNodeId_) noexcept : destNodeId (destNodeId_) {} - - const uint32 destNodeId; - SortedSet srcNodes; - - JUCE_DECLARE_NON_COPYABLE (Entry); - }; - - OwnedArray entries; - - bool isAnInputToRecursive (const uint32 possibleInputId, - const uint32 possibleDestinationId, - int recursionCheck) const noexcept - { - int index; - const Entry* const entry = findEntry (possibleDestinationId, index); - - if (entry != nullptr) - { - const SortedSet& srcNodes = entry->srcNodes; - - if (srcNodes.contains (possibleInputId)) - return true; - - if (--recursionCheck >= 0) - { - for (int i = 0; i < srcNodes.size(); ++i) - if (isAnInputToRecursive (possibleInputId, srcNodes.getUnchecked(i), recursionCheck)) - return true; - } - } - - return false; - } - - Entry* findEntry (const uint32 destNodeId, int& insertIndex) const noexcept - { - Entry* result = nullptr; - - int start = 0; - int end = entries.size(); - - for (;;) - { - if (start >= end) - { - break; - } - else if (destNodeId == entries.getUnchecked (start)->destNodeId) - { - result = entries.getUnchecked (start); - break; - } - else - { - const int halfway = (start + end) / 2; - - if (halfway == start) - { - if (destNodeId >= entries.getUnchecked (halfway)->destNodeId) - ++start; - - break; - } - else if (destNodeId >= entries.getUnchecked (halfway)->destNodeId) - start = halfway; - else - end = halfway; - } - } - - insertIndex = start; - return result; - } - - JUCE_DECLARE_NON_COPYABLE (ConnectionLookupTable); -}; - -struct ConnectionSorter -{ - static int compareElements (const AudioProcessorGraph::Connection* const first, - const AudioProcessorGraph::Connection* const second) noexcept - { - if (first->sourceNodeId < second->sourceNodeId) return -1; - else if (first->sourceNodeId > second->sourceNodeId) return 1; - else if (first->destNodeId < second->destNodeId) return -1; - else if (first->destNodeId > second->destNodeId) return 1; - else if (first->sourceChannelIndex < second->sourceChannelIndex) return -1; - else if (first->sourceChannelIndex > second->sourceChannelIndex) return 1; - else if (first->destChannelIndex < second->destChannelIndex) return -1; - else if (first->destChannelIndex > second->destChannelIndex) return 1; - - return 0; - } -}; - -} - -AudioProcessorGraph::Connection::Connection (const uint32 sourceNodeId_, const int sourceChannelIndex_, - const uint32 destNodeId_, const int destChannelIndex_) noexcept - : sourceNodeId (sourceNodeId_), sourceChannelIndex (sourceChannelIndex_), - destNodeId (destNodeId_), destChannelIndex (destChannelIndex_) -{ -} - -AudioProcessorGraph::Node::Node (const uint32 nodeId_, AudioProcessor* const processor_) noexcept - : nodeId (nodeId_), - processor (processor_), - isPrepared (false) -{ - jassert (processor_ != nullptr); -} - -void AudioProcessorGraph::Node::prepare (const double sampleRate, const int blockSize, - AudioProcessorGraph* const graph) -{ - if (! isPrepared) - { - isPrepared = true; - - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (static_cast (processor)); - - if (ioProc != nullptr) - ioProc->setParentGraph (graph); - - processor->setPlayConfigDetails (processor->getNumInputChannels(), - processor->getNumOutputChannels(), - sampleRate, blockSize); - - processor->prepareToPlay (sampleRate, blockSize); - } -} - -void AudioProcessorGraph::Node::unprepare() -{ - if (isPrepared) - { - isPrepared = false; - processor->releaseResources(); - } -} - -AudioProcessorGraph::AudioProcessorGraph() - : lastNodeId (0), - renderingBuffers (1, 1), - currentAudioOutputBuffer (1, 1) -{ -} - -AudioProcessorGraph::~AudioProcessorGraph() -{ - clearRenderingSequence(); - clear(); -} - -const String AudioProcessorGraph::getName() const -{ - return "Audio Graph"; -} - -void AudioProcessorGraph::clear() -{ - nodes.clear(); - connections.clear(); - triggerAsyncUpdate(); -} - -AudioProcessorGraph::Node* AudioProcessorGraph::getNodeForId (const uint32 nodeId) const -{ - for (int i = nodes.size(); --i >= 0;) - if (nodes.getUnchecked(i)->nodeId == nodeId) - return nodes.getUnchecked(i); - - return nullptr; -} - -AudioProcessorGraph::Node* AudioProcessorGraph::addNode (AudioProcessor* const newProcessor, uint32 nodeId) -{ - if (newProcessor == nullptr) - { - jassertfalse; - return nullptr; - } - - if (nodeId == 0) - { - nodeId = ++lastNodeId; - } - else - { - // you can't add a node with an id that already exists in the graph.. - jassert (getNodeForId (nodeId) == nullptr); - removeNode (nodeId); - - if (nodeId > lastNodeId) - lastNodeId = nodeId; - } - - Node* const n = new Node (nodeId, newProcessor); - nodes.add (n); - triggerAsyncUpdate(); - - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (static_cast (n->processor)); - - if (ioProc != nullptr) - ioProc->setParentGraph (this); - - return n; -} - -bool AudioProcessorGraph::removeNode (const uint32 nodeId) -{ - disconnectNode (nodeId); - - for (int i = nodes.size(); --i >= 0;) - { - if (nodes.getUnchecked(i)->nodeId == nodeId) - { - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (static_cast (nodes.getUnchecked(i)->processor)); - - if (ioProc != nullptr) - ioProc->setParentGraph (nullptr); - - nodes.remove (i); - triggerAsyncUpdate(); - - return true; - } - } - - return false; -} - -const AudioProcessorGraph::Connection* AudioProcessorGraph::getConnectionBetween (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) const -{ - const Connection c (sourceNodeId, sourceChannelIndex, destNodeId, destChannelIndex); - GraphRenderingOps::ConnectionSorter sorter; - return connections [connections.indexOfSorted (sorter, &c)]; -} - -bool AudioProcessorGraph::isConnected (const uint32 possibleSourceNodeId, - const uint32 possibleDestNodeId) const -{ - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == possibleSourceNodeId - && c->destNodeId == possibleDestNodeId) - { - return true; - } - } - - return false; -} - -bool AudioProcessorGraph::canConnect (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) const -{ - if (sourceChannelIndex < 0 - || destChannelIndex < 0 - || sourceNodeId == destNodeId - || (destChannelIndex == midiChannelIndex) != (sourceChannelIndex == midiChannelIndex)) - return false; - - const Node* const source = getNodeForId (sourceNodeId); - - if (source == nullptr - || (sourceChannelIndex != midiChannelIndex && sourceChannelIndex >= source->processor->getNumOutputChannels()) - || (sourceChannelIndex == midiChannelIndex && ! source->processor->producesMidi())) - return false; - - const Node* const dest = getNodeForId (destNodeId); - - if (dest == nullptr - || (destChannelIndex != midiChannelIndex && destChannelIndex >= dest->processor->getNumInputChannels()) - || (destChannelIndex == midiChannelIndex && ! dest->processor->acceptsMidi())) - return false; - - return getConnectionBetween (sourceNodeId, sourceChannelIndex, - destNodeId, destChannelIndex) == nullptr; -} - -bool AudioProcessorGraph::addConnection (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) -{ - if (! canConnect (sourceNodeId, sourceChannelIndex, destNodeId, destChannelIndex)) - return false; - - GraphRenderingOps::ConnectionSorter sorter; - connections.addSorted (sorter, new Connection (sourceNodeId, sourceChannelIndex, - destNodeId, destChannelIndex)); - triggerAsyncUpdate(); - - return true; -} - -void AudioProcessorGraph::removeConnection (const int index) -{ - connections.remove (index); - triggerAsyncUpdate(); -} - -bool AudioProcessorGraph::removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex, - const uint32 destNodeId, const int destChannelIndex) -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == sourceNodeId - && c->destNodeId == destNodeId - && c->sourceChannelIndex == sourceChannelIndex - && c->destChannelIndex == destChannelIndex) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -bool AudioProcessorGraph::disconnectNode (const uint32 nodeId) -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == nodeId || c->destNodeId == nodeId) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -bool AudioProcessorGraph::removeIllegalConnections() -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - const Node* const source = getNodeForId (c->sourceNodeId); - const Node* const dest = getNodeForId (c->destNodeId); - - if (source == nullptr || dest == nullptr - || (c->sourceChannelIndex != midiChannelIndex - && ! isPositiveAndBelow (c->sourceChannelIndex, source->processor->getNumOutputChannels())) - || (c->sourceChannelIndex == midiChannelIndex - && ! source->processor->producesMidi()) - || (c->destChannelIndex != midiChannelIndex - && ! isPositiveAndBelow (c->destChannelIndex, dest->processor->getNumInputChannels())) - || (c->destChannelIndex == midiChannelIndex - && ! dest->processor->acceptsMidi())) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -void AudioProcessorGraph::clearRenderingSequence() -{ - const ScopedLock sl (renderLock); - - for (int i = renderingOps.size(); --i >= 0;) - { - GraphRenderingOps::AudioGraphRenderingOp* const r - = (GraphRenderingOps::AudioGraphRenderingOp*) renderingOps.getUnchecked(i); - - renderingOps.remove (i); - delete r; - } -} - -bool AudioProcessorGraph::isAnInputTo (const uint32 possibleInputId, - const uint32 possibleDestinationId, - const int recursionCheck) const -{ - if (recursionCheck > 0) - { - for (int i = connections.size(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = connections.getUnchecked (i); - - if (c->destNodeId == possibleDestinationId - && (c->sourceNodeId == possibleInputId - || isAnInputTo (possibleInputId, c->sourceNodeId, recursionCheck - 1))) - return true; - } - } - - return false; -} - -void AudioProcessorGraph::buildRenderingSequence() -{ - Array newRenderingOps; - int numRenderingBuffersNeeded = 2; - int numMidiBuffersNeeded = 1; - - { - MessageManagerLock mml; - - Array orderedNodes; - - { - const GraphRenderingOps::ConnectionLookupTable table (connections); - - for (int i = 0; i < nodes.size(); ++i) - { - Node* const node = nodes.getUnchecked(i); - - node->prepare (getSampleRate(), getBlockSize(), this); - - int j = 0; - for (; j < orderedNodes.size(); ++j) - if (table.isAnInputTo (node->nodeId, ((Node*) orderedNodes.getUnchecked(j))->nodeId)) - break; - - orderedNodes.insert (j, node); - } - } - - GraphRenderingOps::RenderingOpSequenceCalculator calculator (*this, orderedNodes, newRenderingOps); - - numRenderingBuffersNeeded = calculator.getNumBuffersNeeded(); - numMidiBuffersNeeded = calculator.getNumMidiBuffersNeeded(); - } - - Array oldRenderingOps (renderingOps); - - { - // swap over to the new rendering sequence.. - const ScopedLock sl (renderLock); - - renderingBuffers.setSize (numRenderingBuffersNeeded, getBlockSize()); - renderingBuffers.clear(); - - for (int i = midiBuffers.size(); --i >= 0;) - midiBuffers.getUnchecked(i)->clear(); - - while (midiBuffers.size() < numMidiBuffersNeeded) - midiBuffers.add (new MidiBuffer()); - - renderingOps = newRenderingOps; - } - - for (int i = oldRenderingOps.size(); --i >= 0;) - delete (GraphRenderingOps::AudioGraphRenderingOp*) oldRenderingOps.getUnchecked(i); -} - -void AudioProcessorGraph::handleAsyncUpdate() -{ - buildRenderingSequence(); -} - -void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSamplesPerBlock) -{ - currentAudioInputBuffer = nullptr; - currentAudioOutputBuffer.setSize (jmax (1, getNumOutputChannels()), estimatedSamplesPerBlock); - currentMidiInputBuffer = nullptr; - currentMidiOutputBuffer.clear(); - - clearRenderingSequence(); - buildRenderingSequence(); -} - -void AudioProcessorGraph::releaseResources() -{ - for (int i = 0; i < nodes.size(); ++i) - nodes.getUnchecked(i)->unprepare(); - - renderingBuffers.setSize (1, 1); - midiBuffers.clear(); - - currentAudioInputBuffer = nullptr; - currentAudioOutputBuffer.setSize (1, 1); - currentMidiInputBuffer = nullptr; - currentMidiOutputBuffer.clear(); -} - -void AudioProcessorGraph::processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - const ScopedLock sl (renderLock); - - currentAudioInputBuffer = &buffer; - currentAudioOutputBuffer.setSize (jmax (1, buffer.getNumChannels()), numSamples); - currentAudioOutputBuffer.clear(); - currentMidiInputBuffer = &midiMessages; - currentMidiOutputBuffer.clear(); - - int i; - for (i = 0; i < renderingOps.size(); ++i) - { - GraphRenderingOps::AudioGraphRenderingOp* const op - = (GraphRenderingOps::AudioGraphRenderingOp*) renderingOps.getUnchecked(i); - - op->perform (renderingBuffers, midiBuffers, numSamples); - } - - for (i = 0; i < buffer.getNumChannels(); ++i) - buffer.copyFrom (i, 0, currentAudioOutputBuffer, i, 0, numSamples); - - midiMessages.clear(); - midiMessages.addEvents (currentMidiOutputBuffer, 0, buffer.getNumSamples(), 0); -} - -const String AudioProcessorGraph::getInputChannelName (int channelIndex) const -{ - return "Input " + String (channelIndex + 1); -} - -const String AudioProcessorGraph::getOutputChannelName (int channelIndex) const -{ - return "Output " + String (channelIndex + 1); -} - -bool AudioProcessorGraph::isInputChannelStereoPair (int /*index*/) const { return true; } -bool AudioProcessorGraph::isOutputChannelStereoPair (int /*index*/) const { return true; } -bool AudioProcessorGraph::acceptsMidi() const { return true; } -bool AudioProcessorGraph::producesMidi() const { return true; } -void AudioProcessorGraph::getStateInformation (JUCE_NAMESPACE::MemoryBlock& /*destData*/) {} -void AudioProcessorGraph::setStateInformation (const void* /*data*/, int /*sizeInBytes*/) {} - -AudioProcessorGraph::AudioGraphIOProcessor::AudioGraphIOProcessor (const IODeviceType type_) - : type (type_), - graph (nullptr) -{ -} - -AudioProcessorGraph::AudioGraphIOProcessor::~AudioGraphIOProcessor() -{ -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getName() const -{ - switch (type) - { - case audioOutputNode: return "Audio Output"; - case audioInputNode: return "Audio Input"; - case midiOutputNode: return "Midi Output"; - case midiInputNode: return "Midi Input"; - default: break; - } - - return String::empty; -} - -void AudioProcessorGraph::AudioGraphIOProcessor::fillInPluginDescription (PluginDescription& d) const -{ - d.name = getName(); - d.uid = d.name.hashCode(); - d.category = "I/O devices"; - d.pluginFormatName = "Internal"; - d.manufacturerName = "Raw Material Software"; - d.version = "1.0"; - d.isInstrument = false; - - d.numInputChannels = getNumInputChannels(); - if (type == audioOutputNode && graph != nullptr) - d.numInputChannels = graph->getNumInputChannels(); - - d.numOutputChannels = getNumOutputChannels(); - if (type == audioInputNode && graph != nullptr) - d.numOutputChannels = graph->getNumOutputChannels(); -} - -void AudioProcessorGraph::AudioGraphIOProcessor::prepareToPlay (double, int) -{ - jassert (graph != nullptr); -} - -void AudioProcessorGraph::AudioGraphIOProcessor::releaseResources() -{ -} - -void AudioProcessorGraph::AudioGraphIOProcessor::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - jassert (graph != nullptr); - - switch (type) - { - case audioOutputNode: - { - for (int i = jmin (graph->currentAudioOutputBuffer.getNumChannels(), - buffer.getNumChannels()); --i >= 0;) - { - graph->currentAudioOutputBuffer.addFrom (i, 0, buffer, i, 0, buffer.getNumSamples()); - } - - break; - } - - case audioInputNode: - { - for (int i = jmin (graph->currentAudioInputBuffer->getNumChannels(), - buffer.getNumChannels()); --i >= 0;) - { - buffer.copyFrom (i, 0, *graph->currentAudioInputBuffer, i, 0, buffer.getNumSamples()); - } - - break; - } - - case midiOutputNode: - graph->currentMidiOutputBuffer.addEvents (midiMessages, 0, buffer.getNumSamples(), 0); - break; - - case midiInputNode: - midiMessages.addEvents (*graph->currentMidiInputBuffer, 0, buffer.getNumSamples(), 0); - break; - - default: - break; - } -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::acceptsMidi() const -{ - return type == midiOutputNode; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::producesMidi() const -{ - return type == midiInputNode; -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getInputChannelName (int channelIndex) const -{ - switch (type) - { - case audioOutputNode: return "Output " + String (channelIndex + 1); - case midiOutputNode: return "Midi Output"; - default: break; - } - - return String::empty; -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getOutputChannelName (int channelIndex) const -{ - switch (type) - { - case audioInputNode: return "Input " + String (channelIndex + 1); - case midiInputNode: return "Midi Input"; - default: break; - } - - return String::empty; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isInputChannelStereoPair (int /*index*/) const -{ - return type == audioInputNode || type == audioOutputNode; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isOutputChannelStereoPair (int index) const -{ - return isInputChannelStereoPair (index); -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isInput() const { return type == audioInputNode || type == midiInputNode; } -bool AudioProcessorGraph::AudioGraphIOProcessor::isOutput() const { return type == audioOutputNode || type == midiOutputNode; } - -bool AudioProcessorGraph::AudioGraphIOProcessor::hasEditor() const { return false; } -AudioProcessorEditor* AudioProcessorGraph::AudioGraphIOProcessor::createEditor() { return nullptr; } - -int AudioProcessorGraph::AudioGraphIOProcessor::getNumParameters() { return 0; } -const String AudioProcessorGraph::AudioGraphIOProcessor::getParameterName (int) { return String::empty; } - -float AudioProcessorGraph::AudioGraphIOProcessor::getParameter (int) { return 0.0f; } -const String AudioProcessorGraph::AudioGraphIOProcessor::getParameterText (int) { return String::empty; } -void AudioProcessorGraph::AudioGraphIOProcessor::setParameter (int, float) { } - -int AudioProcessorGraph::AudioGraphIOProcessor::getNumPrograms() { return 0; } -int AudioProcessorGraph::AudioGraphIOProcessor::getCurrentProgram() { return 0; } -void AudioProcessorGraph::AudioGraphIOProcessor::setCurrentProgram (int) { } - -const String AudioProcessorGraph::AudioGraphIOProcessor::getProgramName (int) { return String::empty; } -void AudioProcessorGraph::AudioGraphIOProcessor::changeProgramName (int, const String&) {} - -void AudioProcessorGraph::AudioGraphIOProcessor::getStateInformation (JUCE_NAMESPACE::MemoryBlock&) {} -void AudioProcessorGraph::AudioGraphIOProcessor::setStateInformation (const void*, int) {} - -void AudioProcessorGraph::AudioGraphIOProcessor::setParentGraph (AudioProcessorGraph* const newGraph) -{ - graph = newGraph; - - if (graph != nullptr) - { - setPlayConfigDetails (type == audioOutputNode ? graph->getNumOutputChannels() : 0, - type == audioInputNode ? graph->getNumInputChannels() : 0, - getSampleRate(), - getBlockSize()); - - updateHostDisplay(); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioProcessorGraph.cpp ***/ - - -/*** Start of inlined file: juce_AudioProcessorPlayer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -AudioProcessorPlayer::AudioProcessorPlayer() - : processor (nullptr), - sampleRate (0), - blockSize (0), - isPrepared (false), - numInputChans (0), - numOutputChans (0), - tempBuffer (1, 1) -{ -} - -AudioProcessorPlayer::~AudioProcessorPlayer() -{ - setProcessor (nullptr); -} - -void AudioProcessorPlayer::setProcessor (AudioProcessor* const processorToPlay) -{ - if (processor != processorToPlay) - { - if (processorToPlay != nullptr && sampleRate > 0 && blockSize > 0) - { - processorToPlay->setPlayConfigDetails (numInputChans, numOutputChans, - sampleRate, blockSize); - - processorToPlay->prepareToPlay (sampleRate, blockSize); - } - - AudioProcessor* oldOne; - - { - const ScopedLock sl (lock); - oldOne = isPrepared ? processor : nullptr; - processor = processorToPlay; - isPrepared = true; - } - - if (oldOne != nullptr) - oldOne->releaseResources(); - } -} - -void AudioProcessorPlayer::audioDeviceIOCallback (const float** const inputChannelData, - const int numInputChannels, - float** const outputChannelData, - const int numOutputChannels, - const int numSamples) -{ - // these should have been prepared by audioDeviceAboutToStart()... - jassert (sampleRate > 0 && blockSize > 0); - - incomingMidi.clear(); - messageCollector.removeNextBlockOfMessages (incomingMidi, numSamples); - int i, totalNumChans = 0; - - if (numInputChannels > numOutputChannels) - { - // if there aren't enough output channels for the number of - // inputs, we need to create some temporary extra ones (can't - // use the input data in case it gets written to) - tempBuffer.setSize (numInputChannels - numOutputChannels, numSamples, - false, false, true); - - for (i = 0; i < numOutputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - - for (i = numOutputChannels; i < numInputChannels; ++i) - { - channels[totalNumChans] = tempBuffer.getSampleData (i - numOutputChannels, 0); - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - } - else - { - for (i = 0; i < numInputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - - for (i = numInputChannels; i < numOutputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - zeromem (channels[totalNumChans], sizeof (float) * numSamples); - ++totalNumChans; - } - } - - AudioSampleBuffer buffer (channels, totalNumChans, numSamples); - - const ScopedLock sl (lock); - - if (processor != nullptr) - { - const ScopedLock sl2 (processor->getCallbackLock()); - - if (processor->isSuspended()) - { - for (i = 0; i < numOutputChannels; ++i) - zeromem (outputChannelData[i], sizeof (float) * numSamples); - } - else - { - processor->processBlock (buffer, incomingMidi); - } - } -} - -void AudioProcessorPlayer::audioDeviceAboutToStart (AudioIODevice* device) -{ - const ScopedLock sl (lock); - - sampleRate = device->getCurrentSampleRate(); - blockSize = device->getCurrentBufferSizeSamples(); - numInputChans = device->getActiveInputChannels().countNumberOfSetBits(); - numOutputChans = device->getActiveOutputChannels().countNumberOfSetBits(); - - messageCollector.reset (sampleRate); - zeromem (channels, sizeof (channels)); - - if (processor != nullptr) - { - if (isPrepared) - processor->releaseResources(); - - AudioProcessor* const oldProcessor = processor; - setProcessor (nullptr); - setProcessor (oldProcessor); - } -} - -void AudioProcessorPlayer::audioDeviceStopped() -{ - const ScopedLock sl (lock); - - if (processor != nullptr && isPrepared) - processor->releaseResources(); - - sampleRate = 0.0; - blockSize = 0; - isPrepared = false; - tempBuffer.setSize (1, 1); -} - -void AudioProcessorPlayer::handleIncomingMidiMessage (MidiInput*, const MidiMessage& message) -{ - messageCollector.addMessageToQueue (message); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AudioProcessorPlayer.cpp ***/ - - -/*** Start of inlined file: juce_GenericAudioProcessorEditor.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class ProcessorParameterPropertyComp : public PropertyComponent, - public AudioProcessorListener, - public Timer -{ -public: - ProcessorParameterPropertyComp (const String& name, AudioProcessor& owner_, const int index_) - : PropertyComponent (name), - owner (owner_), - index (index_), - paramHasChanged (false), - slider (owner_, index_) - { - startTimer (100); - addAndMakeVisible (&slider); - owner_.addListener (this); - } - - ~ProcessorParameterPropertyComp() - { - owner.removeListener (this); - } - - void refresh() - { - paramHasChanged = false; - slider.setValue (owner.getParameter (index), false); - } - - void audioProcessorChanged (AudioProcessor*) {} - - void audioProcessorParameterChanged (AudioProcessor*, int parameterIndex, float) - { - if (parameterIndex == index) - paramHasChanged = true; - } - - void timerCallback() - { - if (paramHasChanged) - { - refresh(); - startTimer (1000 / 50); - } - else - { - startTimer (jmin (1000 / 4, getTimerInterval() + 10)); - } - } - -private: - - class ParamSlider : public Slider - { - public: - ParamSlider (AudioProcessor& owner_, const int index_) - : owner (owner_), - index (index_) - { - setRange (0.0, 1.0, 0.0); - setSliderStyle (Slider::LinearBar); - setTextBoxIsEditable (false); - setScrollWheelEnabled (false); - } - - void valueChanged() - { - const float newVal = (float) getValue(); - - if (owner.getParameter (index) != newVal) - owner.setParameter (index, newVal); - } - - const String getTextFromValue (double /*value*/) - { - return owner.getParameterText (index); - } - - private: - - AudioProcessor& owner; - const int index; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamSlider); - }; - - AudioProcessor& owner; - const int index; - bool volatile paramHasChanged; - ParamSlider slider; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProcessorParameterPropertyComp); -}; - -GenericAudioProcessorEditor::GenericAudioProcessorEditor (AudioProcessor* const owner_) - : AudioProcessorEditor (owner_) -{ - jassert (owner_ != nullptr); - setOpaque (true); - - addAndMakeVisible (&panel); - - Array params; - - const int numParams = owner_->getNumParameters(); - int totalHeight = 0; - - for (int i = 0; i < numParams; ++i) - { - String name (owner_->getParameterName (i)); - if (name.trim().isEmpty()) - name = "Unnamed"; - - ProcessorParameterPropertyComp* const pc = new ProcessorParameterPropertyComp (name, *owner_, i); - params.add (pc); - totalHeight += pc->getPreferredHeight(); - } - - panel.addProperties (params); - - setSize (400, jlimit (25, 400, totalHeight)); -} - -GenericAudioProcessorEditor::~GenericAudioProcessorEditor() -{ -} - -void GenericAudioProcessorEditor::paint (Graphics& g) -{ - g.fillAll (Colours::white); -} - -void GenericAudioProcessorEditor::resized() -{ - panel.setBounds (getLocalBounds()); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_GenericAudioProcessorEditor.cpp ***/ - - -/*** Start of inlined file: juce_Sampler.cpp ***/ -BEGIN_JUCE_NAMESPACE - -SamplerSound::SamplerSound (const String& name_, - AudioFormatReader& source, - const BigInteger& midiNotes_, - const int midiNoteForNormalPitch, - const double attackTimeSecs, - const double releaseTimeSecs, - const double maxSampleLengthSeconds) - : name (name_), - midiNotes (midiNotes_), - midiRootNote (midiNoteForNormalPitch) -{ - sourceSampleRate = source.sampleRate; - - if (sourceSampleRate <= 0 || source.lengthInSamples <= 0) - { - length = 0; - attackSamples = 0; - releaseSamples = 0; - } - else - { - length = jmin ((int) source.lengthInSamples, - (int) (maxSampleLengthSeconds * sourceSampleRate)); - - data = new AudioSampleBuffer (jmin (2, (int) source.numChannels), length + 4); - - data->readFromAudioReader (&source, 0, length + 4, 0, true, true); - - attackSamples = roundToInt (attackTimeSecs * sourceSampleRate); - releaseSamples = roundToInt (releaseTimeSecs * sourceSampleRate); - } -} - -SamplerSound::~SamplerSound() -{ -} - -bool SamplerSound::appliesToNote (const int midiNoteNumber) -{ - return midiNotes [midiNoteNumber]; -} - -bool SamplerSound::appliesToChannel (const int /*midiChannel*/) -{ - return true; -} - -SamplerVoice::SamplerVoice() - : pitchRatio (0.0), - sourceSamplePosition (0.0), - lgain (0.0f), - rgain (0.0f), - isInAttack (false), - isInRelease (false) -{ -} - -SamplerVoice::~SamplerVoice() -{ -} - -bool SamplerVoice::canPlaySound (SynthesiserSound* sound) -{ - return dynamic_cast (sound) != nullptr; -} - -void SamplerVoice::startNote (const int midiNoteNumber, - const float velocity, - SynthesiserSound* s, - const int /*currentPitchWheelPosition*/) -{ - const SamplerSound* const sound = dynamic_cast (s); - jassert (sound != nullptr); // this object can only play SamplerSounds! - - if (sound != nullptr) - { - const double targetFreq = MidiMessage::getMidiNoteInHertz (midiNoteNumber); - const double naturalFreq = MidiMessage::getMidiNoteInHertz (sound->midiRootNote); - - pitchRatio = (targetFreq * sound->sourceSampleRate) / (naturalFreq * getSampleRate()); - - sourceSamplePosition = 0.0; - lgain = velocity; - rgain = velocity; - - isInAttack = (sound->attackSamples > 0); - isInRelease = false; - - if (isInAttack) - { - attackReleaseLevel = 0.0f; - attackDelta = (float) (pitchRatio / sound->attackSamples); - } - else - { - attackReleaseLevel = 1.0f; - attackDelta = 0.0f; - } - - if (sound->releaseSamples > 0) - { - releaseDelta = (float) (-pitchRatio / sound->releaseSamples); - } - else - { - releaseDelta = 0.0f; - } - } -} - -void SamplerVoice::stopNote (const bool allowTailOff) -{ - if (allowTailOff) - { - isInAttack = false; - isInRelease = true; - } - else - { - clearCurrentNote(); - } -} - -void SamplerVoice::pitchWheelMoved (const int /*newValue*/) -{ -} - -void SamplerVoice::controllerMoved (const int /*controllerNumber*/, - const int /*newValue*/) -{ -} - -void SamplerVoice::renderNextBlock (AudioSampleBuffer& outputBuffer, int startSample, int numSamples) -{ - const SamplerSound* const playingSound = static_cast (getCurrentlyPlayingSound().getObject()); - - if (playingSound != nullptr) - { - const float* const inL = playingSound->data->getSampleData (0, 0); - const float* const inR = playingSound->data->getNumChannels() > 1 - ? playingSound->data->getSampleData (1, 0) : nullptr; - - float* outL = outputBuffer.getSampleData (0, startSample); - float* outR = outputBuffer.getNumChannels() > 1 ? outputBuffer.getSampleData (1, startSample) : nullptr; - - while (--numSamples >= 0) - { - const int pos = (int) sourceSamplePosition; - const float alpha = (float) (sourceSamplePosition - pos); - const float invAlpha = 1.0f - alpha; - - // just using a very simple linear interpolation here.. - float l = (inL [pos] * invAlpha + inL [pos + 1] * alpha); - float r = (inR != nullptr) ? (inR [pos] * invAlpha + inR [pos + 1] * alpha) - : l; - - l *= lgain; - r *= rgain; - - if (isInAttack) - { - l *= attackReleaseLevel; - r *= attackReleaseLevel; - - attackReleaseLevel += attackDelta; - - if (attackReleaseLevel >= 1.0f) - { - attackReleaseLevel = 1.0f; - isInAttack = false; - } - } - else if (isInRelease) - { - l *= attackReleaseLevel; - r *= attackReleaseLevel; - - attackReleaseLevel += releaseDelta; - - if (attackReleaseLevel <= 0.0f) - { - stopNote (false); - break; - } - } - - if (outR != nullptr) - { - *outL++ += l; - *outR++ += r; - } - else - { - *outL++ += (l + r) * 0.5f; - } - - sourceSamplePosition += pitchRatio; - - if (sourceSamplePosition > playingSound->length) - { - stopNote (false); - break; - } - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Sampler.cpp ***/ - - -/*** Start of inlined file: juce_Synthesiser.cpp ***/ -BEGIN_JUCE_NAMESPACE - -SynthesiserSound::SynthesiserSound() -{ -} - -SynthesiserSound::~SynthesiserSound() -{ -} - -SynthesiserVoice::SynthesiserVoice() - : currentSampleRate (44100.0), - currentlyPlayingNote (-1), - noteOnTime (0), - keyIsDown (false), - sostenutoPedalDown (false) -{ -} - -SynthesiserVoice::~SynthesiserVoice() -{ -} - -bool SynthesiserVoice::isPlayingChannel (const int midiChannel) const -{ - return currentlyPlayingSound != nullptr - && currentlyPlayingSound->appliesToChannel (midiChannel); -} - -void SynthesiserVoice::setCurrentPlaybackSampleRate (const double newRate) -{ - currentSampleRate = newRate; -} - -void SynthesiserVoice::clearCurrentNote() -{ - currentlyPlayingNote = -1; - currentlyPlayingSound = nullptr; -} - -Synthesiser::Synthesiser() - : sampleRate (0), - lastNoteOnCounter (0), - shouldStealNotes (true) -{ - for (int i = 0; i < numElementsInArray (lastPitchWheelValues); ++i) - lastPitchWheelValues[i] = 0x2000; -} - -Synthesiser::~Synthesiser() -{ -} - -SynthesiserVoice* Synthesiser::getVoice (const int index) const -{ - const ScopedLock sl (lock); - return voices [index]; -} - -void Synthesiser::clearVoices() -{ - const ScopedLock sl (lock); - voices.clear(); -} - -void Synthesiser::addVoice (SynthesiserVoice* const newVoice) -{ - const ScopedLock sl (lock); - voices.add (newVoice); -} - -void Synthesiser::removeVoice (const int index) -{ - const ScopedLock sl (lock); - voices.remove (index); -} - -void Synthesiser::clearSounds() -{ - const ScopedLock sl (lock); - sounds.clear(); -} - -void Synthesiser::addSound (const SynthesiserSound::Ptr& newSound) -{ - const ScopedLock sl (lock); - sounds.add (newSound); -} - -void Synthesiser::removeSound (const int index) -{ - const ScopedLock sl (lock); - sounds.remove (index); -} - -void Synthesiser::setNoteStealingEnabled (const bool shouldStealNotes_) -{ - shouldStealNotes = shouldStealNotes_; -} - -void Synthesiser::setCurrentPlaybackSampleRate (const double newRate) -{ - if (sampleRate != newRate) - { - const ScopedLock sl (lock); - - allNotesOff (0, false); - - sampleRate = newRate; - - for (int i = voices.size(); --i >= 0;) - voices.getUnchecked (i)->setCurrentPlaybackSampleRate (newRate); - } -} - -void Synthesiser::renderNextBlock (AudioSampleBuffer& outputBuffer, - const MidiBuffer& midiData, - int startSample, - int numSamples) -{ - // must set the sample rate before using this! - jassert (sampleRate != 0); - - const ScopedLock sl (lock); - - MidiBuffer::Iterator midiIterator (midiData); - midiIterator.setNextSamplePosition (startSample); - MidiMessage m (0xf4, 0.0); - - while (numSamples > 0) - { - int midiEventPos; - const bool useEvent = midiIterator.getNextEvent (m, midiEventPos) - && midiEventPos < startSample + numSamples; - - const int numThisTime = useEvent ? midiEventPos - startSample - : numSamples; - - if (numThisTime > 0) - { - for (int i = voices.size(); --i >= 0;) - voices.getUnchecked (i)->renderNextBlock (outputBuffer, startSample, numThisTime); - } - - if (useEvent) - handleMidiEvent (m); - - startSample += numThisTime; - numSamples -= numThisTime; - } -} - -void Synthesiser::handleMidiEvent (const MidiMessage& m) -{ - if (m.isNoteOn()) - { - noteOn (m.getChannel(), - m.getNoteNumber(), - m.getFloatVelocity()); - } - else if (m.isNoteOff()) - { - noteOff (m.getChannel(), - m.getNoteNumber(), - true); - } - else if (m.isAllNotesOff() || m.isAllSoundOff()) - { - allNotesOff (m.getChannel(), true); - } - else if (m.isPitchWheel()) - { - const int channel = m.getChannel(); - const int wheelPos = m.getPitchWheelValue(); - lastPitchWheelValues [channel - 1] = wheelPos; - - handlePitchWheel (channel, wheelPos); - } - else if (m.isController()) - { - handleController (m.getChannel(), - m.getControllerNumber(), - m.getControllerValue()); - } -} - -void Synthesiser::noteOn (const int midiChannel, - const int midiNoteNumber, - const float velocity) -{ - const ScopedLock sl (lock); - - for (int i = sounds.size(); --i >= 0;) - { - SynthesiserSound* const sound = sounds.getUnchecked(i); - - if (sound->appliesToNote (midiNoteNumber) - && sound->appliesToChannel (midiChannel)) - { - // If hitting a note that's still ringing, stop it first (it could be - // still playing because of the sustain or sostenuto pedal). - for (int j = voices.size(); --j >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (j); - - if (voice->getCurrentlyPlayingNote() == midiNoteNumber - && voice->isPlayingChannel (midiChannel)) - stopVoice (voice, true); - } - - startVoice (findFreeVoice (sound, shouldStealNotes), - sound, midiChannel, midiNoteNumber, velocity); - } - } -} - -void Synthesiser::startVoice (SynthesiserVoice* const voice, - SynthesiserSound* const sound, - const int midiChannel, - const int midiNoteNumber, - const float velocity) -{ - if (voice != nullptr && sound != nullptr) - { - if (voice->currentlyPlayingSound != nullptr) - voice->stopNote (false); - - voice->startNote (midiNoteNumber, velocity, sound, - lastPitchWheelValues [midiChannel - 1]); - - voice->currentlyPlayingNote = midiNoteNumber; - voice->noteOnTime = ++lastNoteOnCounter; - voice->currentlyPlayingSound = sound; - voice->keyIsDown = true; - voice->sostenutoPedalDown = false; - } -} - -void Synthesiser::stopVoice (SynthesiserVoice* voice, const bool allowTailOff) -{ - jassert (voice != nullptr); - - voice->stopNote (allowTailOff); - - // the subclass MUST call clearCurrentNote() if it's not tailing off! RTFM for stopNote()! - jassert (allowTailOff || (voice->getCurrentlyPlayingNote() < 0 && voice->getCurrentlyPlayingSound() == 0)); -} - -void Synthesiser::noteOff (const int midiChannel, - const int midiNoteNumber, - const bool allowTailOff) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->getCurrentlyPlayingNote() == midiNoteNumber) - { - SynthesiserSound* const sound = voice->getCurrentlyPlayingSound(); - - if (sound != nullptr - && sound->appliesToNote (midiNoteNumber) - && sound->appliesToChannel (midiChannel)) - { - voice->keyIsDown = false; - - if (! (sustainPedalsDown [midiChannel] || voice->sostenutoPedalDown)) - stopVoice (voice, allowTailOff); - } - } - } -} - -void Synthesiser::allNotesOff (const int midiChannel, const bool allowTailOff) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - voice->stopNote (allowTailOff); - } - - sustainPedalsDown.clear(); -} - -void Synthesiser::handlePitchWheel (const int midiChannel, const int wheelValue) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - voice->pitchWheelMoved (wheelValue); - } -} - -void Synthesiser::handleController (const int midiChannel, - const int controllerNumber, - const int controllerValue) -{ - switch (controllerNumber) - { - case 0x40: handleSustainPedal (midiChannel, controllerValue >= 64); break; - case 0x42: handleSostenutoPedal (midiChannel, controllerValue >= 64); break; - case 0x43: handleSoftPedal (midiChannel, controllerValue >= 64); break; - default: break; - } - - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - voice->controllerMoved (controllerNumber, controllerValue); - } -} - -void Synthesiser::handleSustainPedal (int midiChannel, bool isDown) -{ - jassert (midiChannel > 0 && midiChannel <= 16); - const ScopedLock sl (lock); - - if (isDown) - { - sustainPedalsDown.setBit (midiChannel); - } - else - { - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->isPlayingChannel (midiChannel) && ! voice->keyIsDown) - stopVoice (voice, true); - } - - sustainPedalsDown.clearBit (midiChannel); - } -} - -void Synthesiser::handleSostenutoPedal (int midiChannel, bool isDown) -{ - jassert (midiChannel > 0 && midiChannel <= 16); - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->isPlayingChannel (midiChannel)) - { - if (isDown) - voice->sostenutoPedalDown = true; - else if (voice->sostenutoPedalDown) - stopVoice (voice, true); - } - } -} - -void Synthesiser::handleSoftPedal (int midiChannel, bool /*isDown*/) -{ - (void) midiChannel; - jassert (midiChannel > 0 && midiChannel <= 16); -} - -SynthesiserVoice* Synthesiser::findFreeVoice (SynthesiserSound* soundToPlay, - const bool stealIfNoneAvailable) const -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - if (voices.getUnchecked (i)->getCurrentlyPlayingNote() < 0 - && voices.getUnchecked (i)->canPlaySound (soundToPlay)) - return voices.getUnchecked (i); - - if (stealIfNoneAvailable) - { - // currently this just steals the one that's been playing the longest, but could be made a bit smarter.. - SynthesiserVoice* oldest = nullptr; - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->canPlaySound (soundToPlay) - && (oldest == nullptr || oldest->noteOnTime > voice->noteOnTime)) - oldest = voice; - } - - jassert (oldest != nullptr); - return oldest; - } - - return nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Synthesiser.cpp ***/ - - -/*** Start of inlined file: juce_ActionBroadcaster.cpp ***/ -BEGIN_JUCE_NAMESPACE - -// special message of our own with a string in it -class ActionMessage : public Message -{ -public: - ActionMessage (const String& messageText, ActionListener* const listener_) noexcept - : message (messageText) - { - pointerParameter = listener_; - } - - const String message; - -private: - JUCE_DECLARE_NON_COPYABLE (ActionMessage); -}; - -ActionBroadcaster::CallbackReceiver::CallbackReceiver() {} - -void ActionBroadcaster::CallbackReceiver::handleMessage (const Message& message) -{ - const ActionMessage& am = static_cast (message); - ActionListener* const target = static_cast (am.pointerParameter); - - if (owner->actionListeners.contains (target)) - target->actionListenerCallback (am.message); -} - -ActionBroadcaster::ActionBroadcaster() -{ - // are you trying to create this object before or after juce has been intialised?? - jassert (MessageManager::instance != nullptr); - - callback.owner = this; -} - -ActionBroadcaster::~ActionBroadcaster() -{ - // all event-based objects must be deleted BEFORE juce is shut down! - jassert (MessageManager::instance != nullptr); -} - -void ActionBroadcaster::addActionListener (ActionListener* const listener) -{ - const ScopedLock sl (actionListenerLock); - - if (listener != nullptr) - actionListeners.add (listener); -} - -void ActionBroadcaster::removeActionListener (ActionListener* const listener) -{ - const ScopedLock sl (actionListenerLock); - actionListeners.removeValue (listener); -} - -void ActionBroadcaster::removeAllActionListeners() -{ - const ScopedLock sl (actionListenerLock); - actionListeners.clear(); -} - -void ActionBroadcaster::sendActionMessage (const String& message) const -{ - const ScopedLock sl (actionListenerLock); - - for (int i = actionListeners.size(); --i >= 0;) - callback.postMessage (new ActionMessage (message, actionListeners.getUnchecked(i))); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ActionBroadcaster.cpp ***/ - - -/*** Start of inlined file: juce_AsyncUpdater.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class AsyncUpdaterMessage : public CallbackMessage -{ -public: - AsyncUpdaterMessage (AsyncUpdater& owner_) - : owner (owner_) - { - } - - void messageCallback() - { - if (shouldDeliver.compareAndSetBool (0, 1)) - owner.handleAsyncUpdate(); - } - - Atomic shouldDeliver; - -private: - AsyncUpdater& owner; -}; - -AsyncUpdater::AsyncUpdater() -{ - message = new AsyncUpdaterMessage (*this); -} - -inline Atomic& AsyncUpdater::getDeliveryFlag() const noexcept -{ - return static_cast (message.getObject())->shouldDeliver; -} - -AsyncUpdater::~AsyncUpdater() -{ - // You're deleting this object with a background thread while there's an update - // pending on the main event thread - that's pretty dodgy threading, as the callback could - // happen after this destructor has finished. You should either use a MessageManagerLock while - // deleting this object, or find some other way to avoid such a race condition. - jassert ((! isUpdatePending()) || MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - getDeliveryFlag().set (0); -} - -void AsyncUpdater::triggerAsyncUpdate() -{ - if (getDeliveryFlag().compareAndSetBool (1, 0)) - message->post(); -} - -void AsyncUpdater::cancelPendingUpdate() noexcept -{ - getDeliveryFlag().set (0); -} - -void AsyncUpdater::handleUpdateNowIfNeeded() -{ - // This can only be called by the event thread. - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - if (getDeliveryFlag().exchange (0) != 0) - handleAsyncUpdate(); -} - -bool AsyncUpdater::isUpdatePending() const noexcept -{ - return getDeliveryFlag().value != 0; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_AsyncUpdater.cpp ***/ - - -/*** Start of inlined file: juce_ChangeBroadcaster.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ChangeBroadcaster::ChangeBroadcaster() noexcept -{ - // are you trying to create this object before or after juce has been intialised?? - jassert (MessageManager::instance != nullptr); - - callback.owner = this; -} - -ChangeBroadcaster::~ChangeBroadcaster() -{ - // all event-based objects must be deleted BEFORE juce is shut down! - jassert (MessageManager::instance != nullptr); -} - -void ChangeBroadcaster::addChangeListener (ChangeListener* const listener) -{ - // Listeners can only be safely added when the event thread is locked - // You can use a MessageManagerLock if you need to call this from another thread. - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - changeListeners.add (listener); -} - -void ChangeBroadcaster::removeChangeListener (ChangeListener* const listener) -{ - // Listeners can only be safely added when the event thread is locked - // You can use a MessageManagerLock if you need to call this from another thread. - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - changeListeners.remove (listener); -} - -void ChangeBroadcaster::removeAllChangeListeners() -{ - // Listeners can only be safely added when the event thread is locked - // You can use a MessageManagerLock if you need to call this from another thread. - jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - - changeListeners.clear(); -} - -void ChangeBroadcaster::sendChangeMessage() -{ - if (changeListeners.size() > 0) - callback.triggerAsyncUpdate(); -} - -void ChangeBroadcaster::sendSynchronousChangeMessage() -{ - // This can only be called by the event thread. - jassert (MessageManager::getInstance()->isThisTheMessageThread()); - - callback.cancelPendingUpdate(); - callListeners(); -} - -void ChangeBroadcaster::dispatchPendingMessages() -{ - callback.handleUpdateNowIfNeeded(); -} - -void ChangeBroadcaster::callListeners() -{ - changeListeners.call (&ChangeListener::changeListenerCallback, this); -} - -ChangeBroadcaster::ChangeBroadcasterCallback::ChangeBroadcasterCallback() - : owner (nullptr) -{ -} - -void ChangeBroadcaster::ChangeBroadcasterCallback::handleAsyncUpdate() -{ - jassert (owner != nullptr); - owner->callListeners(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ChangeBroadcaster.cpp ***/ - - -/*** Start of inlined file: juce_InterprocessConnection.cpp ***/ -BEGIN_JUCE_NAMESPACE - -InterprocessConnection::InterprocessConnection (const bool callbacksOnMessageThread, - const uint32 magicMessageHeaderNumber) - : Thread ("Juce IPC connection"), - callbackConnectionState (false), - useMessageThread (callbacksOnMessageThread), - magicMessageHeader (magicMessageHeaderNumber), - pipeReceiveMessageTimeout (-1) -{ -} - -InterprocessConnection::~InterprocessConnection() -{ - callbackConnectionState = false; - disconnect(); -} - -bool InterprocessConnection::connectToSocket (const String& hostName, - const int portNumber, - const int timeOutMillisecs) -{ - disconnect(); - - const ScopedLock sl (pipeAndSocketLock); - socket = new StreamingSocket(); - - if (socket->connect (hostName, portNumber, timeOutMillisecs)) - { - connectionMadeInt(); - startThread(); - return true; - } - else - { - socket = nullptr; - return false; - } -} - -bool InterprocessConnection::connectToPipe (const String& pipeName, - const int pipeReceiveMessageTimeoutMs) -{ - disconnect(); - - ScopedPointer newPipe (new NamedPipe()); - - if (newPipe->openExisting (pipeName)) - { - const ScopedLock sl (pipeAndSocketLock); - pipeReceiveMessageTimeout = pipeReceiveMessageTimeoutMs; - initialiseWithPipe (newPipe.release()); - return true; - } - - return false; -} - -bool InterprocessConnection::createPipe (const String& pipeName, - const int pipeReceiveMessageTimeoutMs) -{ - disconnect(); - - ScopedPointer newPipe (new NamedPipe()); - - if (newPipe->createNewPipe (pipeName)) - { - const ScopedLock sl (pipeAndSocketLock); - pipeReceiveMessageTimeout = pipeReceiveMessageTimeoutMs; - initialiseWithPipe (newPipe.release()); - return true; - } - - return false; -} - -void InterprocessConnection::disconnect() -{ - if (socket != nullptr) - socket->close(); - - if (pipe != nullptr) - { - pipe->cancelPendingReads(); - pipe->close(); - } - - stopThread (4000); - - { - const ScopedLock sl (pipeAndSocketLock); - socket = nullptr; - pipe = nullptr; - } - - connectionLostInt(); -} - -bool InterprocessConnection::isConnected() const -{ - const ScopedLock sl (pipeAndSocketLock); - - return ((socket != nullptr && socket->isConnected()) - || (pipe != nullptr && pipe->isOpen())) - && isThreadRunning(); -} - -String InterprocessConnection::getConnectedHostName() const -{ - if (pipe != nullptr) - { - return "localhost"; - } - else if (socket != nullptr) - { - if (! socket->isLocal()) - return socket->getHostName(); - - return "localhost"; - } - - return String::empty; -} - -bool InterprocessConnection::sendMessage (const MemoryBlock& message) -{ - uint32 messageHeader[2]; - messageHeader [0] = ByteOrder::swapIfBigEndian (magicMessageHeader); - messageHeader [1] = ByteOrder::swapIfBigEndian ((uint32) message.getSize()); - - MemoryBlock messageData (sizeof (messageHeader) + message.getSize()); - messageData.copyFrom (messageHeader, 0, sizeof (messageHeader)); - messageData.copyFrom (message.getData(), sizeof (messageHeader), message.getSize()); - - int bytesWritten = 0; - - const ScopedLock sl (pipeAndSocketLock); - - if (socket != nullptr) - bytesWritten = socket->write (messageData.getData(), (int) messageData.getSize()); - else if (pipe != nullptr) - bytesWritten = pipe->write (messageData.getData(), (int) messageData.getSize()); - - return bytesWritten == (int) messageData.getSize(); -} - -void InterprocessConnection::initialiseWithSocket (StreamingSocket* const socket_) -{ - jassert (socket == 0); - socket = socket_; - connectionMadeInt(); - startThread(); -} - -void InterprocessConnection::initialiseWithPipe (NamedPipe* const pipe_) -{ - jassert (pipe == 0); - pipe = pipe_; - connectionMadeInt(); - startThread(); -} - -const int messageMagicNumber = 0xb734128b; - -void InterprocessConnection::handleMessage (const Message& message) -{ - if (message.intParameter1 == messageMagicNumber) - { - switch (message.intParameter2) - { - case 0: - { - ScopedPointer data (static_cast (message.pointerParameter)); - messageReceived (*data); - break; - } - - case 1: - connectionMade(); - break; - - case 2: - connectionLost(); - break; - } - } -} - -void InterprocessConnection::connectionMadeInt() -{ - if (! callbackConnectionState) - { - callbackConnectionState = true; - - if (useMessageThread) - postMessage (new Message (messageMagicNumber, 1, 0, 0)); - else - connectionMade(); - } -} - -void InterprocessConnection::connectionLostInt() -{ - if (callbackConnectionState) - { - callbackConnectionState = false; - - if (useMessageThread) - postMessage (new Message (messageMagicNumber, 2, 0, 0)); - else - connectionLost(); - } -} - -void InterprocessConnection::deliverDataInt (const MemoryBlock& data) -{ - jassert (callbackConnectionState); - - if (useMessageThread) - postMessage (new Message (messageMagicNumber, 0, 0, new MemoryBlock (data))); - else - messageReceived (data); -} - -bool InterprocessConnection::readNextMessageInt() -{ - const int maximumMessageSize = 1024 * 1024 * 10; // sanity check - - uint32 messageHeader[2]; - const int bytes = socket != nullptr ? socket->read (messageHeader, sizeof (messageHeader), true) - : pipe ->read (messageHeader, sizeof (messageHeader), pipeReceiveMessageTimeout); - - if (bytes == sizeof (messageHeader) - && ByteOrder::swapIfBigEndian (messageHeader[0]) == magicMessageHeader) - { - int bytesInMessage = (int) ByteOrder::swapIfBigEndian (messageHeader[1]); - - if (bytesInMessage > 0 && bytesInMessage < maximumMessageSize) - { - MemoryBlock messageData (bytesInMessage, true); - int bytesRead = 0; - - while (bytesInMessage > 0) - { - if (threadShouldExit()) - return false; - - const int numThisTime = jmin (bytesInMessage, 65536); - const int bytesIn = socket != nullptr ? socket->read (static_cast (messageData.getData()) + bytesRead, numThisTime, true) - : pipe ->read (static_cast (messageData.getData()) + bytesRead, numThisTime, pipeReceiveMessageTimeout); - - if (bytesIn <= 0) - break; - - bytesRead += bytesIn; - bytesInMessage -= bytesIn; - } - - if (bytesRead >= 0) - deliverDataInt (messageData); - } - } - else if (bytes < 0) - { - { - const ScopedLock sl (pipeAndSocketLock); - socket = nullptr; - } - - connectionLostInt(); - return false; - } - - return true; -} - -void InterprocessConnection::run() -{ - while (! threadShouldExit()) - { - if (socket != nullptr) - { - const int ready = socket->waitUntilReady (true, 0); - - if (ready < 0) - { - { - const ScopedLock sl (pipeAndSocketLock); - socket = nullptr; - } - - connectionLostInt(); - break; - } - else if (ready > 0) - { - if (! readNextMessageInt()) - break; - } - else - { - Thread::sleep (2); - } - } - else if (pipe != nullptr) - { - if (! pipe->isOpen()) - { - { - const ScopedLock sl (pipeAndSocketLock); - pipe = nullptr; - } - - connectionLostInt(); - break; - } - else - { - if (! readNextMessageInt()) - break; - } - } - else - { - break; - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_InterprocessConnection.cpp ***/ - - -/*** Start of inlined file: juce_InterprocessConnectionServer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -InterprocessConnectionServer::InterprocessConnectionServer() - : Thread ("Juce IPC server") -{ -} - -InterprocessConnectionServer::~InterprocessConnectionServer() -{ - stop(); -} - -bool InterprocessConnectionServer::beginWaitingForSocket (const int portNumber) -{ - stop(); - - socket = new StreamingSocket(); - - if (socket->createListener (portNumber)) - { - startThread(); - return true; - } - - socket = nullptr; - return false; -} - -void InterprocessConnectionServer::stop() -{ - signalThreadShouldExit(); - - if (socket != nullptr) - socket->close(); - - stopThread (4000); - socket = nullptr; -} - -void InterprocessConnectionServer::run() -{ - while ((! threadShouldExit()) && socket != nullptr) - { - ScopedPointer clientSocket (socket->waitForNextConnection()); - - if (clientSocket != nullptr) - { - InterprocessConnection* newConnection = createConnectionObject(); - - if (newConnection != nullptr) - newConnection->initialiseWithSocket (clientSocket.release()); - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_InterprocessConnectionServer.cpp ***/ - - -/*** Start of inlined file: juce_Message.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Message::Message() noexcept - : intParameter1 (0), - intParameter2 (0), - intParameter3 (0), - pointerParameter (nullptr), - messageRecipient (nullptr) -{ -} - -Message::Message (const int intParameter1_, - const int intParameter2_, - const int intParameter3_, - void* const pointerParameter_) noexcept - : intParameter1 (intParameter1_), - intParameter2 (intParameter2_), - intParameter3 (intParameter3_), - pointerParameter (pointerParameter_), - messageRecipient (nullptr) -{ -} - -Message::~Message() -{ -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Message.cpp ***/ - - -/*** Start of inlined file: juce_MessageListener.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MessageListener::MessageListener() noexcept -{ - // are you trying to create a messagelistener before or after juce has been intialised?? - jassert (MessageManager::instance != nullptr); - - if (MessageManager::instance != nullptr) - MessageManager::instance->messageListeners.add (this); -} - -MessageListener::~MessageListener() -{ - if (MessageManager::instance != nullptr) - MessageManager::instance->messageListeners.removeValue (this); -} - -void MessageListener::postMessage (Message* const message) const -{ - message->messageRecipient = const_cast (this); - - if (MessageManager::instance == nullptr) - MessageManager::getInstance(); - - MessageManager::instance->postMessageToQueue (message); -} - -bool MessageListener::isValidMessageListener() const noexcept -{ - return (MessageManager::instance != nullptr) - && MessageManager::instance->messageListeners.contains (this); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MessageListener.cpp ***/ - - -/*** Start of inlined file: juce_MessageManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -MessageManager* MessageManager::instance = nullptr; - -enum { quitMessageId = 0xfffff321 }; - -MessageManager::MessageManager() noexcept - : quitMessagePosted (false), - quitMessageReceived (false), - messageThreadId (Thread::getCurrentThreadId()), - threadWithLock (0) -{ - if (JUCEApplication::isStandaloneApp()) - Thread::setCurrentThreadName ("Juce Message Thread"); -} - -MessageManager::~MessageManager() noexcept -{ - broadcaster = nullptr; - - doPlatformSpecificShutdown(); - - // If you hit this assertion, then you've probably leaked some kind of MessageListener object.. - jassert (messageListeners.size() == 0); - - jassert (instance == this); - instance = nullptr; // do this last in case this instance is still needed by doPlatformSpecificShutdown() -} - -MessageManager* MessageManager::getInstance() -{ - if (instance == nullptr) - { - instance = new MessageManager(); - doPlatformSpecificInitialisation(); - } - - return instance; -} - -void MessageManager::deleteInstance() -{ - deleteAndZero (instance); -} - -void MessageManager::postMessageToQueue (Message* const message) -{ - if (quitMessagePosted || ! postMessageToSystemQueue (message)) - Message::Ptr deleter (message); // (this will delete messages that were just created with a 0 ref count) -} - -CallbackMessage::CallbackMessage() noexcept {} -CallbackMessage::~CallbackMessage() {} - -void CallbackMessage::post() -{ - if (MessageManager::instance != nullptr) - MessageManager::instance->postMessageToQueue (this); -} - -// not for public use.. -void MessageManager::deliverMessage (Message* const message) -{ - JUCE_TRY - { - MessageListener* const recipient = message->messageRecipient; - - if (recipient == nullptr) - { - CallbackMessage* const callbackMessage = dynamic_cast (message); - - if (callbackMessage != nullptr) - { - callbackMessage->messageCallback(); - } - else if (message->intParameter1 == (int) quitMessageId) - { - quitMessageReceived = true; - } - } - else if (messageListeners.contains (recipient)) - { - recipient->handleMessage (*message); - } - } - JUCE_CATCH_EXCEPTION -} - -#if JUCE_MODAL_LOOPS_PERMITTED && ! (JUCE_MAC || JUCE_IOS) -void MessageManager::runDispatchLoop() -{ - jassert (isThisTheMessageThread()); // must only be called by the message thread - - runDispatchLoopUntil (-1); -} - -void MessageManager::stopDispatchLoop() -{ - postMessageToQueue (new Message ((int) quitMessageId, 0, 0, nullptr)); - quitMessagePosted = true; -} - -bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) -{ - jassert (isThisTheMessageThread()); // must only be called by the message thread - - const int64 endTime = Time::currentTimeMillis() + millisecondsToRunFor; - - while ((millisecondsToRunFor < 0 || endTime > Time::currentTimeMillis()) - && ! quitMessageReceived) - { - JUCE_TRY - { - if (! dispatchNextMessageOnSystemQueue (millisecondsToRunFor >= 0)) - { - const int msToWait = (int) (endTime - Time::currentTimeMillis()); - - if (msToWait > 0) - Thread::sleep (jmin (5, msToWait)); - } - } - JUCE_CATCH_EXCEPTION - } - - return ! quitMessageReceived; -} - -#endif - -void MessageManager::deliverBroadcastMessage (const String& value) -{ - if (broadcaster != nullptr) - broadcaster->sendActionMessage (value); -} - -void MessageManager::registerBroadcastListener (ActionListener* const listener) -{ - if (broadcaster == nullptr) - broadcaster = new ActionBroadcaster(); - - broadcaster->addActionListener (listener); -} - -void MessageManager::deregisterBroadcastListener (ActionListener* const listener) -{ - if (broadcaster != nullptr) - broadcaster->removeActionListener (listener); -} - -bool MessageManager::isThisTheMessageThread() const noexcept -{ - return Thread::getCurrentThreadId() == messageThreadId; -} - -void MessageManager::setCurrentThreadAsMessageThread() -{ - const Thread::ThreadID thisThread = Thread::getCurrentThreadId(); - - if (messageThreadId != thisThread) - { - messageThreadId = thisThread; - - // This is needed on windows to make sure the message window is created by this thread - doPlatformSpecificShutdown(); - doPlatformSpecificInitialisation(); - } -} - -bool MessageManager::currentThreadHasLockedMessageManager() const noexcept -{ - const Thread::ThreadID thisThread = Thread::getCurrentThreadId(); - return thisThread == messageThreadId || thisThread == threadWithLock; -} - -/* The only safe way to lock the message thread while another thread does - some work is by posting a special message, whose purpose is to tie up the event - loop until the other thread has finished its business. - - Any other approach can get horribly deadlocked if the OS uses its own hidden locks which - get locked before making an event callback, because if the same OS lock gets indirectly - accessed from another thread inside a MM lock, you're screwed. (this is exactly what happens - in Cocoa). -*/ -class MessageManagerLock::BlockingMessage : public CallbackMessage -{ -public: - BlockingMessage() {} - - void messageCallback() - { - lockedEvent.signal(); - releaseEvent.wait(); - } - - WaitableEvent lockedEvent, releaseEvent; - -private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlockingMessage); -}; - -MessageManagerLock::MessageManagerLock (Thread* const threadToCheck) - : locked (false) -{ - init (threadToCheck, nullptr); -} - -MessageManagerLock::MessageManagerLock (ThreadPoolJob* const jobToCheckForExitSignal) - : locked (false) -{ - init (nullptr, jobToCheckForExitSignal); -} - -void MessageManagerLock::init (Thread* const threadToCheck, ThreadPoolJob* const job) -{ - if (MessageManager::instance != nullptr) - { - if (MessageManager::instance->currentThreadHasLockedMessageManager()) - { - locked = true; // either we're on the message thread, or this is a re-entrant call. - } - else - { - if (threadToCheck == nullptr && job == nullptr) - { - MessageManager::instance->lockingLock.enter(); - } - else - { - while (! MessageManager::instance->lockingLock.tryEnter()) - { - if ((threadToCheck != nullptr && threadToCheck->threadShouldExit()) - || (job != nullptr && job->shouldExit())) - return; - - Thread::sleep (1); - } - } - - blockingMessage = new BlockingMessage(); - blockingMessage->post(); - - while (! blockingMessage->lockedEvent.wait (20)) - { - if ((threadToCheck != nullptr && threadToCheck->threadShouldExit()) - || (job != nullptr && job->shouldExit())) - { - blockingMessage->releaseEvent.signal(); - blockingMessage = nullptr; - MessageManager::instance->lockingLock.exit(); - return; - } - } - - jassert (MessageManager::instance->threadWithLock == 0); - - MessageManager::instance->threadWithLock = Thread::getCurrentThreadId(); - locked = true; - } - } -} - -MessageManagerLock::~MessageManagerLock() noexcept -{ - if (blockingMessage != nullptr) - { - jassert (MessageManager::instance == nullptr || MessageManager::instance->currentThreadHasLockedMessageManager()); - - blockingMessage->releaseEvent.signal(); - blockingMessage = nullptr; - - if (MessageManager::instance != nullptr) - { - MessageManager::instance->threadWithLock = 0; - MessageManager::instance->lockingLock.exit(); - } - } -} - -JUCE_API void JUCE_CALLTYPE initialiseJuce_GUI() -{ - JUCE_AUTORELEASEPOOL - MessageManager::getInstance(); -} - -JUCE_API void JUCE_CALLTYPE shutdownJuce_GUI() -{ - JUCE_AUTORELEASEPOOL - DeletedAtShutdown::deleteAll(); - MessageManager::deleteInstance(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MessageManager.cpp ***/ - - -/*** Start of inlined file: juce_MultiTimer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class MultiTimer::MultiTimerCallback : public Timer -{ -public: - MultiTimerCallback (const int timerId_, MultiTimer& owner_) - : timerId (timerId_), - owner (owner_) - { - } - - void timerCallback() - { - owner.timerCallback (timerId); - } - - const int timerId; - -private: - MultiTimer& owner; -}; - -MultiTimer::MultiTimer() noexcept -{ -} - -MultiTimer::MultiTimer (const MultiTimer&) noexcept -{ -} - -MultiTimer::~MultiTimer() -{ - const SpinLock::ScopedLockType sl (timerListLock); - timers.clear(); -} - -void MultiTimer::startTimer (const int timerId, const int intervalInMilliseconds) noexcept -{ - const SpinLock::ScopedLockType sl (timerListLock); - - for (int i = timers.size(); --i >= 0;) - { - MultiTimerCallback* const t = timers.getUnchecked(i); - - if (t->timerId == timerId) - { - t->startTimer (intervalInMilliseconds); - return; - } - } - - MultiTimerCallback* const newTimer = new MultiTimerCallback (timerId, *this); - timers.add (newTimer); - newTimer->startTimer (intervalInMilliseconds); -} - -void MultiTimer::stopTimer (const int timerId) noexcept -{ - const SpinLock::ScopedLockType sl (timerListLock); - - for (int i = timers.size(); --i >= 0;) - { - MultiTimerCallback* const t = timers.getUnchecked(i); - - if (t->timerId == timerId) - t->stopTimer(); - } -} - -bool MultiTimer::isTimerRunning (const int timerId) const noexcept -{ - const SpinLock::ScopedLockType sl (timerListLock); - - for (int i = timers.size(); --i >= 0;) - { - const MultiTimerCallback* const t = timers.getUnchecked(i); - if (t->timerId == timerId) - return t->isTimerRunning(); - } - - return false; -} - -int MultiTimer::getTimerInterval (const int timerId) const noexcept -{ - const SpinLock::ScopedLockType sl (timerListLock); - - for (int i = timers.size(); --i >= 0;) - { - const MultiTimerCallback* const t = timers.getUnchecked(i); - if (t->timerId == timerId) - return t->getTimerInterval(); - } - - return 0; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_MultiTimer.cpp ***/ - - -/*** Start of inlined file: juce_Timer.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class InternalTimerThread : private Thread, - private MessageListener, - private DeletedAtShutdown, - private AsyncUpdater -{ -public: - typedef CriticalSection LockType; // (mysteriously, using a SpinLock here causes problems on some XP machines..) - - InternalTimerThread() - : Thread ("Juce Timer"), - firstTimer (nullptr), - callbackNeeded (0) - { - triggerAsyncUpdate(); - } - - ~InternalTimerThread() noexcept - { - stopThread (4000); - - jassert (instance == this || instance == nullptr); - if (instance == this) - instance = nullptr; - } - - void run() - { - uint32 lastTime = Time::getMillisecondCounter(); - Message::Ptr messageToSend (new Message()); - - while (! threadShouldExit()) - { - const uint32 now = Time::getMillisecondCounter(); - - if (now == lastTime) - { - wait (1); - continue; - } - - const int elapsed = now >= lastTime ? (now - lastTime) - : (std::numeric_limits::max() - (lastTime - now)); - lastTime = now; - - const int timeUntilFirstTimer = getTimeUntilFirstTimer (elapsed); - - if (timeUntilFirstTimer <= 0) - { - /* If we managed to set the atomic boolean to true then send a message, this is needed - as a memory barrier so the message won't be sent before callbackNeeded is set to true, - but if it fails it means the message-thread changed the value from under us so at least - some processing is happenening and we can just loop around and try again - */ - if (callbackNeeded.compareAndSetBool (1, 0)) - { - postMessage (messageToSend); - - /* Sometimes our message can get discarded by the OS (e.g. when running as an RTAS - when the app has a modal loop), so this is how long to wait before assuming the - message has been lost and trying again. - */ - const uint32 messageDeliveryTimeout = now + 2000; - - while (callbackNeeded.get() != 0) - { - wait (4); - - if (threadShouldExit()) - return; - - if (Time::getMillisecondCounter() > messageDeliveryTimeout) - break; - } - } - } - else - { - // don't wait for too long because running this loop also helps keep the - // Time::getApproximateMillisecondTimer value stay up-to-date - wait (jlimit (1, 50, timeUntilFirstTimer)); - } - } - } - - void callTimers() - { - const LockType::ScopedLockType sl (lock); - - while (firstTimer != nullptr && firstTimer->countdownMs <= 0) - { - Timer* const t = firstTimer; - t->countdownMs = t->periodMs; - - removeTimer (t); - addTimer (t); - - const LockType::ScopedUnlockType ul (lock); - - JUCE_TRY - { - t->timerCallback(); - } - JUCE_CATCH_EXCEPTION - } - - /* This is needed as a memory barrier to make sure all processing of current timers is done - before the boolean is set. This set should never fail since if it was false in the first place, - we wouldn't get a message (so it can't be changed from false to true from under us), and if we - get a message then the value is true and the other thread can only set it to true again and - we will get another callback to set it to false. - */ - callbackNeeded.set (0); - } - - void handleMessage (const Message&) - { - callTimers(); - } - - void callTimersSynchronously() - { - if (! isThreadRunning()) - { - // (This is relied on by some plugins in cases where the MM has - // had to restart and the async callback never started) - cancelPendingUpdate(); - triggerAsyncUpdate(); - } - - callTimers(); - } - - static void callAnyTimersSynchronously() - { - if (InternalTimerThread::instance != nullptr) - InternalTimerThread::instance->callTimersSynchronously(); - } - - static inline void add (Timer* const tim) noexcept - { - if (instance == nullptr) - instance = new InternalTimerThread(); - - instance->addTimer (tim); - } - - static inline void remove (Timer* const tim) noexcept - { - if (instance != nullptr) - instance->removeTimer (tim); - } - - static inline void resetCounter (Timer* const tim, const int newCounter) noexcept - { - if (instance != nullptr) - { - tim->countdownMs = newCounter; - tim->periodMs = newCounter; - - if ((tim->next != nullptr && tim->next->countdownMs < tim->countdownMs) - || (tim->previous != nullptr && tim->previous->countdownMs > tim->countdownMs)) - { - instance->removeTimer (tim); - instance->addTimer (tim); - } - } - } - -private: - friend class Timer; - static InternalTimerThread* instance; - static LockType lock; - Timer* volatile firstTimer; - Atomic callbackNeeded; - - void addTimer (Timer* const t) noexcept - { - #if JUCE_DEBUG - Timer* tt = firstTimer; - - while (tt != nullptr) - { - // trying to add a timer that's already here - shouldn't get to this point, - // so if you get this assertion, let me know! - jassert (tt != t); - - tt = tt->next; - } - - jassert (t->previous == nullptr && t->next == nullptr); - #endif - - Timer* i = firstTimer; - - if (i == nullptr || i->countdownMs > t->countdownMs) - { - t->next = firstTimer; - firstTimer = t; - } - else - { - while (i->next != nullptr && i->next->countdownMs <= t->countdownMs) - i = i->next; - - jassert (i != nullptr); - - t->next = i->next; - t->previous = i; - i->next = t; - } - - if (t->next != nullptr) - t->next->previous = t; - - jassert ((t->next == nullptr || t->next->countdownMs >= t->countdownMs) - && (t->previous == nullptr || t->previous->countdownMs <= t->countdownMs)); - - notify(); - } - - void removeTimer (Timer* const t) noexcept - { - #if JUCE_DEBUG - Timer* tt = firstTimer; - bool found = false; - - while (tt != nullptr) - { - if (tt == t) - { - found = true; - break; - } - - tt = tt->next; - } - - // trying to remove a timer that's not here - shouldn't get to this point, - // so if you get this assertion, let me know! - jassert (found); - #endif - - if (t->previous != nullptr) - { - jassert (firstTimer != t); - t->previous->next = t->next; - } - else - { - jassert (firstTimer == t); - firstTimer = t->next; - } - - if (t->next != nullptr) - t->next->previous = t->previous; - - t->next = nullptr; - t->previous = nullptr; - } - - int getTimeUntilFirstTimer (const int numMillisecsElapsed) const - { - const LockType::ScopedLockType sl (lock); - - for (Timer* t = firstTimer; t != nullptr; t = t->next) - t->countdownMs -= numMillisecsElapsed; - - return firstTimer != nullptr ? firstTimer->countdownMs : 1000; - } - - void handleAsyncUpdate() - { - startThread (7); - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InternalTimerThread); -}; - -InternalTimerThread* InternalTimerThread::instance = nullptr; -InternalTimerThread::LockType InternalTimerThread::lock; - -void JUCE_API juce_callAnyTimersSynchronously() -{ - InternalTimerThread::callAnyTimersSynchronously(); -} - -#if JUCE_DEBUG -static SortedSet activeTimers; -#endif - -Timer::Timer() noexcept - : countdownMs (0), - periodMs (0), - previous (nullptr), - next (nullptr) -{ - #if JUCE_DEBUG - const InternalTimerThread::LockType::ScopedLockType sl (InternalTimerThread::lock); - activeTimers.add (this); - #endif -} - -Timer::Timer (const Timer&) noexcept - : countdownMs (0), - periodMs (0), - previous (nullptr), - next (nullptr) -{ - #if JUCE_DEBUG - const InternalTimerThread::LockType::ScopedLockType sl (InternalTimerThread::lock); - activeTimers.add (this); - #endif -} - -Timer::~Timer() -{ - stopTimer(); - - #if JUCE_DEBUG - activeTimers.removeValue (this); - #endif -} - -void Timer::startTimer (const int interval) noexcept -{ - const InternalTimerThread::LockType::ScopedLockType sl (InternalTimerThread::lock); - - #if JUCE_DEBUG - // this isn't a valid object! Your timer might be a dangling pointer or something.. - jassert (activeTimers.contains (this)); - #endif - - if (periodMs == 0) - { - countdownMs = interval; - periodMs = jmax (1, interval); - InternalTimerThread::add (this); - } - else - { - InternalTimerThread::resetCounter (this, interval); - } -} - -void Timer::stopTimer() noexcept -{ - const InternalTimerThread::LockType::ScopedLockType sl (InternalTimerThread::lock); - - #if JUCE_DEBUG - // this isn't a valid object! Your timer might be a dangling pointer or something.. - jassert (activeTimers.contains (this)); - #endif - - if (periodMs > 0) - { - InternalTimerThread::remove (this); - periodMs = 0; - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Timer.cpp ***/ - -#endif - -#if JUCE_BUILD_GUI - -/*** Start of inlined file: juce_Component.cpp ***/ -BEGIN_JUCE_NAMESPACE - -#define CHECK_MESSAGE_MANAGER_IS_LOCKED jassert (MessageManager::getInstance()->currentThreadHasLockedMessageManager()); - -Component* Component::currentlyFocusedComponent = nullptr; - -class Component::MouseListenerList -{ -public: - MouseListenerList() - : numDeepMouseListeners (0) - { - } - - void addListener (MouseListener* const newListener, const bool wantsEventsForAllNestedChildComponents) - { - if (! listeners.contains (newListener)) - { - if (wantsEventsForAllNestedChildComponents) - { - listeners.insert (0, newListener); - ++numDeepMouseListeners; - } - else - { - listeners.add (newListener); - } - } - } - - void removeListener (MouseListener* const listenerToRemove) - { - const int index = listeners.indexOf (listenerToRemove); - - if (index >= 0) - { - if (index < numDeepMouseListeners) - --numDeepMouseListeners; - - listeners.remove (index); - } - } - - static void sendMouseEvent (Component& comp, BailOutChecker& checker, - void (MouseListener::*eventMethod) (const MouseEvent&), const MouseEvent& e) - { - if (checker.shouldBailOut()) - return; - - { - MouseListenerList* const list = comp.mouseListeners; - - if (list != nullptr) - { - for (int i = list->listeners.size(); --i >= 0;) - { - (list->listeners.getUnchecked(i)->*eventMethod) (e); - - if (checker.shouldBailOut()) - return; - - i = jmin (i, list->listeners.size()); - } - } - } - - Component* p = comp.parentComponent; - - while (p != nullptr) - { - MouseListenerList* const list = p->mouseListeners; - - if (list != nullptr && list->numDeepMouseListeners > 0) - { - BailOutChecker2 checker2 (checker, p); - - for (int i = list->numDeepMouseListeners; --i >= 0;) - { - (list->listeners.getUnchecked(i)->*eventMethod) (e); - - if (checker2.shouldBailOut()) - return; - - i = jmin (i, list->numDeepMouseListeners); - } - } - - p = p->parentComponent; - } - } - - static void sendWheelEvent (Component& comp, BailOutChecker& checker, const MouseEvent& e, - const float wheelIncrementX, const float wheelIncrementY) - { - { - MouseListenerList* const list = comp.mouseListeners; - - if (list != nullptr) - { - for (int i = list->listeners.size(); --i >= 0;) - { - list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY); - - if (checker.shouldBailOut()) - return; - - i = jmin (i, list->listeners.size()); - } - } - } - - Component* p = comp.parentComponent; - - while (p != nullptr) - { - MouseListenerList* const list = p->mouseListeners; - - if (list != nullptr && list->numDeepMouseListeners > 0) - { - BailOutChecker2 checker2 (checker, p); - - for (int i = list->numDeepMouseListeners; --i >= 0;) - { - list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY); - - if (checker2.shouldBailOut()) - return; - - i = jmin (i, list->numDeepMouseListeners); - } - } - - p = p->parentComponent; - } - } - -private: - Array listeners; - int numDeepMouseListeners; - - class BailOutChecker2 - { - public: - BailOutChecker2 (BailOutChecker& checker_, Component* const component) - : checker (checker_), safePointer (component) - { - } - - bool shouldBailOut() const noexcept - { - return checker.shouldBailOut() || safePointer == 0; - } - - private: - BailOutChecker& checker; - const WeakReference safePointer; - - JUCE_DECLARE_NON_COPYABLE (BailOutChecker2); - }; - - JUCE_DECLARE_NON_COPYABLE (MouseListenerList); -}; - -class Component::ComponentHelpers -{ -public: - - #if JUCE_MODAL_LOOPS_PERMITTED - static void* runModalLoopCallback (void* userData) - { - return (void*) (pointer_sized_int) static_cast (userData)->runModalLoop(); - } - #endif - - static const Identifier getColourPropertyId (const int colourId) - { - String s; - s.preallocateBytes (32); - s << "jcclr_" << String::toHexString (colourId); - return s; - } - - static inline bool hitTest (Component& comp, const Point& localPoint) - { - return isPositiveAndBelow (localPoint.getX(), comp.getWidth()) - && isPositiveAndBelow (localPoint.getY(), comp.getHeight()) - && comp.hitTest (localPoint.getX(), localPoint.getY()); - } - - static Point convertFromParentSpace (const Component& comp, const Point& pointInParentSpace) - { - if (comp.affineTransform == nullptr) - return pointInParentSpace - comp.getPosition(); - - return pointInParentSpace.toFloat().transformedBy (comp.affineTransform->inverted()).toInt() - comp.getPosition(); - } - - static Rectangle convertFromParentSpace (const Component& comp, const Rectangle& areaInParentSpace) - { - if (comp.affineTransform == nullptr) - return areaInParentSpace - comp.getPosition(); - - return areaInParentSpace.toFloat().transformed (comp.affineTransform->inverted()).getSmallestIntegerContainer() - comp.getPosition(); - } - - static Point convertToParentSpace (const Component& comp, const Point& pointInLocalSpace) - { - if (comp.affineTransform == nullptr) - return pointInLocalSpace + comp.getPosition(); - - return (pointInLocalSpace + comp.getPosition()).toFloat().transformedBy (*comp.affineTransform).toInt(); - } - - static Rectangle convertToParentSpace (const Component& comp, const Rectangle& areaInLocalSpace) - { - if (comp.affineTransform == nullptr) - return areaInLocalSpace + comp.getPosition(); - - return (areaInLocalSpace + comp.getPosition()).toFloat().transformed (*comp.affineTransform).getSmallestIntegerContainer(); - } - - template - static Type convertFromDistantParentSpace (const Component* parent, const Component& target, const Type& coordInParent) - { - const Component* const directParent = target.getParentComponent(); - jassert (directParent != nullptr); - - if (directParent == parent) - return convertFromParentSpace (target, coordInParent); - - return convertFromParentSpace (target, convertFromDistantParentSpace (parent, *directParent, coordInParent)); - } - - template - static Type convertCoordinate (const Component* target, const Component* source, Type p) - { - while (source != nullptr) - { - if (source == target) - return p; - - if (source->isParentOf (target)) - return convertFromDistantParentSpace (source, *target, p); - - if (source->isOnDesktop()) - { - p = source->getPeer()->localToGlobal (p); - source = nullptr; - } - else - { - p = convertToParentSpace (*source, p); - source = source->getParentComponent(); - } - } - - jassert (source == nullptr); - if (target == nullptr) - return p; - - const Component* const topLevelComp = target->getTopLevelComponent(); - - if (topLevelComp->isOnDesktop()) - p = topLevelComp->getPeer()->globalToLocal (p); - else - p = convertFromParentSpace (*topLevelComp, p); - - if (topLevelComp == target) - return p; - - return convertFromDistantParentSpace (topLevelComp, *target, p); - } - - static const Rectangle getUnclippedArea (const Component& comp) - { - Rectangle r (comp.getLocalBounds()); - - Component* const p = comp.getParentComponent(); - - if (p != nullptr) - r = r.getIntersection (convertFromParentSpace (comp, getUnclippedArea (*p))); - - return r; - } - - static void clipObscuredRegions (const Component& comp, Graphics& g, const Rectangle& clipRect, const Point& delta) - { - for (int i = comp.childComponentList.size(); --i >= 0;) - { - const Component& child = *comp.childComponentList.getUnchecked(i); - - if (child.isVisible() && ! child.isTransformed()) - { - const Rectangle newClip (clipRect.getIntersection (child.bounds)); - - if (! newClip.isEmpty()) - { - if (child.isOpaque()) - { - g.excludeClipRegion (newClip + delta); - } - else - { - const Point childPos (child.getPosition()); - clipObscuredRegions (child, g, newClip - childPos, childPos + delta); - } - } - } - } - } - - static void subtractObscuredRegions (const Component& comp, RectangleList& result, - const Point& delta, - const Rectangle& clipRect, - const Component* const compToAvoid) - { - for (int i = comp.childComponentList.size(); --i >= 0;) - { - const Component* const c = comp.childComponentList.getUnchecked(i); - - if (c != compToAvoid && c->isVisible()) - { - if (c->isOpaque()) - { - Rectangle childBounds (c->bounds.getIntersection (clipRect)); - childBounds.translate (delta.getX(), delta.getY()); - - result.subtract (childBounds); - } - else - { - Rectangle newClip (clipRect.getIntersection (c->bounds)); - newClip.translate (-c->getX(), -c->getY()); - - subtractObscuredRegions (*c, result, c->getPosition() + delta, - newClip, compToAvoid); - } - } - } - } - - static const Rectangle getParentOrMainMonitorBounds (const Component& comp) - { - return comp.getParentComponent() != nullptr ? comp.getParentComponent()->getLocalBounds() - : Desktop::getInstance().getMainMonitorArea(); - } -}; - -Component::Component() - : parentComponent (nullptr), - lookAndFeel (nullptr), - effect (nullptr), - componentFlags (0), - componentTransparency (0) -{ -} - -Component::Component (const String& name) - : componentName (name), - parentComponent (nullptr), - lookAndFeel (nullptr), - effect (nullptr), - componentFlags (0), - componentTransparency (0) -{ -} - -Component::~Component() -{ - #if ! JUCE_VC6 // (access to private union not allowed in VC6) - static_jassert (sizeof (flags) <= sizeof (componentFlags)); - #endif - - componentListeners.call (&ComponentListener::componentBeingDeleted, *this); - - weakReferenceMaster.clear(); - - while (childComponentList.size() > 0) - removeChildComponent (childComponentList.size() - 1, false, true); - - if (parentComponent != nullptr) - parentComponent->removeChildComponent (parentComponent->childComponentList.indexOf (this), true, false); - else if (currentlyFocusedComponent == this || isParentOf (currentlyFocusedComponent)) - giveAwayFocus (currentlyFocusedComponent != this); - - if (flags.hasHeavyweightPeerFlag) - removeFromDesktop(); - - // Something has added some children to this component during its destructor! Not a smart idea! - jassert (childComponentList.size() == 0); -} - -const WeakReference::SharedRef& Component::getWeakReference() -{ - return weakReferenceMaster (this); -} - -void Component::setName (const String& name) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (componentName != name) - { - componentName = name; - - if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - jassert (peer != nullptr); - if (peer != nullptr) - peer->setTitle (name); - } - - BailOutChecker checker (this); - componentListeners.callChecked (checker, &ComponentListener::componentNameChanged, *this); - } -} - -void Component::setComponentID (const String& newID) -{ - componentID = newID; -} - -void Component::setVisible (bool shouldBeVisible) -{ - if (flags.visibleFlag != shouldBeVisible) - { - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - WeakReference safePointer (this); - - flags.visibleFlag = shouldBeVisible; - - internalRepaint (0, 0, getWidth(), getHeight()); - - sendFakeMouseMove(); - - if (! shouldBeVisible) - { - if (currentlyFocusedComponent == this || isParentOf (currentlyFocusedComponent)) - { - if (parentComponent != nullptr) - parentComponent->grabKeyboardFocus(); - else - giveAwayFocus (true); - } - } - - if (safePointer != nullptr) - { - sendVisibilityChangeMessage(); - - if (safePointer != nullptr && flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - jassert (peer != nullptr); - if (peer != nullptr) - { - peer->setVisible (shouldBeVisible); - internalHierarchyChanged(); - } - } - } - } -} - -void Component::visibilityChanged() -{ -} - -void Component::sendVisibilityChangeMessage() -{ - BailOutChecker checker (this); - - visibilityChanged(); - - if (! checker.shouldBailOut()) - componentListeners.callChecked (checker, &ComponentListener::componentVisibilityChanged, *this); -} - -bool Component::isShowing() const -{ - if (flags.visibleFlag) - { - if (parentComponent != nullptr) - { - return parentComponent->isShowing(); - } - else - { - const ComponentPeer* const peer = getPeer(); - - return peer != nullptr && ! peer->isMinimised(); - } - } - - return false; -} - -void* Component::getWindowHandle() const -{ - const ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - return peer->getNativeHandle(); - - return nullptr; -} - -void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (isOpaque()) - styleWanted &= ~ComponentPeer::windowIsSemiTransparent; - else - styleWanted |= ComponentPeer::windowIsSemiTransparent; - - int currentStyleFlags = 0; - - // don't use getPeer(), so that we only get the peer that's specifically - // for this comp, and not for one of its parents. - ComponentPeer* peer = ComponentPeer::getPeerFor (this); - - if (peer != nullptr) - currentStyleFlags = peer->getStyleFlags(); - - if (styleWanted != currentStyleFlags || ! flags.hasHeavyweightPeerFlag) - { - WeakReference safePointer (this); - - #if JUCE_LINUX - // it's wise to give the component a non-zero size before - // putting it on the desktop, as X windows get confused by this, and - // a (1, 1) minimum size is enforced here. - setSize (jmax (1, getWidth()), - jmax (1, getHeight())); - #endif - - const Point topLeft (getScreenPosition()); - - bool wasFullscreen = false; - bool wasMinimised = false; - ComponentBoundsConstrainer* currentConstainer = nullptr; - Rectangle oldNonFullScreenBounds; - - if (peer != nullptr) - { - wasFullscreen = peer->isFullScreen(); - wasMinimised = peer->isMinimised(); - currentConstainer = peer->getConstrainer(); - oldNonFullScreenBounds = peer->getNonFullScreenBounds(); - - removeFromDesktop(); - - setTopLeftPosition (topLeft.getX(), topLeft.getY()); - } - - if (parentComponent != nullptr) - parentComponent->removeChildComponent (this); - - if (safePointer != nullptr) - { - flags.hasHeavyweightPeerFlag = true; - - peer = createNewPeer (styleWanted, nativeWindowToAttachTo); - - Desktop::getInstance().addDesktopComponent (this); - - bounds.setPosition (topLeft); - peer->setBounds (topLeft.getX(), topLeft.getY(), getWidth(), getHeight(), false); - - peer->setVisible (isVisible()); - - if (wasFullscreen) - { - peer->setFullScreen (true); - peer->setNonFullScreenBounds (oldNonFullScreenBounds); - } - - if (wasMinimised) - peer->setMinimised (true); - - if (isAlwaysOnTop()) - peer->setAlwaysOnTop (true); - - peer->setConstrainer (currentConstainer); - - repaint(); - } - - internalHierarchyChanged(); - } -} - -void Component::removeFromDesktop() -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = ComponentPeer::getPeerFor (this); - - flags.hasHeavyweightPeerFlag = false; - - jassert (peer != nullptr); - delete peer; - - Desktop::getInstance().removeDesktopComponent (this); - } -} - -bool Component::isOnDesktop() const noexcept -{ - return flags.hasHeavyweightPeerFlag; -} - -void Component::userTriedToCloseWindow() -{ - /* This means that the user's trying to get rid of your window with the 'close window' system - menu option (on windows) or possibly the task manager - you should really handle this - and delete or hide your component in an appropriate way. - - If you want to ignore the event and don't want to trigger this assertion, just override - this method and do nothing. - */ - jassertfalse; -} - -void Component::minimisationStateChanged (bool) -{ -} - -void Component::setOpaque (const bool shouldBeOpaque) -{ - if (shouldBeOpaque != flags.opaqueFlag) - { - flags.opaqueFlag = shouldBeOpaque; - - if (flags.hasHeavyweightPeerFlag) - { - const ComponentPeer* const peer = ComponentPeer::getPeerFor (this); - - if (peer != nullptr) - { - // to make it recreate the heavyweight window - addToDesktop (peer->getStyleFlags()); - } - } - - repaint(); - } -} - -bool Component::isOpaque() const noexcept -{ - return flags.opaqueFlag; -} - -void Component::setBufferedToImage (const bool shouldBeBuffered) -{ - if (shouldBeBuffered != flags.bufferToImageFlag) - { - bufferedImage = Image::null; - flags.bufferToImageFlag = shouldBeBuffered; - } -} - -void Component::moveChildInternal (const int sourceIndex, const int destIndex) -{ - if (sourceIndex != destIndex) - { - Component* const c = childComponentList.getUnchecked (sourceIndex); - jassert (c != nullptr); - c->repaintParent(); - - childComponentList.move (sourceIndex, destIndex); - - sendFakeMouseMove(); - internalChildrenChanged(); - } -} - -void Component::toFront (const bool setAsForeground) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - { - peer->toFront (setAsForeground); - - if (setAsForeground && ! hasKeyboardFocus (true)) - grabKeyboardFocus(); - } - } - else if (parentComponent != nullptr) - { - const Array& childList = parentComponent->childComponentList; - - if (childList.getLast() != this) - { - const int index = childList.indexOf (this); - - if (index >= 0) - { - int insertIndex = -1; - - if (! flags.alwaysOnTopFlag) - { - insertIndex = childList.size() - 1; - - while (insertIndex > 0 && childList.getUnchecked (insertIndex)->isAlwaysOnTop()) - --insertIndex; - } - - parentComponent->moveChildInternal (index, insertIndex); - } - } - - if (setAsForeground) - { - internalBroughtToFront(); - grabKeyboardFocus(); - } - } -} - -void Component::toBehind (Component* const other) -{ - if (other != nullptr && other != this) - { - // the two components must belong to the same parent.. - jassert (parentComponent == other->parentComponent); - - if (parentComponent != nullptr) - { - const Array& childList = parentComponent->childComponentList; - const int index = childList.indexOf (this); - - if (index >= 0 && childList [index + 1] != other) - { - int otherIndex = childList.indexOf (other); - - if (otherIndex >= 0) - { - if (index < otherIndex) - --otherIndex; - - parentComponent->moveChildInternal (index, otherIndex); - } - } - } - else if (isOnDesktop()) - { - jassert (other->isOnDesktop()); - - if (other->isOnDesktop()) - { - ComponentPeer* const us = getPeer(); - ComponentPeer* const them = other->getPeer(); - - jassert (us != nullptr && them != nullptr); - if (us != nullptr && them != nullptr) - us->toBehind (them); - } - } - } -} - -void Component::toBack() -{ - if (isOnDesktop()) - { - jassertfalse; //xxx need to add this to native window - } - else if (parentComponent != nullptr) - { - const Array& childList = parentComponent->childComponentList; - - if (childList.getFirst() != this) - { - const int index = childList.indexOf (this); - - if (index > 0) - { - int insertIndex = 0; - - if (flags.alwaysOnTopFlag) - while (insertIndex < childList.size() && ! childList.getUnchecked (insertIndex)->isAlwaysOnTop()) - ++insertIndex; - - parentComponent->moveChildInternal (index, insertIndex); - } - } - } -} - -void Component::setAlwaysOnTop (const bool shouldStayOnTop) -{ - if (shouldStayOnTop != flags.alwaysOnTopFlag) - { - BailOutChecker checker (this); - - flags.alwaysOnTopFlag = shouldStayOnTop; - - if (isOnDesktop()) - { - ComponentPeer* const peer = getPeer(); - - jassert (peer != nullptr); - if (peer != nullptr) - { - if (! peer->setAlwaysOnTop (shouldStayOnTop)) - { - // some kinds of peer can't change their always-on-top status, so - // for these, we'll need to create a new window - const int oldFlags = peer->getStyleFlags(); - removeFromDesktop(); - addToDesktop (oldFlags); - } - } - } - - if (shouldStayOnTop && ! checker.shouldBailOut()) - toFront (false); - - if (! checker.shouldBailOut()) - internalHierarchyChanged(); - } -} - -bool Component::isAlwaysOnTop() const noexcept -{ - return flags.alwaysOnTopFlag; -} - -int Component::proportionOfWidth (const float proportion) const noexcept -{ - return roundToInt (proportion * bounds.getWidth()); -} - -int Component::proportionOfHeight (const float proportion) const noexcept -{ - return roundToInt (proportion * bounds.getHeight()); -} - -int Component::getParentWidth() const noexcept -{ - return parentComponent != nullptr ? parentComponent->getWidth() - : getParentMonitorArea().getWidth(); -} - -int Component::getParentHeight() const noexcept -{ - return parentComponent != nullptr ? parentComponent->getHeight() - : getParentMonitorArea().getHeight(); -} - -int Component::getScreenX() const { return getScreenPosition().getX(); } -int Component::getScreenY() const { return getScreenPosition().getY(); } - -Point Component::getScreenPosition() const { return localPointToGlobal (Point()); } -Rectangle Component::getScreenBounds() const { return localAreaToGlobal (getLocalBounds()); } - -Point Component::getLocalPoint (const Component* source, const Point& point) const -{ - return ComponentHelpers::convertCoordinate (this, source, point); -} - -Rectangle Component::getLocalArea (const Component* source, const Rectangle& area) const -{ - return ComponentHelpers::convertCoordinate (this, source, area); -} - -Point Component::localPointToGlobal (const Point& point) const -{ - return ComponentHelpers::convertCoordinate (nullptr, this, point); -} - -Rectangle Component::localAreaToGlobal (const Rectangle& area) const -{ - return ComponentHelpers::convertCoordinate (nullptr, this, area); -} - -/* Deprecated methods... */ -const Point Component::relativePositionToGlobal (const Point& relativePosition) const -{ - return localPointToGlobal (relativePosition); -} - -const Point Component::globalPositionToRelative (const Point& screenPosition) const -{ - return getLocalPoint (nullptr, screenPosition); -} - -const Point Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point& positionRelativeToThis) const -{ - return targetComponent == nullptr ? localPointToGlobal (positionRelativeToThis) - : targetComponent->getLocalPoint (this, positionRelativeToThis); -} - -void Component::setBounds (const int x, const int y, int w, int h) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (w < 0) w = 0; - if (h < 0) h = 0; - - const bool wasResized = (getWidth() != w || getHeight() != h); - const bool wasMoved = (getX() != x || getY() != y); - - #if JUCE_DEBUG - // It's a very bad idea to try to resize a window during its paint() method! - jassert (! (flags.isInsidePaintCall && wasResized && isOnDesktop())); - #endif - - if (wasMoved || wasResized) - { - const bool showing = isShowing(); - if (showing) - { - // send a fake mouse move to trigger enter/exit messages if needed.. - sendFakeMouseMove(); - - if (! flags.hasHeavyweightPeerFlag) - repaintParent(); - } - - bounds.setBounds (x, y, w, h); - - if (showing) - { - if (wasResized) - repaint(); - else if (! flags.hasHeavyweightPeerFlag) - repaintParent(); - } - else - { - bufferedImage = Image::null; - } - - if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - { - if (wasMoved && wasResized) - peer->setBounds (getX(), getY(), getWidth(), getHeight(), false); - else if (wasMoved) - peer->setPosition (getX(), getY()); - else if (wasResized) - peer->setSize (getWidth(), getHeight()); - } - } - - sendMovedResizedMessages (wasMoved, wasResized); - } -} - -void Component::sendMovedResizedMessages (const bool wasMoved, const bool wasResized) -{ - BailOutChecker checker (this); - - if (wasMoved) - { - moved(); - - if (checker.shouldBailOut()) - return; - } - - if (wasResized) - { - resized(); - - if (checker.shouldBailOut()) - return; - - for (int i = childComponentList.size(); --i >= 0;) - { - childComponentList.getUnchecked(i)->parentSizeChanged(); - - if (checker.shouldBailOut()) - return; - - i = jmin (i, childComponentList.size()); - } - } - - if (parentComponent != nullptr) - parentComponent->childBoundsChanged (this); - - if (! checker.shouldBailOut()) - componentListeners.callChecked (checker, &ComponentListener::componentMovedOrResized, - *this, wasMoved, wasResized); -} - -void Component::setSize (const int w, const int h) -{ - setBounds (getX(), getY(), w, h); -} - -void Component::setTopLeftPosition (const int x, const int y) -{ - setBounds (x, y, getWidth(), getHeight()); -} - -void Component::setTopRightPosition (const int x, const int y) -{ - setTopLeftPosition (x - getWidth(), y); -} - -void Component::setBounds (const Rectangle& r) -{ - setBounds (r.getX(), r.getY(), r.getWidth(), r.getHeight()); -} - -void Component::setBounds (const RelativeRectangle& newBounds) -{ - newBounds.applyToComponent (*this); -} - -void Component::setBounds (const String& newBoundsExpression) -{ - setBounds (RelativeRectangle (newBoundsExpression)); -} - -void Component::setBoundsRelative (const float x, const float y, - const float w, const float h) -{ - const int pw = getParentWidth(); - const int ph = getParentHeight(); - - setBounds (roundToInt (x * pw), - roundToInt (y * ph), - roundToInt (w * pw), - roundToInt (h * ph)); -} - -void Component::setCentrePosition (const int x, const int y) -{ - setTopLeftPosition (x - getWidth() / 2, - y - getHeight() / 2); -} - -void Component::setCentreRelative (const float x, const float y) -{ - setCentrePosition (roundToInt (getParentWidth() * x), - roundToInt (getParentHeight() * y)); -} - -void Component::centreWithSize (const int width, const int height) -{ - const Rectangle parentArea (ComponentHelpers::getParentOrMainMonitorBounds (*this)); - - setBounds (parentArea.getCentreX() - width / 2, - parentArea.getCentreY() - height / 2, - width, height); -} - -void Component::setBoundsInset (const BorderSize& borders) -{ - setBounds (borders.subtractedFrom (ComponentHelpers::getParentOrMainMonitorBounds (*this))); -} - -void Component::setBoundsToFit (int x, int y, int width, int height, - const Justification& justification, - const bool onlyReduceInSize) -{ - // it's no good calling this method unless both the component and - // target rectangle have a finite size. - jassert (getWidth() > 0 && getHeight() > 0 && width > 0 && height > 0); - - if (getWidth() > 0 && getHeight() > 0 - && width > 0 && height > 0) - { - int newW, newH; - - if (onlyReduceInSize && getWidth() <= width && getHeight() <= height) - { - newW = getWidth(); - newH = getHeight(); - } - else - { - const double imageRatio = getHeight() / (double) getWidth(); - const double targetRatio = height / (double) width; - - if (imageRatio <= targetRatio) - { - newW = width; - newH = jmin (height, roundToInt (newW * imageRatio)); - } - else - { - newH = height; - newW = jmin (width, roundToInt (newH / imageRatio)); - } - } - - if (newW > 0 && newH > 0) - setBounds (justification.appliedToRectangle (Rectangle (0, 0, newW, newH), - Rectangle (x, y, width, height))); - } -} - -bool Component::isTransformed() const noexcept -{ - return affineTransform != nullptr; -} - -void Component::setTransform (const AffineTransform& newTransform) -{ - // If you pass in a transform with no inverse, the component will have no dimensions, - // and there will be all sorts of maths errors when converting coordinates. - jassert (! newTransform.isSingularity()); - - if (newTransform.isIdentity()) - { - if (affineTransform != nullptr) - { - repaint(); - affineTransform = nullptr; - repaint(); - - sendMovedResizedMessages (false, false); - } - } - else if (affineTransform == nullptr) - { - repaint(); - affineTransform = new AffineTransform (newTransform); - repaint(); - sendMovedResizedMessages (false, false); - } - else if (*affineTransform != newTransform) - { - repaint(); - *affineTransform = newTransform; - repaint(); - sendMovedResizedMessages (false, false); - } -} - -AffineTransform Component::getTransform() const -{ - return affineTransform != nullptr ? *affineTransform : AffineTransform::identity; -} - -bool Component::hitTest (int x, int y) -{ - if (! flags.ignoresMouseClicksFlag) - return true; - - if (flags.allowChildMouseClicksFlag) - { - for (int i = getNumChildComponents(); --i >= 0;) - { - Component& child = *getChildComponent (i); - - if (child.isVisible() - && ComponentHelpers::hitTest (child, ComponentHelpers::convertFromParentSpace (child, Point (x, y)))) - return true; - } - } - - return false; -} - -void Component::setInterceptsMouseClicks (const bool allowClicks, - const bool allowClicksOnChildComponents) noexcept -{ - flags.ignoresMouseClicksFlag = ! allowClicks; - flags.allowChildMouseClicksFlag = allowClicksOnChildComponents; -} - -void Component::getInterceptsMouseClicks (bool& allowsClicksOnThisComponent, - bool& allowsClicksOnChildComponents) const noexcept -{ - allowsClicksOnThisComponent = ! flags.ignoresMouseClicksFlag; - allowsClicksOnChildComponents = flags.allowChildMouseClicksFlag; -} - -bool Component::contains (const Point& point) -{ - if (ComponentHelpers::hitTest (*this, point)) - { - if (parentComponent != nullptr) - { - return parentComponent->contains (ComponentHelpers::convertToParentSpace (*this, point)); - } - else if (flags.hasHeavyweightPeerFlag) - { - const ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - return peer->contains (point, true); - } - } - - return false; -} - -bool Component::reallyContains (const Point& point, const bool returnTrueIfWithinAChild) -{ - if (! contains (point)) - return false; - - Component* const top = getTopLevelComponent(); - const Component* const compAtPosition = top->getComponentAt (top->getLocalPoint (this, point)); - - return (compAtPosition == this) || (returnTrueIfWithinAChild && isParentOf (compAtPosition)); -} - -Component* Component::getComponentAt (const Point& position) -{ - if (flags.visibleFlag && ComponentHelpers::hitTest (*this, position)) - { - for (int i = childComponentList.size(); --i >= 0;) - { - Component* child = childComponentList.getUnchecked(i); - child = child->getComponentAt (ComponentHelpers::convertFromParentSpace (*child, position)); - - if (child != nullptr) - return child; - } - - return this; - } - - return nullptr; -} - -Component* Component::getComponentAt (const int x, const int y) -{ - return getComponentAt (Point (x, y)); -} - -void Component::addChildComponent (Component* const child, int zOrder) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (child != nullptr && child->parentComponent != this) - { - if (child->parentComponent != nullptr) - child->parentComponent->removeChildComponent (child); - else - child->removeFromDesktop(); - - child->parentComponent = this; - - if (child->isVisible()) - child->repaintParent(); - - if (! child->isAlwaysOnTop()) - { - if (zOrder < 0 || zOrder > childComponentList.size()) - zOrder = childComponentList.size(); - - while (zOrder > 0) - { - if (! childComponentList.getUnchecked (zOrder - 1)->isAlwaysOnTop()) - break; - - --zOrder; - } - } - - childComponentList.insert (zOrder, child); - - child->internalHierarchyChanged(); - internalChildrenChanged(); - } -} - -void Component::addAndMakeVisible (Component* const child, int zOrder) -{ - if (child != nullptr) - { - child->setVisible (true); - addChildComponent (child, zOrder); - } -} - -void Component::removeChildComponent (Component* const child) -{ - removeChildComponent (childComponentList.indexOf (child), true, true); -} - -Component* Component::removeChildComponent (const int index) -{ - return removeChildComponent (index, true, true); -} - -Component* Component::removeChildComponent (const int index, bool sendParentEvents, const bool sendChildEvents) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - Component* const child = childComponentList [index]; - - if (child != nullptr) - { - sendParentEvents = sendParentEvents && child->isShowing(); - - if (sendParentEvents) - { - sendFakeMouseMove(); - child->repaintParent(); - } - - childComponentList.remove (index); - child->parentComponent = nullptr; - - // (NB: there are obscure situations where child->isShowing() = false, but it still has the focus) - if (currentlyFocusedComponent == child || child->isParentOf (currentlyFocusedComponent)) - { - if (sendParentEvents) - { - const WeakReference thisPointer (this); - - giveAwayFocus (sendChildEvents || currentlyFocusedComponent != child); - - if (thisPointer == nullptr) - return child; - - grabKeyboardFocus(); - } - else - { - giveAwayFocus (sendChildEvents || currentlyFocusedComponent != child); - } - } - - if (sendChildEvents) - child->internalHierarchyChanged(); - - if (sendParentEvents) - internalChildrenChanged(); - } - - return child; -} - -void Component::removeAllChildren() -{ - while (childComponentList.size() > 0) - removeChildComponent (childComponentList.size() - 1); -} - -void Component::deleteAllChildren() -{ - while (childComponentList.size() > 0) - delete (removeChildComponent (childComponentList.size() - 1)); -} - -int Component::getNumChildComponents() const noexcept -{ - return childComponentList.size(); -} - -Component* Component::getChildComponent (const int index) const noexcept -{ - return childComponentList [index]; -} - -int Component::getIndexOfChildComponent (const Component* const child) const noexcept -{ - return childComponentList.indexOf (const_cast (child)); -} - -Component* Component::getTopLevelComponent() const noexcept -{ - const Component* comp = this; - - while (comp->parentComponent != nullptr) - comp = comp->parentComponent; - - return const_cast (comp); -} - -bool Component::isParentOf (const Component* possibleChild) const noexcept -{ - while (possibleChild != nullptr) - { - possibleChild = possibleChild->parentComponent; - - if (possibleChild == this) - return true; - } - - return false; -} - -void Component::parentHierarchyChanged() -{ -} - -void Component::childrenChanged() -{ -} - -void Component::internalChildrenChanged() -{ - if (componentListeners.isEmpty()) - { - childrenChanged(); - } - else - { - BailOutChecker checker (this); - - childrenChanged(); - - if (! checker.shouldBailOut()) - componentListeners.callChecked (checker, &ComponentListener::componentChildrenChanged, *this); - } -} - -void Component::internalHierarchyChanged() -{ - BailOutChecker checker (this); - - parentHierarchyChanged(); - - if (checker.shouldBailOut()) - return; - - componentListeners.callChecked (checker, &ComponentListener::componentParentHierarchyChanged, *this); - - if (checker.shouldBailOut()) - return; - - for (int i = childComponentList.size(); --i >= 0;) - { - childComponentList.getUnchecked (i)->internalHierarchyChanged(); - - if (checker.shouldBailOut()) - { - // you really shouldn't delete the parent component during a callback telling you - // that it's changed.. - jassertfalse; - return; - } - - i = jmin (i, childComponentList.size()); - } -} - -#if JUCE_MODAL_LOOPS_PERMITTED -int Component::runModalLoop() -{ - if (! MessageManager::getInstance()->isThisTheMessageThread()) - { - // use a callback so this can be called from non-gui threads - return (int) (pointer_sized_int) MessageManager::getInstance() - ->callFunctionOnMessageThread (&ComponentHelpers::runModalLoopCallback, this); - } - - if (! isCurrentlyModal()) - enterModalState (true); - - return ModalComponentManager::getInstance()->runEventLoopForCurrentComponent(); -} -#endif - -class ModalAutoDeleteCallback : public ModalComponentManager::Callback -{ -public: - ModalAutoDeleteCallback (Component* const comp_) - : comp (comp_) - {} - - void modalStateFinished (int) - { - delete comp.get(); - } - -private: - WeakReference comp; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModalAutoDeleteCallback); -}; - -void Component::enterModalState (const bool shouldTakeKeyboardFocus, - ModalComponentManager::Callback* callback, - const bool deleteWhenDismissed) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - // Check for an attempt to make a component modal when it already is! - // This can cause nasty problems.. - jassert (! flags.currentlyModalFlag); - - if (! isCurrentlyModal()) - { - ModalComponentManager* const mcm = ModalComponentManager::getInstance(); - mcm->startModal (this); - mcm->attachCallback (this, callback); - - if (deleteWhenDismissed) - mcm->attachCallback (this, new ModalAutoDeleteCallback (this)); - - flags.currentlyModalFlag = true; - setVisible (true); - - if (shouldTakeKeyboardFocus) - grabKeyboardFocus(); - } -} - -void Component::exitModalState (const int returnValue) -{ - if (flags.currentlyModalFlag) - { - if (MessageManager::getInstance()->isThisTheMessageThread()) - { - ModalComponentManager::getInstance()->endModal (this, returnValue); - flags.currentlyModalFlag = false; - - ModalComponentManager::getInstance()->bringModalComponentsToFront(); - } - else - { - class ExitModalStateMessage : public CallbackMessage - { - public: - ExitModalStateMessage (Component* const target_, const int result_) - : target (target_), result (result_) {} - - void messageCallback() - { - if (target.get() != nullptr) // (get() required for VS2003 bug) - target->exitModalState (result); - } - - private: - WeakReference target; - int result; - }; - - (new ExitModalStateMessage (this, returnValue))->post(); - } - } -} - -bool Component::isCurrentlyModal() const noexcept -{ - return flags.currentlyModalFlag - && getCurrentlyModalComponent() == this; -} - -bool Component::isCurrentlyBlockedByAnotherModalComponent() const -{ - Component* const mc = getCurrentlyModalComponent(); - - return ! (mc == nullptr || mc == this || mc->isParentOf (this) - || mc->canModalEventBeSentToComponent (this)); -} - -int JUCE_CALLTYPE Component::getNumCurrentlyModalComponents() noexcept -{ - return ModalComponentManager::getInstance()->getNumModalComponents(); -} - -Component* JUCE_CALLTYPE Component::getCurrentlyModalComponent (int index) noexcept -{ - return ModalComponentManager::getInstance()->getModalComponent (index); -} - -void Component::setBroughtToFrontOnMouseClick (const bool shouldBeBroughtToFront) noexcept -{ - flags.bringToFrontOnClickFlag = shouldBeBroughtToFront; -} - -bool Component::isBroughtToFrontOnMouseClick() const noexcept -{ - return flags.bringToFrontOnClickFlag; -} - -void Component::setMouseCursor (const MouseCursor& newCursor) -{ - if (cursor != newCursor) - { - cursor = newCursor; - - if (flags.visibleFlag) - updateMouseCursor(); - } -} - -const MouseCursor Component::getMouseCursor() -{ - return cursor; -} - -void Component::updateMouseCursor() const -{ - Desktop::getInstance().getMainMouseSource().forceMouseCursorUpdate(); -} - -void Component::setRepaintsOnMouseActivity (const bool shouldRepaint) noexcept -{ - flags.repaintOnMouseActivityFlag = shouldRepaint; -} - -void Component::setAlpha (const float newAlpha) -{ - const uint8 newIntAlpha = (uint8) (255 - jlimit (0, 255, roundToInt (newAlpha * 255.0))); - - if (componentTransparency != newIntAlpha) - { - componentTransparency = newIntAlpha; - - if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - peer->setAlpha (newAlpha); - } - else - { - repaint(); - } - } -} - -float Component::getAlpha() const -{ - return (255 - componentTransparency) / 255.0f; -} - -void Component::repaintParent() -{ - if (flags.visibleFlag) - internalRepaint (0, 0, getWidth(), getHeight()); -} - -void Component::repaint() -{ - repaint (0, 0, getWidth(), getHeight()); -} - -void Component::repaint (const int x, const int y, - const int w, const int h) -{ - bufferedImage = Image::null; - - if (flags.visibleFlag) - internalRepaint (x, y, w, h); -} - -void Component::repaint (const Rectangle& area) -{ - repaint (area.getX(), area.getY(), area.getWidth(), area.getHeight()); -} - -void Component::internalRepaint (int x, int y, int w, int h) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (x < 0) - { - w += x; - x = 0; - } - - if (x + w > getWidth()) - w = getWidth() - x; - - if (w > 0) - { - if (y < 0) - { - h += y; - y = 0; - } - - if (y + h > getHeight()) - h = getHeight() - y; - - if (h > 0) - { - if (parentComponent != nullptr) - { - if (parentComponent->flags.visibleFlag) - { - if (affineTransform == nullptr) - { - parentComponent->internalRepaint (x + getX(), y + getY(), w, h); - } - else - { - const Rectangle r (ComponentHelpers::convertToParentSpace (*this, Rectangle (x, y, w, h))); - parentComponent->internalRepaint (r.getX(), r.getY(), r.getWidth(), r.getHeight()); - } - } - } - else if (flags.hasHeavyweightPeerFlag) - { - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - peer->repaint (Rectangle (x, y, w, h)); - } - } - } -} - -void Component::paintComponent (Graphics& g) -{ - if (flags.bufferToImageFlag) - { - if (bufferedImage.isNull()) - { - bufferedImage = Image (flags.opaqueFlag ? Image::RGB : Image::ARGB, - getWidth(), getHeight(), ! flags.opaqueFlag, Image::NativeImage); - - Graphics imG (bufferedImage); - paint (imG); - } - - g.setColour (Colours::black); - g.drawImageAt (bufferedImage, 0, 0); - } - else - { - paint (g); - } -} - -void Component::paintWithinParentContext (Graphics& g) -{ - g.setOrigin (getX(), getY()); - paintEntireComponent (g, false); -} - -void Component::paintComponentAndChildren (Graphics& g) -{ - const Rectangle clipBounds (g.getClipBounds()); - - if (flags.dontClipGraphicsFlag) - { - paintComponent (g); - } - else - { - g.saveState(); - ComponentHelpers::clipObscuredRegions (*this, g, clipBounds, Point()); - - if (! g.isClipEmpty()) - paintComponent (g); - - g.restoreState(); - } - - for (int i = 0; i < childComponentList.size(); ++i) - { - Component& child = *childComponentList.getUnchecked (i); - - if (child.isVisible()) - { - if (child.affineTransform != nullptr) - { - g.saveState(); - g.addTransform (*child.affineTransform); - - if ((child.flags.dontClipGraphicsFlag && ! g.isClipEmpty()) || g.reduceClipRegion (child.getBounds())) - child.paintWithinParentContext (g); - - g.restoreState(); - } - else if (clipBounds.intersects (child.getBounds())) - { - g.saveState(); - - if (child.flags.dontClipGraphicsFlag) - { - child.paintWithinParentContext (g); - } - else if (g.reduceClipRegion (child.getBounds())) - { - bool nothingClipped = true; - - for (int j = i + 1; j < childComponentList.size(); ++j) - { - const Component& sibling = *childComponentList.getUnchecked (j); - - if (sibling.flags.opaqueFlag && sibling.isVisible() && sibling.affineTransform == nullptr) - { - nothingClipped = false; - g.excludeClipRegion (sibling.getBounds()); - } - } - - if (nothingClipped || ! g.isClipEmpty()) - child.paintWithinParentContext (g); - } - - g.restoreState(); - } - } - } - - g.saveState(); - paintOverChildren (g); - g.restoreState(); -} - -void Component::paintEntireComponent (Graphics& g, const bool ignoreAlphaLevel) -{ - jassert (! g.isClipEmpty()); - - #if JUCE_DEBUG - flags.isInsidePaintCall = true; - #endif - - if (effect != nullptr) - { - Image effectImage (flags.opaqueFlag ? Image::RGB : Image::ARGB, - getWidth(), getHeight(), ! flags.opaqueFlag, Image::NativeImage); - { - Graphics g2 (effectImage); - paintComponentAndChildren (g2); - } - - effect->applyEffect (effectImage, g, ignoreAlphaLevel ? 1.0f : getAlpha()); - } - else if (componentTransparency > 0 && ! ignoreAlphaLevel) - { - if (componentTransparency < 255) - { - g.beginTransparencyLayer (getAlpha()); - paintComponentAndChildren (g); - g.endTransparencyLayer(); - } - } - else - { - paintComponentAndChildren (g); - } - - #if JUCE_DEBUG - flags.isInsidePaintCall = false; - #endif -} - -void Component::setPaintingIsUnclipped (const bool shouldPaintWithoutClipping) noexcept -{ - flags.dontClipGraphicsFlag = shouldPaintWithoutClipping; -} - -Image Component::createComponentSnapshot (const Rectangle& areaToGrab, - const bool clipImageToComponentBounds) -{ - Rectangle r (areaToGrab); - - if (clipImageToComponentBounds) - r = r.getIntersection (getLocalBounds()); - - Image componentImage (flags.opaqueFlag ? Image::RGB : Image::ARGB, - jmax (1, r.getWidth()), - jmax (1, r.getHeight()), - true); - - Graphics imageContext (componentImage); - imageContext.setOrigin (-r.getX(), -r.getY()); - paintEntireComponent (imageContext, true); - - return componentImage; -} - -void Component::setComponentEffect (ImageEffectFilter* const newEffect) -{ - if (effect != newEffect) - { - effect = newEffect; - repaint(); - } -} - -LookAndFeel& Component::getLookAndFeel() const noexcept -{ - const Component* c = this; - - do - { - if (c->lookAndFeel != nullptr) - return *(c->lookAndFeel); - - c = c->parentComponent; - } - while (c != nullptr); - - return LookAndFeel::getDefaultLookAndFeel(); -} - -void Component::setLookAndFeel (LookAndFeel* const newLookAndFeel) -{ - if (lookAndFeel != newLookAndFeel) - { - lookAndFeel = newLookAndFeel; - - sendLookAndFeelChange(); - } -} - -void Component::lookAndFeelChanged() -{ -} - -void Component::sendLookAndFeelChange() -{ - repaint(); - - WeakReference safePointer (this); - - lookAndFeelChanged(); - - if (safePointer != nullptr) - { - for (int i = childComponentList.size(); --i >= 0;) - { - childComponentList.getUnchecked (i)->sendLookAndFeelChange(); - - if (safePointer == nullptr) - return; - - i = jmin (i, childComponentList.size()); - } - } -} - -const Colour Component::findColour (const int colourId, const bool inheritFromParent) const -{ - const var* const v = properties.getVarPointer (ComponentHelpers::getColourPropertyId (colourId)); - - if (v != nullptr) - return Colour ((int) *v); - - if (inheritFromParent && parentComponent != nullptr - && (lookAndFeel == nullptr || ! lookAndFeel->isColourSpecified (colourId))) - return parentComponent->findColour (colourId, true); - - return getLookAndFeel().findColour (colourId); -} - -bool Component::isColourSpecified (const int colourId) const -{ - return properties.contains (ComponentHelpers::getColourPropertyId (colourId)); -} - -void Component::removeColour (const int colourId) -{ - if (properties.remove (ComponentHelpers::getColourPropertyId (colourId))) - colourChanged(); -} - -void Component::setColour (const int colourId, const Colour& colour) -{ - if (properties.set (ComponentHelpers::getColourPropertyId (colourId), (int) colour.getARGB())) - colourChanged(); -} - -void Component::copyAllExplicitColoursTo (Component& target) const -{ - bool changed = false; - - for (int i = properties.size(); --i >= 0;) - { - const Identifier name (properties.getName(i)); - - if (name.toString().startsWith ("jcclr_")) - if (target.properties.set (name, properties [name])) - changed = true; - } - - if (changed) - target.colourChanged(); -} - -void Component::colourChanged() -{ -} - -MarkerList* Component::getMarkers (bool /*xAxis*/) -{ - return nullptr; -} - -Component::Positioner::Positioner (Component& component_) noexcept - : component (component_) -{ -} - -Component::Positioner* Component::getPositioner() const noexcept -{ - return positioner; -} - -void Component::setPositioner (Positioner* newPositioner) -{ - // You can only assign a positioner to the component that it was created for! - jassert (newPositioner == nullptr || this == &(newPositioner->getComponent())); - positioner = newPositioner; -} - -Rectangle Component::getLocalBounds() const noexcept -{ - return Rectangle (getWidth(), getHeight()); -} - -Rectangle Component::getBoundsInParent() const noexcept -{ - return affineTransform == nullptr ? bounds - : bounds.toFloat().transformed (*affineTransform).getSmallestIntegerContainer(); -} - -void Component::getVisibleArea (RectangleList& result, const bool includeSiblings) const -{ - result.clear(); - const Rectangle unclipped (ComponentHelpers::getUnclippedArea (*this)); - - if (! unclipped.isEmpty()) - { - result.add (unclipped); - - if (includeSiblings) - { - const Component* const c = getTopLevelComponent(); - - ComponentHelpers::subtractObscuredRegions (*c, result, getLocalPoint (c, Point()), - c->getLocalBounds(), this); - } - - ComponentHelpers::subtractObscuredRegions (*this, result, Point(), unclipped, nullptr); - result.consolidate(); - } -} - -void Component::mouseEnter (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseExit (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseDown (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseUp (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseDrag (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseMove (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseDoubleClick (const MouseEvent&) -{ - // base class does nothing -} - -void Component::mouseWheelMove (const MouseEvent& e, float wheelIncrementX, float wheelIncrementY) -{ - // the base class just passes this event up to its parent.. - - if (parentComponent != nullptr) - parentComponent->mouseWheelMove (e.getEventRelativeTo (parentComponent), - wheelIncrementX, wheelIncrementY); -} - -void Component::resized() -{ - // base class does nothing -} - -void Component::moved() -{ - // base class does nothing -} - -void Component::childBoundsChanged (Component*) -{ - // base class does nothing -} - -void Component::parentSizeChanged() -{ - // base class does nothing -} - -void Component::addComponentListener (ComponentListener* const newListener) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - componentListeners.add (newListener); -} - -void Component::removeComponentListener (ComponentListener* const listenerToRemove) -{ - componentListeners.remove (listenerToRemove); -} - -void Component::inputAttemptWhenModal() -{ - ModalComponentManager::getInstance()->bringModalComponentsToFront(); - getLookAndFeel().playAlertSound(); -} - -bool Component::canModalEventBeSentToComponent (const Component*) -{ - return false; -} - -void Component::internalModalInputAttempt() -{ - Component* const current = getCurrentlyModalComponent(); - - if (current != nullptr) - current->inputAttemptWhenModal(); -} - -void Component::paint (Graphics&) -{ - // all painting is done in the subclasses - - jassert (! isOpaque()); // if your component's opaque, you've gotta paint it! -} - -void Component::paintOverChildren (Graphics&) -{ - // all painting is done in the subclasses -} - -void Component::postCommandMessage (const int commandId) -{ - class CustomCommandMessage : public CallbackMessage - { - public: - CustomCommandMessage (Component* const target_, const int commandId_) - : target (target_), commandId (commandId_) {} - - void messageCallback() - { - if (target.get() != nullptr) // (get() required for VS2003 bug) - target->handleCommandMessage (commandId); - } - - private: - WeakReference target; - int commandId; - }; - - (new CustomCommandMessage (this, commandId))->post(); -} - -void Component::handleCommandMessage (int) -{ - // used by subclasses -} - -void Component::addMouseListener (MouseListener* const newListener, - const bool wantsEventsForAllNestedChildComponents) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - // If you register a component as a mouselistener for itself, it'll receive all the events - // twice - once via the direct callback that all components get anyway, and then again as a listener! - jassert ((newListener != this) || wantsEventsForAllNestedChildComponents); - - if (mouseListeners == nullptr) - mouseListeners = new MouseListenerList(); - - mouseListeners->addListener (newListener, wantsEventsForAllNestedChildComponents); -} - -void Component::removeMouseListener (MouseListener* const listenerToRemove) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (mouseListeners != nullptr) - mouseListeners->removeListener (listenerToRemove); -} - -void Component::internalMouseEnter (MouseInputSource& source, const Point& relativePos, const Time& time) -{ - if (isCurrentlyBlockedByAnotherModalComponent()) - { - // if something else is modal, always just show a normal mouse cursor - source.showMouseCursor (MouseCursor::NormalCursor); - return; - } - - if (flags.repaintOnMouseActivityFlag) - repaint(); - - BailOutChecker checker (this); - - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, 0, false); - mouseEnter (me); - - if (checker.shouldBailOut()) - return; - - Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseEnter, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me); -} - -void Component::internalMouseExit (MouseInputSource& source, const Point& relativePos, const Time& time) -{ - if (flags.repaintOnMouseActivityFlag) - repaint(); - - BailOutChecker checker (this); - - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, 0, false); - - mouseExit (me); - - if (checker.shouldBailOut()) - return; - - Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseExit, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me); -} - -void Component::internalMouseDown (MouseInputSource& source, const Point& relativePos, const Time& time) -{ - Desktop& desktop = Desktop::getInstance(); - - BailOutChecker checker (this); - - if (isCurrentlyBlockedByAnotherModalComponent()) - { - internalModalInputAttempt(); - - if (checker.shouldBailOut()) - return; - - // If processing the input attempt has exited the modal loop, we'll allow the event - // to be delivered.. - if (isCurrentlyBlockedByAnotherModalComponent()) - { - // allow blocked mouse-events to go to global listeners.. - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, - source.getNumberOfMultipleClicks(), false); - - desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me); - return; - } - } - - { - Component* c = this; - - while (c != nullptr) - { - if (c->isBroughtToFrontOnMouseClick()) - { - c->toFront (true); - - if (checker.shouldBailOut()) - return; - } - - c = c->parentComponent; - } - } - - if (! flags.dontFocusOnMouseClickFlag) - { - grabFocusInternal (focusChangedByMouseClick); - - if (checker.shouldBailOut()) - return; - } - - if (flags.repaintOnMouseActivityFlag) - repaint(); - - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, - source.getNumberOfMultipleClicks(), false); - mouseDown (me); - - if (checker.shouldBailOut()) - return; - - desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me); -} - -void Component::internalMouseUp (MouseInputSource& source, const Point& relativePos, const Time& time, const ModifierKeys& oldModifiers) -{ - BailOutChecker checker (this); - - if (flags.repaintOnMouseActivityFlag) - repaint(); - - const MouseEvent me (source, relativePos, - oldModifiers, this, this, time, - getLocalPoint (nullptr, source.getLastMouseDownPosition()), - source.getLastMouseDownTime(), - source.getNumberOfMultipleClicks(), - source.hasMouseMovedSignificantlySincePressed()); - - mouseUp (me); - - if (checker.shouldBailOut()) - return; - - Desktop& desktop = Desktop::getInstance(); - desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseUp, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me); - - if (checker.shouldBailOut()) - return; - - // check for double-click - if (me.getNumberOfClicks() >= 2) - { - mouseDoubleClick (me); - - if (checker.shouldBailOut()) - return; - - desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me); - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me); - } -} - -void Component::internalMouseDrag (MouseInputSource& source, const Point& relativePos, const Time& time) -{ - BailOutChecker checker (this); - - const MouseEvent me (source, relativePos, - source.getCurrentModifiers(), this, this, time, - getLocalPoint (nullptr, source.getLastMouseDownPosition()), - source.getLastMouseDownTime(), - source.getNumberOfMultipleClicks(), - source.hasMouseMovedSignificantlySincePressed()); - - mouseDrag (me); - - if (checker.shouldBailOut()) - return; - - Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseDrag, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me); -} - -void Component::internalMouseMove (MouseInputSource& source, const Point& relativePos, const Time& time) -{ - Desktop& desktop = Desktop::getInstance(); - BailOutChecker checker (this); - - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, 0, false); - - if (isCurrentlyBlockedByAnotherModalComponent()) - { - // allow blocked mouse-events to go to global listeners.. - desktop.sendMouseMove(); - } - else - { - mouseMove (me); - - if (checker.shouldBailOut()) - return; - - desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseMove, me); - - MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me); - } -} - -void Component::internalMouseWheel (MouseInputSource& source, const Point& relativePos, - const Time& time, const float amountX, const float amountY) -{ - Desktop& desktop = Desktop::getInstance(); - BailOutChecker checker (this); - - const float wheelIncrementX = amountX / 256.0f; - const float wheelIncrementY = amountY / 256.0f; - - const MouseEvent me (source, relativePos, source.getCurrentModifiers(), - this, this, time, relativePos, time, 0, false); - - if (isCurrentlyBlockedByAnotherModalComponent()) - { - // allow blocked mouse-events to go to global listeners.. - desktop.mouseListeners.callChecked (checker, &MouseListener::mouseWheelMove, me, wheelIncrementX, wheelIncrementY); - } - else - { - mouseWheelMove (me, wheelIncrementX, wheelIncrementY); - - if (checker.shouldBailOut()) - return; - - desktop.mouseListeners.callChecked (checker, &MouseListener::mouseWheelMove, me, wheelIncrementX, wheelIncrementY); - - if (! checker.shouldBailOut()) - MouseListenerList::sendWheelEvent (*this, checker, me, wheelIncrementX, wheelIncrementY); - } -} - -void Component::sendFakeMouseMove() const -{ - MouseInputSource& mainMouse = Desktop::getInstance().getMainMouseSource(); - - if (! mainMouse.isDragging()) - mainMouse.triggerFakeMove(); -} - -void Component::beginDragAutoRepeat (const int interval) -{ - Desktop::getInstance().beginDragAutoRepeat (interval); -} - -void Component::broughtToFront() -{ -} - -void Component::internalBroughtToFront() -{ - if (flags.hasHeavyweightPeerFlag) - Desktop::getInstance().componentBroughtToFront (this); - - BailOutChecker checker (this); - broughtToFront(); - - if (checker.shouldBailOut()) - return; - - componentListeners.callChecked (checker, &ComponentListener::componentBroughtToFront, *this); - - if (checker.shouldBailOut()) - return; - - // When brought to the front and there's a modal component blocking this one, - // we need to bring the modal one to the front instead.. - Component* const cm = getCurrentlyModalComponent(); - - if (cm != nullptr && cm->getTopLevelComponent() != getTopLevelComponent()) - ModalComponentManager::getInstance()->bringModalComponentsToFront (false); // very important that this is false, otherwise in win32, - // non-front components can't get focus when another modal comp is - // active, and therefore can't receive mouse-clicks -} - -void Component::focusGained (FocusChangeType) -{ - // base class does nothing -} - -void Component::internalFocusGain (const FocusChangeType cause) -{ - internalFocusGain (cause, WeakReference (this)); -} - -void Component::internalFocusGain (const FocusChangeType cause, const WeakReference& safePointer) -{ - focusGained (cause); - - if (safePointer != nullptr) - internalChildFocusChange (cause, safePointer); -} - -void Component::focusLost (FocusChangeType) -{ - // base class does nothing -} - -void Component::internalFocusLoss (const FocusChangeType cause) -{ - WeakReference safePointer (this); - - focusLost (focusChangedDirectly); - - if (safePointer != nullptr) - internalChildFocusChange (cause, safePointer); -} - -void Component::focusOfChildComponentChanged (FocusChangeType /*cause*/) -{ - // base class does nothing -} - -void Component::internalChildFocusChange (FocusChangeType cause, const WeakReference& safePointer) -{ - const bool childIsNowFocused = hasKeyboardFocus (true); - - if (flags.childCompFocusedFlag != childIsNowFocused) - { - flags.childCompFocusedFlag = childIsNowFocused; - - focusOfChildComponentChanged (cause); - - if (safePointer == nullptr) - return; - } - - if (parentComponent != nullptr) - parentComponent->internalChildFocusChange (cause, WeakReference (parentComponent)); -} - -bool Component::isEnabled() const noexcept -{ - return (! flags.isDisabledFlag) - && (parentComponent == nullptr || parentComponent->isEnabled()); -} - -void Component::setEnabled (const bool shouldBeEnabled) -{ - if (flags.isDisabledFlag == shouldBeEnabled) - { - flags.isDisabledFlag = ! shouldBeEnabled; - - // if any parent components are disabled, setting our flag won't make a difference, - // so no need to send a change message - if (parentComponent == nullptr || parentComponent->isEnabled()) - sendEnablementChangeMessage(); - } -} - -void Component::sendEnablementChangeMessage() -{ - WeakReference safePointer (this); - - enablementChanged(); - - if (safePointer == nullptr) - return; - - for (int i = getNumChildComponents(); --i >= 0;) - { - Component* const c = getChildComponent (i); - - if (c != nullptr) - { - c->sendEnablementChangeMessage(); - - if (safePointer == nullptr) - return; - } - } -} - -void Component::enablementChanged() -{ -} - -void Component::setWantsKeyboardFocus (const bool wantsFocus) noexcept -{ - flags.wantsFocusFlag = wantsFocus; -} - -void Component::setMouseClickGrabsKeyboardFocus (const bool shouldGrabFocus) -{ - flags.dontFocusOnMouseClickFlag = ! shouldGrabFocus; -} - -bool Component::getMouseClickGrabsKeyboardFocus() const noexcept -{ - return ! flags.dontFocusOnMouseClickFlag; -} - -bool Component::getWantsKeyboardFocus() const noexcept -{ - return flags.wantsFocusFlag && ! flags.isDisabledFlag; -} - -void Component::setFocusContainer (const bool shouldBeFocusContainer) noexcept -{ - flags.isFocusContainerFlag = shouldBeFocusContainer; -} - -bool Component::isFocusContainer() const noexcept -{ - return flags.isFocusContainerFlag; -} - -static const Identifier juce_explicitFocusOrderId ("_jexfo"); - -int Component::getExplicitFocusOrder() const -{ - return properties [juce_explicitFocusOrderId]; -} - -void Component::setExplicitFocusOrder (const int newFocusOrderIndex) -{ - properties.set (juce_explicitFocusOrderId, newFocusOrderIndex); -} - -KeyboardFocusTraverser* Component::createFocusTraverser() -{ - if (flags.isFocusContainerFlag || parentComponent == nullptr) - return new KeyboardFocusTraverser(); - - return parentComponent->createFocusTraverser(); -} - -void Component::takeKeyboardFocus (const FocusChangeType cause) -{ - // give the focus to this component - if (currentlyFocusedComponent != this) - { - // get the focus onto our desktop window - ComponentPeer* const peer = getPeer(); - - if (peer != nullptr) - { - WeakReference safePointer (this); - - peer->grabFocus(); - - if (peer->isFocused() && currentlyFocusedComponent != this) - { - WeakReference componentLosingFocus (currentlyFocusedComponent); - - currentlyFocusedComponent = this; - - Desktop::getInstance().triggerFocusCallback(); - - // call this after setting currentlyFocusedComponent so that the one that's - // losing it has a chance to see where focus is going - if (componentLosingFocus != nullptr) - componentLosingFocus->internalFocusLoss (cause); - - if (currentlyFocusedComponent == this) - internalFocusGain (cause, safePointer); - } - } - } -} - -void Component::grabFocusInternal (const FocusChangeType cause, const bool canTryParent) -{ - if (isShowing()) - { - if (flags.wantsFocusFlag && (isEnabled() || parentComponent == nullptr)) - { - takeKeyboardFocus (cause); - } - else - { - if (isParentOf (currentlyFocusedComponent) - && currentlyFocusedComponent->isShowing()) - { - // do nothing if the focused component is actually a child of ours.. - } - else - { - // find the default child component.. - ScopedPointer traverser (createFocusTraverser()); - - if (traverser != nullptr) - { - Component* const defaultComp = traverser->getDefaultComponent (this); - traverser = nullptr; - - if (defaultComp != nullptr) - { - defaultComp->grabFocusInternal (cause, false); - return; - } - } - - if (canTryParent && parentComponent != nullptr) - { - // if no children want it and we're allowed to try our parent comp, - // then pass up to parent, which will try our siblings. - parentComponent->grabFocusInternal (cause, true); - } - } - } - } -} - -void Component::grabKeyboardFocus() -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - grabFocusInternal (focusChangedDirectly); -} - -void Component::moveKeyboardFocusToSibling (const bool moveToNext) -{ - // if component methods are being called from threads other than the message - // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. - CHECK_MESSAGE_MANAGER_IS_LOCKED - - if (parentComponent != nullptr) - { - ScopedPointer traverser (createFocusTraverser()); - - if (traverser != nullptr) - { - Component* const nextComp = moveToNext ? traverser->getNextComponent (this) - : traverser->getPreviousComponent (this); - traverser = nullptr; - - if (nextComp != nullptr) - { - if (nextComp->isCurrentlyBlockedByAnotherModalComponent()) - { - WeakReference nextCompPointer (nextComp); - internalModalInputAttempt(); - - if (nextCompPointer == nullptr || nextComp->isCurrentlyBlockedByAnotherModalComponent()) - return; - } - - nextComp->grabFocusInternal (focusChangedByTabKey); - return; - } - } - - parentComponent->moveKeyboardFocusToSibling (moveToNext); - } -} - -bool Component::hasKeyboardFocus (const bool trueIfChildIsFocused) const -{ - return (currentlyFocusedComponent == this) - || (trueIfChildIsFocused && isParentOf (currentlyFocusedComponent)); -} - -Component* JUCE_CALLTYPE Component::getCurrentlyFocusedComponent() noexcept -{ - return currentlyFocusedComponent; -} - -void Component::giveAwayFocus (const bool sendFocusLossEvent) -{ - Component* const componentLosingFocus = currentlyFocusedComponent; - currentlyFocusedComponent = nullptr; - - if (sendFocusLossEvent && componentLosingFocus != nullptr) - componentLosingFocus->internalFocusLoss (focusChangedDirectly); - - Desktop::getInstance().triggerFocusCallback(); -} - -bool Component::isMouseOver (const bool includeChildren) const -{ - const Desktop& desktop = Desktop::getInstance(); - - for (int i = desktop.getNumMouseSources(); --i >= 0;) - { - const MouseInputSource* const mi = desktop.getMouseSource(i); - - Component* const c = mi->getComponentUnderMouse(); - - if ((c == this || (includeChildren && isParentOf (c))) - && c->reallyContains (c->getLocalPoint (nullptr, mi->getScreenPosition()), false)) - return true; - } - - return false; -} - -bool Component::isMouseButtonDown() const -{ - const Desktop& desktop = Desktop::getInstance(); - - for (int i = desktop.getNumMouseSources(); --i >= 0;) - { - const MouseInputSource* const mi = desktop.getMouseSource(i); - - if (mi->isDragging() && mi->getComponentUnderMouse() == this) - return true; - } - - return false; -} - -bool Component::isMouseOverOrDragging() const -{ - const Desktop& desktop = Desktop::getInstance(); - - for (int i = desktop.getNumMouseSources(); --i >= 0;) - if (desktop.getMouseSource(i)->getComponentUnderMouse() == this) - return true; - - return false; -} - -bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() noexcept -{ - return ModifierKeys::getCurrentModifiers().isAnyMouseButtonDown(); -} - -Point Component::getMouseXYRelative() const -{ - return getLocalPoint (nullptr, Desktop::getMousePosition()); -} - -Rectangle Component::getParentMonitorArea() const -{ - return Desktop::getInstance().getMonitorAreaContaining (getScreenBounds().getCentre()); -} - -void Component::addKeyListener (KeyListener* const newListener) -{ - if (keyListeners == nullptr) - keyListeners = new Array (); - - keyListeners->addIfNotAlreadyThere (newListener); -} - -void Component::removeKeyListener (KeyListener* const listenerToRemove) -{ - if (keyListeners != nullptr) - keyListeners->removeValue (listenerToRemove); -} - -bool Component::keyPressed (const KeyPress&) -{ - return false; -} - -bool Component::keyStateChanged (const bool /*isKeyDown*/) -{ - return false; -} - -void Component::modifierKeysChanged (const ModifierKeys& modifiers) -{ - if (parentComponent != nullptr) - parentComponent->modifierKeysChanged (modifiers); -} - -void Component::internalModifierKeysChanged() -{ - sendFakeMouseMove(); - - modifierKeysChanged (ModifierKeys::getCurrentModifiers()); -} - -ComponentPeer* Component::getPeer() const -{ - if (flags.hasHeavyweightPeerFlag) - return ComponentPeer::getPeerFor (this); - else if (parentComponent == nullptr) - return nullptr; - - return parentComponent->getPeer(); -} - -Component::BailOutChecker::BailOutChecker (Component* const component) - : safePointer (component) -{ - jassert (component != nullptr); -} - -bool Component::BailOutChecker::shouldBailOut() const noexcept -{ - return safePointer == nullptr; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Component.cpp ***/ - - - -/*** Start of inlined file: juce_ComponentListener.cpp ***/ -BEGIN_JUCE_NAMESPACE - -void ComponentListener::componentMovedOrResized (Component&, bool, bool) {} -void ComponentListener::componentBroughtToFront (Component&) {} -void ComponentListener::componentVisibilityChanged (Component&) {} -void ComponentListener::componentChildrenChanged (Component&) {} -void ComponentListener::componentParentHierarchyChanged (Component&) {} -void ComponentListener::componentNameChanged (Component&) {} -void ComponentListener::componentBeingDeleted (Component&) {} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ComponentListener.cpp ***/ - - -/*** Start of inlined file: juce_Desktop.cpp ***/ -BEGIN_JUCE_NAMESPACE - -Desktop::Desktop() - : mouseClickCounter (0), - kioskModeComponent (nullptr), - allowedOrientations (allOrientations) -{ - createMouseInputSources(); - refreshMonitorSizes(); -} - -Desktop::~Desktop() -{ - setScreenSaverEnabled (true); - - jassert (instance == this); - instance = nullptr; - - // doh! If you don't delete all your windows before exiting, you're going to - // be leaking memory! - jassert (desktopComponents.size() == 0); -} - -Desktop& JUCE_CALLTYPE Desktop::getInstance() -{ - if (instance == nullptr) - instance = new Desktop(); - - return *instance; -} - -Desktop* Desktop::instance = nullptr; - -void Desktop::refreshMonitorSizes() -{ - Array > oldClipped, oldUnclipped; - oldClipped.swapWithArray (monitorCoordsClipped); - oldUnclipped.swapWithArray (monitorCoordsUnclipped); - - getCurrentMonitorPositions (monitorCoordsClipped, true); - getCurrentMonitorPositions (monitorCoordsUnclipped, false); - jassert (monitorCoordsClipped.size() == monitorCoordsUnclipped.size()); - - if (oldClipped != monitorCoordsClipped - || oldUnclipped != monitorCoordsUnclipped) - { - for (int i = ComponentPeer::getNumPeers(); --i >= 0;) - { - ComponentPeer* const p = ComponentPeer::getPeer (i); - if (p != nullptr) - p->handleScreenSizeChange(); - } - } -} - -int Desktop::getNumDisplayMonitors() const noexcept -{ - return monitorCoordsClipped.size(); -} - -const Rectangle Desktop::getDisplayMonitorCoordinates (const int index, const bool clippedToWorkArea) const noexcept -{ - return clippedToWorkArea ? monitorCoordsClipped [index] - : monitorCoordsUnclipped [index]; -} - -const RectangleList Desktop::getAllMonitorDisplayAreas (const bool clippedToWorkArea) const -{ - RectangleList rl; - - for (int i = 0; i < getNumDisplayMonitors(); ++i) - rl.addWithoutMerging (getDisplayMonitorCoordinates (i, clippedToWorkArea)); - - return rl; -} - -const Rectangle Desktop::getMainMonitorArea (const bool clippedToWorkArea) const noexcept -{ - return getDisplayMonitorCoordinates (0, clippedToWorkArea); -} - -const Rectangle Desktop::getMonitorAreaContaining (const Point& position, const bool clippedToWorkArea) const -{ - Rectangle best (getMainMonitorArea (clippedToWorkArea)); - double bestDistance = 1.0e10; - - for (int i = getNumDisplayMonitors(); --i >= 0;) - { - const Rectangle rect (getDisplayMonitorCoordinates (i, clippedToWorkArea)); - - if (rect.contains (position)) - return rect; - - const double distance = rect.getCentre().getDistanceFrom (position); - - if (distance < bestDistance) - { - bestDistance = distance; - best = rect; - } - } - - return best; -} - -int Desktop::getNumComponents() const noexcept -{ - return desktopComponents.size(); -} - -Component* Desktop::getComponent (const int index) const noexcept -{ - return desktopComponents [index]; -} - -Component* Desktop::findComponentAt (const Point& screenPosition) const -{ - for (int i = desktopComponents.size(); --i >= 0;) - { - Component* const c = desktopComponents.getUnchecked(i); - - if (c->isVisible()) - { - const Point relative (c->getLocalPoint (nullptr, screenPosition)); - - if (c->contains (relative)) - return c->getComponentAt (relative); - } - } - - return nullptr; -} - -LookAndFeel& Desktop::getDefaultLookAndFeel() noexcept -{ - if (currentLookAndFeel == nullptr) - { - if (defaultLookAndFeel == nullptr) - defaultLookAndFeel = new LookAndFeel(); - - currentLookAndFeel = defaultLookAndFeel; - } - - return *currentLookAndFeel; -} - -void Desktop::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) -{ - currentLookAndFeel = newDefaultLookAndFeel; - - for (int i = getNumComponents(); --i >= 0;) - { - Component* const c = getComponent (i); - - if (c != nullptr) - c->sendLookAndFeelChange(); - } -} - -void Desktop::addDesktopComponent (Component* const c) -{ - jassert (c != nullptr); - jassert (! desktopComponents.contains (c)); - desktopComponents.addIfNotAlreadyThere (c); -} - -void Desktop::removeDesktopComponent (Component* const c) -{ - desktopComponents.removeValue (c); -} - -void Desktop::componentBroughtToFront (Component* const c) -{ - const int index = desktopComponents.indexOf (c); - jassert (index >= 0); - - if (index >= 0) - { - int newIndex = -1; - - if (! c->isAlwaysOnTop()) - { - newIndex = desktopComponents.size(); - - while (newIndex > 0 && desktopComponents.getUnchecked (newIndex - 1)->isAlwaysOnTop()) - --newIndex; - - --newIndex; - } - - desktopComponents.move (index, newIndex); - } -} - -const Point Desktop::getMousePosition() -{ - return getInstance().getMainMouseSource().getScreenPosition(); -} - -const Point Desktop::getLastMouseDownPosition() -{ - return getInstance().getMainMouseSource().getLastMouseDownPosition(); -} - -int Desktop::getMouseButtonClickCounter() -{ - return getInstance().mouseClickCounter; -} - -void Desktop::incrementMouseClickCounter() noexcept -{ - ++mouseClickCounter; -} - -int Desktop::getNumDraggingMouseSources() const noexcept -{ - int num = 0; - for (int i = mouseSources.size(); --i >= 0;) - if (mouseSources.getUnchecked(i)->isDragging()) - ++num; - - return num; -} - -MouseInputSource* Desktop::getDraggingMouseSource (int index) const noexcept -{ - int num = 0; - for (int i = mouseSources.size(); --i >= 0;) - { - MouseInputSource* const mi = mouseSources.getUnchecked(i); - - if (mi->isDragging()) - { - if (index == num) - return mi; - - ++num; - } - } - - return nullptr; -} - -class MouseDragAutoRepeater : public Timer -{ -public: - MouseDragAutoRepeater() {} - - void timerCallback() - { - Desktop& desktop = Desktop::getInstance(); - int numMiceDown = 0; - - for (int i = desktop.getNumMouseSources(); --i >= 0;) - { - MouseInputSource* const source = desktop.getMouseSource(i); - if (source->isDragging()) - { - source->triggerFakeMove(); - ++numMiceDown; - } - } - - if (numMiceDown == 0) - desktop.beginDragAutoRepeat (0); - } - -private: - JUCE_DECLARE_NON_COPYABLE (MouseDragAutoRepeater); -}; - -void Desktop::beginDragAutoRepeat (const int interval) -{ - if (interval > 0) - { - if (dragRepeater == nullptr) - dragRepeater = new MouseDragAutoRepeater(); - - if (dragRepeater->getTimerInterval() != interval) - dragRepeater->startTimer (interval); - } - else - { - dragRepeater = nullptr; - } -} - -void Desktop::addFocusChangeListener (FocusChangeListener* const listener) -{ - focusListeners.add (listener); -} - -void Desktop::removeFocusChangeListener (FocusChangeListener* const listener) -{ - focusListeners.remove (listener); -} - -void Desktop::triggerFocusCallback() -{ - triggerAsyncUpdate(); -} - -void Desktop::handleAsyncUpdate() -{ - // The component may be deleted during this operation, but we'll use a SafePointer rather than a - // BailOutChecker so that any remaining listeners will still get a callback (with a null pointer). - WeakReference currentFocus (Component::getCurrentlyFocusedComponent()); - focusListeners.call (&FocusChangeListener::globalFocusChanged, currentFocus); -} - -void Desktop::resetTimer() -{ - if (mouseListeners.size() == 0) - stopTimer(); - else - startTimer (100); - - lastFakeMouseMove = getMousePosition(); -} - -ListenerList & Desktop::getMouseListeners() -{ - resetTimer(); - return mouseListeners; -} - -void Desktop::addGlobalMouseListener (MouseListener* const listener) -{ - mouseListeners.add (listener); - resetTimer(); -} - -void Desktop::removeGlobalMouseListener (MouseListener* const listener) -{ - mouseListeners.remove (listener); - resetTimer(); -} - -void Desktop::timerCallback() -{ - if (lastFakeMouseMove != getMousePosition()) - sendMouseMove(); -} - -void Desktop::sendMouseMove() -{ - if (! mouseListeners.isEmpty()) - { - startTimer (20); - - lastFakeMouseMove = getMousePosition(); - - Component* const target = findComponentAt (lastFakeMouseMove); - - if (target != nullptr) - { - Component::BailOutChecker checker (target); - const Point pos (target->getLocalPoint (nullptr, lastFakeMouseMove)); - const Time now (Time::getCurrentTime()); - - const MouseEvent me (getMainMouseSource(), pos, ModifierKeys::getCurrentModifiers(), - target, target, now, pos, now, 0, false); - - if (me.mods.isAnyMouseButtonDown()) - mouseListeners.callChecked (checker, &MouseListener::mouseDrag, me); - else - mouseListeners.callChecked (checker, &MouseListener::mouseMove, me); - } - } -} - -void Desktop::setKioskModeComponent (Component* componentToUse, const bool allowMenusAndBars) -{ - if (kioskModeComponent != componentToUse) - { - // agh! Don't delete or remove a component from the desktop while it's still the kiosk component! - jassert (kioskModeComponent == nullptr || ComponentPeer::getPeerFor (kioskModeComponent) != nullptr); - - if (kioskModeComponent != nullptr) - { - setKioskComponent (kioskModeComponent, false, allowMenusAndBars); - - kioskModeComponent->setBounds (kioskComponentOriginalBounds); - } - - kioskModeComponent = componentToUse; - - if (kioskModeComponent != nullptr) - { - // Only components that are already on the desktop can be put into kiosk mode! - jassert (ComponentPeer::getPeerFor (kioskModeComponent) != nullptr); - - kioskComponentOriginalBounds = kioskModeComponent->getBounds(); - - setKioskComponent (kioskModeComponent, true, allowMenusAndBars); - } - } -} - -void Desktop::setOrientationsEnabled (const int newOrientations) -{ - // Dodgy set of flags being passed here! Make sure you specify at least one permitted orientation. - jassert (newOrientations != 0 && (newOrientations & ~allOrientations) == 0); - - allowedOrientations = newOrientations; -} - -bool Desktop::isOrientationEnabled (const DisplayOrientation orientation) const noexcept -{ - // Make sure you only pass one valid flag in here... - jassert (orientation == upright || orientation == upsideDown || orientation == rotatedClockwise || orientation == rotatedAntiClockwise); - - return (allowedOrientations & orientation) != 0; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Desktop.cpp ***/ - - -/*** Start of inlined file: juce_ModalComponentManager.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class ModalComponentManager::ModalItem : public ComponentMovementWatcher -{ -public: - ModalItem (Component* const comp) - : ComponentMovementWatcher (comp), - component (comp), returnValue (0), isActive (true) - { - jassert (comp != nullptr); - } - - void componentMovedOrResized (bool, bool) {} - - void componentPeerChanged() - { - if (! component->isShowing()) - cancel(); - } - - void componentVisibilityChanged() - { - if (! component->isShowing()) - cancel(); - } - - void componentBeingDeleted (Component& comp) - { - ComponentMovementWatcher::componentBeingDeleted (comp); - - if (component == &comp || comp.isParentOf (component)) - cancel(); - } - - void cancel() - { - if (isActive) - { - isActive = false; - ModalComponentManager::getInstance()->triggerAsyncUpdate(); - } - } - - Component* component; - OwnedArray callbacks; - int returnValue; - bool isActive; - -private: - JUCE_DECLARE_NON_COPYABLE (ModalItem); -}; - -ModalComponentManager::ModalComponentManager() -{ -} - -ModalComponentManager::~ModalComponentManager() -{ - clearSingletonInstance(); -} - -juce_ImplementSingleton_SingleThreaded (ModalComponentManager); - -void ModalComponentManager::startModal (Component* component) -{ - if (component != nullptr) - stack.add (new ModalItem (component)); -} - -void ModalComponentManager::attachCallback (Component* component, Callback* callback) -{ - if (callback != nullptr) - { - ScopedPointer callbackDeleter (callback); - - for (int i = stack.size(); --i >= 0;) - { - ModalItem* const item = stack.getUnchecked(i); - - if (item->component == component) - { - item->callbacks.add (callback); - callbackDeleter.release(); - break; - } - } - } -} - -void ModalComponentManager::endModal (Component* component) -{ - for (int i = stack.size(); --i >= 0;) - { - ModalItem* const item = stack.getUnchecked(i); - - if (item->component == component) - item->cancel(); - } -} - -void ModalComponentManager::endModal (Component* component, int returnValue) -{ - for (int i = stack.size(); --i >= 0;) - { - ModalItem* const item = stack.getUnchecked(i); - - if (item->component == component) - { - item->returnValue = returnValue; - item->cancel(); - } - } -} - -int ModalComponentManager::getNumModalComponents() const -{ - int n = 0; - for (int i = 0; i < stack.size(); ++i) - if (stack.getUnchecked(i)->isActive) - ++n; - - return n; -} - -Component* ModalComponentManager::getModalComponent (const int index) const -{ - int n = 0; - for (int i = stack.size(); --i >= 0;) - { - const ModalItem* const item = stack.getUnchecked(i); - if (item->isActive) - if (n++ == index) - return item->component; - } - - return nullptr; -} - -bool ModalComponentManager::isModal (Component* const comp) const -{ - for (int i = stack.size(); --i >= 0;) - { - const ModalItem* const item = stack.getUnchecked(i); - if (item->isActive && item->component == comp) - return true; - } - - return false; -} - -bool ModalComponentManager::isFrontModalComponent (Component* const comp) const -{ - return comp == getModalComponent (0); -} - -void ModalComponentManager::handleAsyncUpdate() -{ - for (int i = stack.size(); --i >= 0;) - { - const ModalItem* const item = stack.getUnchecked(i); - - if (! item->isActive) - { - ScopedPointer deleter (stack.removeAndReturn (i)); - - for (int j = item->callbacks.size(); --j >= 0;) - item->callbacks.getUnchecked(j)->modalStateFinished (item->returnValue); - } - } -} - -void ModalComponentManager::bringModalComponentsToFront (bool topOneShouldGrabFocus) -{ - ComponentPeer* lastOne = nullptr; - - for (int i = 0; i < getNumModalComponents(); ++i) - { - Component* const c = getModalComponent (i); - - if (c == nullptr) - break; - - ComponentPeer* peer = c->getPeer(); - - if (peer != nullptr && peer != lastOne) - { - if (lastOne == nullptr) - { - peer->toFront (topOneShouldGrabFocus); - - if (topOneShouldGrabFocus) - peer->grabFocus(); - } - else - peer->toBehind (lastOne); - - lastOne = peer; - } - } -} - -#if JUCE_MODAL_LOOPS_PERMITTED -class ModalComponentManager::ReturnValueRetriever : public ModalComponentManager::Callback -{ -public: - ReturnValueRetriever (int& value_, bool& finished_) : value (value_), finished (finished_) {} - - void modalStateFinished (int returnValue) - { - finished = true; - value = returnValue; - } - -private: - int& value; - bool& finished; - - JUCE_DECLARE_NON_COPYABLE (ReturnValueRetriever); -}; - -int ModalComponentManager::runEventLoopForCurrentComponent() -{ - // This can only be run from the message thread! - jassert (MessageManager::getInstance()->isThisTheMessageThread()); - - Component* currentlyModal = getModalComponent (0); - - if (currentlyModal == nullptr) - return 0; - - WeakReference prevFocused (Component::getCurrentlyFocusedComponent()); - - int returnValue = 0; - bool finished = false; - attachCallback (currentlyModal, new ReturnValueRetriever (returnValue, finished)); - - JUCE_TRY - { - while (! finished) - { - if (! MessageManager::getInstance()->runDispatchLoopUntil (20)) - break; - } - } - JUCE_CATCH_EXCEPTION - - if (prevFocused != nullptr) - prevFocused->grabKeyboardFocus(); - - return returnValue; -} -#endif - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ModalComponentManager.cpp ***/ - - -/*** Start of inlined file: juce_ArrowButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ArrowButton::ArrowButton (const String& name, - float arrowDirectionInRadians, - const Colour& arrowColour) - : Button (name), - colour (arrowColour) -{ - path.lineTo (0.0f, 1.0f); - path.lineTo (1.0f, 0.5f); - path.closeSubPath(); - - path.applyTransform (AffineTransform::rotation (float_Pi * 2.0f * arrowDirectionInRadians, - 0.5f, 0.5f)); - - setComponentEffect (&shadow); - updateShadowAndOffset(); -} - -ArrowButton::~ArrowButton() -{ -} - -void ArrowButton::paintButton (Graphics& g, - bool /*isMouseOverButton*/, - bool /*isButtonDown*/) -{ - g.setColour (colour); - - g.fillPath (path, path.getTransformToScaleToFit ((float) offset, - (float) offset, - (float) (getWidth() - 3), - (float) (getHeight() - 3), - false)); -} - -void ArrowButton::buttonStateChanged() -{ - updateShadowAndOffset(); -} - -void ArrowButton::updateShadowAndOffset() -{ - offset = (isDown()) ? 1 : 0; - - shadow.setShadowProperties ((isDown()) ? 1.2f : 3.0f, - 0.3f, -1, 0); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ArrowButton.cpp ***/ - - -/*** Start of inlined file: juce_Button.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class Button::RepeatTimer : public Timer -{ -public: - RepeatTimer (Button& owner_) : owner (owner_) {} - void timerCallback() { owner.repeatTimerCallback(); } - -private: - Button& owner; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RepeatTimer); -}; - -Button::Button (const String& name) - : Component (name), - text (name), - buttonPressTime (0), - lastRepeatTime (0), - commandManagerToUse (nullptr), - autoRepeatDelay (-1), - autoRepeatSpeed (0), - autoRepeatMinimumDelay (-1), - radioGroupId (0), - commandID (0), - connectedEdgeFlags (0), - buttonState (buttonNormal), - lastToggleState (false), - clickTogglesState (false), - needsToRelease (false), - needsRepainting (false), - isKeyDown (false), - triggerOnMouseDown (false), - generateTooltip (false) -{ - setWantsKeyboardFocus (true); - isOn.addListener (this); -} - -Button::~Button() -{ - isOn.removeListener (this); - - if (commandManagerToUse != nullptr) - commandManagerToUse->removeListener (this); - - repeatTimer = nullptr; - clearShortcuts(); -} - -void Button::setButtonText (const String& newText) -{ - if (text != newText) - { - text = newText; - repaint(); - } -} - -void Button::setTooltip (const String& newTooltip) -{ - SettableTooltipClient::setTooltip (newTooltip); - generateTooltip = false; -} - -const String Button::getTooltip() -{ - if (generateTooltip && commandManagerToUse != nullptr && commandID != 0) - { - String tt (commandManagerToUse->getDescriptionOfCommand (commandID)); - - Array keyPresses (commandManagerToUse->getKeyMappings()->getKeyPressesAssignedToCommand (commandID)); - - for (int i = 0; i < keyPresses.size(); ++i) - { - const String key (keyPresses.getReference(i).getTextDescription()); - - tt << " ["; - - if (key.length() == 1) - tt << TRANS("shortcut") << ": '" << key << "']"; - else - tt << key << ']'; - } - - return tt; - } - - return SettableTooltipClient::getTooltip(); -} - -void Button::setConnectedEdges (const int connectedEdgeFlags_) -{ - if (connectedEdgeFlags != connectedEdgeFlags_) - { - connectedEdgeFlags = connectedEdgeFlags_; - repaint(); - } -} - -void Button::setToggleState (const bool shouldBeOn, - const bool sendChangeNotification) -{ - if (shouldBeOn != lastToggleState) - { - if (isOn != shouldBeOn) // this test means that if the value is void rather than explicitly set to - isOn = shouldBeOn; // false, it won't be changed unless the required value is true. - - lastToggleState = shouldBeOn; - repaint(); - - WeakReference deletionWatcher (this); - - if (sendChangeNotification) - { - sendClickMessage (ModifierKeys()); - - if (deletionWatcher == nullptr) - return; - } - - if (lastToggleState) - { - turnOffOtherButtonsInGroup (sendChangeNotification); - - if (deletionWatcher == nullptr) - return; - } - - sendStateMessage(); - } -} - -void Button::setClickingTogglesState (const bool shouldToggle) noexcept -{ - clickTogglesState = shouldToggle; - - // if you've got clickTogglesState turned on, you shouldn't also connect the button - // up to be a command invoker. Instead, your command handler must flip the state of whatever - // it is that this button represents, and the button will update its state to reflect this - // in the applicationCommandListChanged() method. - jassert (commandManagerToUse == nullptr || ! clickTogglesState); -} - -bool Button::getClickingTogglesState() const noexcept -{ - return clickTogglesState; -} - -void Button::valueChanged (Value& value) -{ - if (value.refersToSameSourceAs (isOn)) - setToggleState (isOn.getValue(), true); -} - -void Button::setRadioGroupId (const int newGroupId) -{ - if (radioGroupId != newGroupId) - { - radioGroupId = newGroupId; - - if (lastToggleState) - turnOffOtherButtonsInGroup (true); - } -} - -void Button::turnOffOtherButtonsInGroup (const bool sendChangeNotification) -{ - Component* const p = getParentComponent(); - - if (p != nullptr && radioGroupId != 0) - { - WeakReference deletionWatcher (this); - - for (int i = p->getNumChildComponents(); --i >= 0;) - { - Component* const c = p->getChildComponent (i); - - if (c != this) - { - Button* const b = dynamic_cast (c); - - if (b != nullptr && b->getRadioGroupId() == radioGroupId) - { - b->setToggleState (false, sendChangeNotification); - - if (deletionWatcher == nullptr) - return; - } - } - } - } -} - -void Button::enablementChanged() -{ - updateState(); - repaint(); -} - -Button::ButtonState Button::updateState() -{ - return updateState (isMouseOver (true), isMouseButtonDown()); -} - -Button::ButtonState Button::updateState (const bool over, const bool down) -{ - ButtonState newState = buttonNormal; - - if (isEnabled() && isVisible() && ! isCurrentlyBlockedByAnotherModalComponent()) - { - if ((down && (over || (triggerOnMouseDown && buttonState == buttonDown))) || isKeyDown) - newState = buttonDown; - else if (over) - newState = buttonOver; - } - - setState (newState); - return newState; -} - -void Button::setState (const ButtonState newState) -{ - if (buttonState != newState) - { - buttonState = newState; - repaint(); - - if (buttonState == buttonDown) - { - buttonPressTime = Time::getApproximateMillisecondCounter(); - lastRepeatTime = 0; - } - - sendStateMessage(); - } -} - -bool Button::isDown() const noexcept -{ - return buttonState == buttonDown; -} - -bool Button::isOver() const noexcept -{ - return buttonState != buttonNormal; -} - -void Button::buttonStateChanged() -{ -} - -uint32 Button::getMillisecondsSinceButtonDown() const noexcept -{ - const uint32 now = Time::getApproximateMillisecondCounter(); - return now > buttonPressTime ? now - buttonPressTime : 0; -} - -void Button::setTriggeredOnMouseDown (const bool isTriggeredOnMouseDown) noexcept -{ - triggerOnMouseDown = isTriggeredOnMouseDown; -} - -void Button::clicked() -{ -} - -void Button::clicked (const ModifierKeys& /*modifiers*/) -{ - clicked(); -} - -static const int clickMessageId = 0x2f3f4f99; - -void Button::triggerClick() -{ - postCommandMessage (clickMessageId); -} - -void Button::internalClickCallback (const ModifierKeys& modifiers) -{ - if (clickTogglesState) - setToggleState ((radioGroupId != 0) || ! lastToggleState, false); - - sendClickMessage (modifiers); -} - -void Button::flashButtonState() -{ - if (isEnabled()) - { - needsToRelease = true; - setState (buttonDown); - getRepeatTimer().startTimer (100); - } -} - -void Button::handleCommandMessage (int commandId) -{ - if (commandId == clickMessageId) - { - if (isEnabled()) - { - flashButtonState(); - internalClickCallback (ModifierKeys::getCurrentModifiers()); - } - } - else - { - Component::handleCommandMessage (commandId); - } -} - -void Button::addListener (ButtonListener* const newListener) -{ - buttonListeners.add (newListener); -} - -void Button::removeListener (ButtonListener* const listener) -{ - buttonListeners.remove (listener); -} - -void Button::addButtonListener (ButtonListener* l) { addListener (l); } -void Button::removeButtonListener (ButtonListener* l) { removeListener (l); } - -void Button::sendClickMessage (const ModifierKeys& modifiers) -{ - Component::BailOutChecker checker (this); - - if (commandManagerToUse != nullptr && commandID != 0) - { - ApplicationCommandTarget::InvocationInfo info (commandID); - info.invocationMethod = ApplicationCommandTarget::InvocationInfo::fromButton; - info.originatingComponent = this; - - commandManagerToUse->invoke (info, true); - } - - clicked (modifiers); - - if (! checker.shouldBailOut()) - buttonListeners.callChecked (checker, &ButtonListener::buttonClicked, this); // (can't use Button::Listener due to idiotic VC2005 bug) -} - -void Button::sendStateMessage() -{ - Component::BailOutChecker checker (this); - - buttonStateChanged(); - - if (! checker.shouldBailOut()) - buttonListeners.callChecked (checker, &ButtonListener::buttonStateChanged, this); -} - -void Button::paint (Graphics& g) -{ - if (needsToRelease && isEnabled()) - { - needsToRelease = false; - needsRepainting = true; - } - - paintButton (g, isOver(), isDown()); -} - -void Button::mouseEnter (const MouseEvent&) -{ - updateState (true, false); -} - -void Button::mouseExit (const MouseEvent&) -{ - updateState (false, false); -} - -void Button::mouseDown (const MouseEvent& e) -{ - updateState (true, true); - - if (isDown()) - { - if (autoRepeatDelay >= 0) - getRepeatTimer().startTimer (autoRepeatDelay); - - if (triggerOnMouseDown) - internalClickCallback (e.mods); - } -} - -void Button::mouseUp (const MouseEvent& e) -{ - const bool wasDown = isDown(); - updateState (isMouseOver(), false); - - if (wasDown && isOver() && ! triggerOnMouseDown) - internalClickCallback (e.mods); -} - -void Button::mouseDrag (const MouseEvent&) -{ - const ButtonState oldState = buttonState; - updateState (isMouseOver(), true); - - if (autoRepeatDelay >= 0 && buttonState != oldState && isDown()) - getRepeatTimer().startTimer (autoRepeatSpeed); -} - -void Button::focusGained (FocusChangeType) -{ - updateState(); - repaint(); -} - -void Button::focusLost (FocusChangeType) -{ - updateState(); - repaint(); -} - -void Button::visibilityChanged() -{ - needsToRelease = false; - updateState(); -} - -void Button::parentHierarchyChanged() -{ - Component* const newKeySource = (shortcuts.size() == 0) ? nullptr : getTopLevelComponent(); - - if (newKeySource != keySource.get()) - { - if (keySource != nullptr) - keySource->removeKeyListener (this); - - keySource = newKeySource; - - if (keySource != nullptr) - keySource->addKeyListener (this); - } -} - -void Button::setCommandToTrigger (ApplicationCommandManager* const commandManagerToUse_, - const int commandID_, - const bool generateTooltip_) -{ - commandID = commandID_; - generateTooltip = generateTooltip_; - - if (commandManagerToUse != commandManagerToUse_) - { - if (commandManagerToUse != nullptr) - commandManagerToUse->removeListener (this); - - commandManagerToUse = commandManagerToUse_; - - if (commandManagerToUse != nullptr) - commandManagerToUse->addListener (this); - - // if you've got clickTogglesState turned on, you shouldn't also connect the button - // up to be a command invoker. Instead, your command handler must flip the state of whatever - // it is that this button represents, and the button will update its state to reflect this - // in the applicationCommandListChanged() method. - jassert (commandManagerToUse == nullptr || ! clickTogglesState); - } - - if (commandManagerToUse != nullptr) - applicationCommandListChanged(); - else - setEnabled (true); -} - -void Button::applicationCommandInvoked (const ApplicationCommandTarget::InvocationInfo& info) -{ - if (info.commandID == commandID - && (info.commandFlags & ApplicationCommandInfo::dontTriggerVisualFeedback) == 0) - { - flashButtonState(); - } -} - -void Button::applicationCommandListChanged() -{ - if (commandManagerToUse != nullptr) - { - ApplicationCommandInfo info (0); - - ApplicationCommandTarget* const target = commandManagerToUse->getTargetForCommand (commandID, info); - - setEnabled (target != nullptr && (info.flags & ApplicationCommandInfo::isDisabled) == 0); - - if (target != nullptr) - setToggleState ((info.flags & ApplicationCommandInfo::isTicked) != 0, false); - } -} - -void Button::addShortcut (const KeyPress& key) -{ - if (key.isValid()) - { - jassert (! isRegisteredForShortcut (key)); // already registered! - - shortcuts.add (key); - parentHierarchyChanged(); - } -} - -void Button::clearShortcuts() -{ - shortcuts.clear(); - - parentHierarchyChanged(); -} - -bool Button::isShortcutPressed() const -{ - if (! isCurrentlyBlockedByAnotherModalComponent()) - { - for (int i = shortcuts.size(); --i >= 0;) - if (shortcuts.getReference(i).isCurrentlyDown()) - return true; - } - - return false; -} - -bool Button::isRegisteredForShortcut (const KeyPress& key) const -{ - for (int i = shortcuts.size(); --i >= 0;) - if (key == shortcuts.getReference(i)) - return true; - - return false; -} - -bool Button::keyStateChanged (const bool, Component*) -{ - if (! isEnabled()) - return false; - - const bool wasDown = isKeyDown; - isKeyDown = isShortcutPressed(); - - if (autoRepeatDelay >= 0 && (isKeyDown && ! wasDown)) - getRepeatTimer().startTimer (autoRepeatDelay); - - updateState(); - - if (isEnabled() && wasDown && ! isKeyDown) - { - internalClickCallback (ModifierKeys::getCurrentModifiers()); - - // (return immediately - this button may now have been deleted) - return true; - } - - return wasDown || isKeyDown; -} - -bool Button::keyPressed (const KeyPress&, Component*) -{ - // returning true will avoid forwarding events for keys that we're using as shortcuts - return isShortcutPressed(); -} - -bool Button::keyPressed (const KeyPress& key) -{ - if (isEnabled() && key.isKeyCode (KeyPress::returnKey)) - { - triggerClick(); - return true; - } - - return false; -} - -void Button::setRepeatSpeed (const int initialDelayMillisecs, - const int repeatMillisecs, - const int minimumDelayInMillisecs) noexcept -{ - autoRepeatDelay = initialDelayMillisecs; - autoRepeatSpeed = repeatMillisecs; - autoRepeatMinimumDelay = jmin (autoRepeatSpeed, minimumDelayInMillisecs); -} - -void Button::repeatTimerCallback() -{ - if (needsRepainting) - { - getRepeatTimer().stopTimer(); - updateState(); - needsRepainting = false; - } - else if (autoRepeatSpeed > 0 && (isKeyDown || (updateState() == buttonDown))) - { - int repeatSpeed = autoRepeatSpeed; - - if (autoRepeatMinimumDelay >= 0) - { - double timeHeldDown = jmin (1.0, getMillisecondsSinceButtonDown() / 4000.0); - timeHeldDown *= timeHeldDown; - - repeatSpeed = repeatSpeed + (int) (timeHeldDown * (autoRepeatMinimumDelay - repeatSpeed)); - } - - repeatSpeed = jmax (1, repeatSpeed); - - const uint32 now = Time::getMillisecondCounter(); - - // if we've been blocked from repeating often enough, speed up the repeat timer to compensate.. - if (lastRepeatTime != 0 && (int) (now - lastRepeatTime) > repeatSpeed * 2) - repeatSpeed = jmax (1, repeatSpeed / 2); - - lastRepeatTime = now; - getRepeatTimer().startTimer (repeatSpeed); - - internalClickCallback (ModifierKeys::getCurrentModifiers()); - } - else if (! needsToRelease) - { - getRepeatTimer().stopTimer(); - } -} - -Button::RepeatTimer& Button::getRepeatTimer() -{ - if (repeatTimer == nullptr) - repeatTimer = new RepeatTimer (*this); - - return *repeatTimer; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_Button.cpp ***/ - - -/*** Start of inlined file: juce_DrawableButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -DrawableButton::DrawableButton (const String& name, - const DrawableButton::ButtonStyle buttonStyle) - : Button (name), - style (buttonStyle), - currentImage (nullptr), - edgeIndent (3) -{ - if (buttonStyle == ImageOnButtonBackground) - { - backgroundOff = Colour (0xffbbbbff); - backgroundOn = Colour (0xff3333ff); - } - else - { - backgroundOff = Colours::transparentBlack; - backgroundOn = Colour (0xaabbbbff); - } -} - -DrawableButton::~DrawableButton() -{ -} - -void DrawableButton::setImages (const Drawable* normal, - const Drawable* over, - const Drawable* down, - const Drawable* disabled, - const Drawable* normalOn, - const Drawable* overOn, - const Drawable* downOn, - const Drawable* disabledOn) -{ - jassert (normal != nullptr); // you really need to give it at least a normal image.. - - if (normal != nullptr) normalImage = normal->createCopy(); - if (over != nullptr) overImage = over->createCopy(); - if (down != nullptr) downImage = down->createCopy(); - if (disabled != nullptr) disabledImage = disabled->createCopy(); - if (normalOn != nullptr) normalImageOn = normalOn->createCopy(); - if (overOn != nullptr) overImageOn = overOn->createCopy(); - if (downOn != nullptr) downImageOn = downOn->createCopy(); - if (disabledOn != nullptr) disabledImageOn = disabledOn->createCopy(); - - buttonStateChanged(); -} - -void DrawableButton::setButtonStyle (const DrawableButton::ButtonStyle newStyle) -{ - if (style != newStyle) - { - style = newStyle; - buttonStateChanged(); - } -} - -void DrawableButton::setBackgroundColours (const Colour& toggledOffColour, - const Colour& toggledOnColour) -{ - if (backgroundOff != toggledOffColour - || backgroundOn != toggledOnColour) - { - backgroundOff = toggledOffColour; - backgroundOn = toggledOnColour; - - repaint(); - } -} - -const Colour& DrawableButton::getBackgroundColour() const noexcept -{ - return getToggleState() ? backgroundOn - : backgroundOff; -} - -void DrawableButton::setEdgeIndent (const int numPixelsIndent) -{ - edgeIndent = numPixelsIndent; - repaint(); - resized(); -} - -void DrawableButton::resized() -{ - Button::resized(); - - if (currentImage != nullptr) - { - if (style == ImageRaw) - { - currentImage->setOriginWithOriginalSize (Point()); - } - else - { - Rectangle imageSpace; - - if (style == ImageOnButtonBackground) - { - imageSpace = getLocalBounds().reduced (getWidth() / 4, getHeight() / 4); - } - else - { - const int textH = (style == ImageAboveTextLabel) ? jmin (16, proportionOfHeight (0.25f)) : 0; - - const int indentX = jmin (edgeIndent, proportionOfWidth (0.3f)); - const int indentY = jmin (edgeIndent, proportionOfHeight (0.3f)); - - imageSpace.setBounds (indentX, indentY, - getWidth() - indentX * 2, - getHeight() - indentY * 2 - textH); - } - - currentImage->setTransformToFit (imageSpace.toFloat(), RectanglePlacement::centred); - } - } -} - -void DrawableButton::buttonStateChanged() -{ - repaint(); - - Drawable* imageToDraw = nullptr; - float opacity = 1.0f; - - if (isEnabled()) - { - imageToDraw = getCurrentImage(); - } - else - { - imageToDraw = getToggleState() ? disabledImageOn - : disabledImage; - - if (imageToDraw == nullptr) - { - opacity = 0.4f; - imageToDraw = getNormalImage(); - } - } - - if (imageToDraw != currentImage) - { - removeChildComponent (currentImage); - currentImage = imageToDraw; - - if (currentImage != nullptr) - { - currentImage->setInterceptsMouseClicks (false, false); - addAndMakeVisible (currentImage); - DrawableButton::resized(); - } - } - - if (currentImage != nullptr) - currentImage->setAlpha (opacity); -} - -void DrawableButton::paintButton (Graphics& g, - bool isMouseOverButton, - bool isButtonDown) -{ - if (style == ImageOnButtonBackground) - { - getLookAndFeel().drawButtonBackground (g, *this, - getBackgroundColour(), - isMouseOverButton, - isButtonDown); - } - else - { - g.fillAll (getBackgroundColour()); - - const int textH = (style == ImageAboveTextLabel) - ? jmin (16, proportionOfHeight (0.25f)) - : 0; - - if (textH > 0) - { - g.setFont ((float) textH); - - g.setColour (findColour (DrawableButton::textColourId) - .withMultipliedAlpha (isEnabled() ? 1.0f : 0.4f)); - - g.drawFittedText (getButtonText(), - 2, getHeight() - textH - 1, - getWidth() - 4, textH, - Justification::centred, 1); - } - } -} - -Drawable* DrawableButton::getCurrentImage() const noexcept -{ - if (isDown()) - return getDownImage(); - - if (isOver()) - return getOverImage(); - - return getNormalImage(); -} - -Drawable* DrawableButton::getNormalImage() const noexcept -{ - return (getToggleState() && normalImageOn != nullptr) ? normalImageOn - : normalImage; -} - -Drawable* DrawableButton::getOverImage() const noexcept -{ - Drawable* d = normalImage; - - if (getToggleState()) - { - if (overImageOn != nullptr) - d = overImageOn; - else if (normalImageOn != nullptr) - d = normalImageOn; - else if (overImage != nullptr) - d = overImage; - } - else - { - if (overImage != nullptr) - d = overImage; - } - - return d; -} - -Drawable* DrawableButton::getDownImage() const noexcept -{ - Drawable* d = normalImage; - - if (getToggleState()) - { - if (downImageOn != nullptr) - d = downImageOn; - else if (overImageOn != nullptr) - d = overImageOn; - else if (normalImageOn != nullptr) - d = normalImageOn; - else if (downImage != nullptr) - d = downImage; - else - d = getOverImage(); - } - else - { - if (downImage != nullptr) - d = downImage; - else - d = getOverImage(); - } - - return d; -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_DrawableButton.cpp ***/ - - -/*** Start of inlined file: juce_HyperlinkButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -HyperlinkButton::HyperlinkButton (const String& linkText, - const URL& linkURL) - : Button (linkText), - url (linkURL), - font (14.0f, Font::underlined), - resizeFont (true), - justification (Justification::centred) -{ - setMouseCursor (MouseCursor::PointingHandCursor); - setTooltip (linkURL.toString (false)); -} - -HyperlinkButton::~HyperlinkButton() -{ -} - -void HyperlinkButton::setFont (const Font& newFont, - const bool resizeToMatchComponentHeight, - const Justification& justificationType) -{ - font = newFont; - resizeFont = resizeToMatchComponentHeight; - justification = justificationType; - repaint(); -} - -void HyperlinkButton::setURL (const URL& newURL) noexcept -{ - url = newURL; - setTooltip (newURL.toString (false)); -} - -Font HyperlinkButton::getFontToUse() const -{ - Font f (font); - - if (resizeFont) - f.setHeight (getHeight() * 0.7f); - - return f; -} - -void HyperlinkButton::changeWidthToFitText() -{ - setSize (getFontToUse().getStringWidth (getName()) + 6, getHeight()); -} - -void HyperlinkButton::colourChanged() -{ - repaint(); -} - -void HyperlinkButton::clicked() -{ - if (url.isWellFormed()) - url.launchInDefaultBrowser(); -} - -void HyperlinkButton::paintButton (Graphics& g, - bool isMouseOverButton, - bool isButtonDown) -{ - const Colour textColour (findColour (textColourId)); - - if (isEnabled()) - g.setColour ((isMouseOverButton) ? textColour.darker ((isButtonDown) ? 1.3f : 0.4f) - : textColour); - else - g.setColour (textColour.withMultipliedAlpha (0.4f)); - - g.setFont (getFontToUse()); - - g.drawText (getButtonText(), - 2, 0, getWidth() - 2, getHeight(), - justification.getOnlyHorizontalFlags() | Justification::verticallyCentred, - true); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_HyperlinkButton.cpp ***/ - - -/*** Start of inlined file: juce_ImageButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ImageButton::ImageButton (const String& text_) - : Button (text_), - scaleImageToFit (true), - preserveProportions (true), - alphaThreshold (0), - imageX (0), - imageY (0), - imageW (0), - imageH (0) -{ -} - -ImageButton::~ImageButton() -{ -} - -void ImageButton::setImages (const bool resizeButtonNowToFitThisImage, - const bool rescaleImagesWhenButtonSizeChanges, - const bool preserveImageProportions, - const Image& normalImage_, - const float imageOpacityWhenNormal, - const Colour& overlayColourWhenNormal, - const Image& overImage_, - const float imageOpacityWhenOver, - const Colour& overlayColourWhenOver, - const Image& downImage_, - const float imageOpacityWhenDown, - const Colour& overlayColourWhenDown, - const float hitTestAlphaThreshold) -{ - normalImage = normalImage_; - overImage = overImage_; - downImage = downImage_; - - if (resizeButtonNowToFitThisImage && normalImage.isValid()) - { - imageW = normalImage.getWidth(); - imageH = normalImage.getHeight(); - - setSize (imageW, imageH); - } - - scaleImageToFit = rescaleImagesWhenButtonSizeChanges; - preserveProportions = preserveImageProportions; - - normalOpacity = imageOpacityWhenNormal; - normalOverlay = overlayColourWhenNormal; - overOpacity = imageOpacityWhenOver; - overOverlay = overlayColourWhenOver; - downOpacity = imageOpacityWhenDown; - downOverlay = overlayColourWhenDown; - - alphaThreshold = (unsigned char) jlimit (0, 0xff, roundToInt (255.0f * hitTestAlphaThreshold)); - - repaint(); -} - -Image ImageButton::getCurrentImage() const -{ - if (isDown() || getToggleState()) - return getDownImage(); - - if (isOver()) - return getOverImage(); - - return getNormalImage(); -} - -Image ImageButton::getNormalImage() const -{ - return normalImage; -} - -Image ImageButton::getOverImage() const -{ - return overImage.isValid() ? overImage - : normalImage; -} - -Image ImageButton::getDownImage() const -{ - return downImage.isValid() ? downImage - : getOverImage(); -} - -void ImageButton::paintButton (Graphics& g, - bool isMouseOverButton, - bool isButtonDown) -{ - if (! isEnabled()) - { - isMouseOverButton = false; - isButtonDown = false; - } - - Image im (getCurrentImage()); - - if (im.isValid()) - { - const int iw = im.getWidth(); - const int ih = im.getHeight(); - imageW = getWidth(); - imageH = getHeight(); - imageX = (imageW - iw) >> 1; - imageY = (imageH - ih) >> 1; - - if (scaleImageToFit) - { - if (preserveProportions) - { - int newW, newH; - const float imRatio = ih / (float)iw; - const float destRatio = imageH / (float)imageW; - - if (imRatio > destRatio) - { - newW = roundToInt (imageH / imRatio); - newH = imageH; - } - else - { - newW = imageW; - newH = roundToInt (imageW * imRatio); - } - - imageX = (imageW - newW) / 2; - imageY = (imageH - newH) / 2; - imageW = newW; - imageH = newH; - } - else - { - imageX = 0; - imageY = 0; - } - } - - if (! scaleImageToFit) - { - imageW = iw; - imageH = ih; - } - - getLookAndFeel().drawImageButton (g, &im, imageX, imageY, imageW, imageH, - isButtonDown ? downOverlay - : (isMouseOverButton ? overOverlay - : normalOverlay), - isButtonDown ? downOpacity - : (isMouseOverButton ? overOpacity - : normalOpacity), - *this); - } -} - -bool ImageButton::hitTest (int x, int y) -{ - if (alphaThreshold == 0) - return true; - - Image im (getCurrentImage()); - - return im.isNull() || (imageW > 0 && imageH > 0 - && alphaThreshold < im.getPixelAt (((x - imageX) * im.getWidth()) / imageW, - ((y - imageY) * im.getHeight()) / imageH).getAlpha()); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ImageButton.cpp ***/ - - -/*** Start of inlined file: juce_ShapeButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ShapeButton::ShapeButton (const String& text_, - const Colour& normalColour_, - const Colour& overColour_, - const Colour& downColour_) - : Button (text_), - normalColour (normalColour_), - overColour (overColour_), - downColour (downColour_), - maintainShapeProportions (false), - outlineWidth (0.0f) -{ -} - -ShapeButton::~ShapeButton() -{ -} - -void ShapeButton::setColours (const Colour& newNormalColour, - const Colour& newOverColour, - const Colour& newDownColour) -{ - normalColour = newNormalColour; - overColour = newOverColour; - downColour = newDownColour; -} - -void ShapeButton::setOutline (const Colour& newOutlineColour, - const float newOutlineWidth) -{ - outlineColour = newOutlineColour; - outlineWidth = newOutlineWidth; -} - -void ShapeButton::setShape (const Path& newShape, - const bool resizeNowToFitThisShape, - const bool maintainShapeProportions_, - const bool hasShadow) -{ - shape = newShape; - maintainShapeProportions = maintainShapeProportions_; - - shadow.setShadowProperties (3.0f, 0.5f, 0, 0); - setComponentEffect ((hasShadow) ? &shadow : 0); - - if (resizeNowToFitThisShape) - { - Rectangle newBounds (shape.getBounds()); - - if (hasShadow) - newBounds.expand (4.0f, 4.0f); - - shape.applyTransform (AffineTransform::translation (-newBounds.getX(), -newBounds.getY())); - - setSize (1 + (int) (newBounds.getWidth() + outlineWidth), - 1 + (int) (newBounds.getHeight() + outlineWidth)); - } -} - -void ShapeButton::paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) -{ - if (! isEnabled()) - { - isMouseOverButton = false; - isButtonDown = false; - } - - g.setColour ((isButtonDown) ? downColour - : (isMouseOverButton) ? overColour - : normalColour); - - int w = getWidth(); - int h = getHeight(); - - if (getComponentEffect() != nullptr) - { - w -= 4; - h -= 4; - } - - const float offset = (outlineWidth * 0.5f) + (isButtonDown ? 1.5f : 0.0f); - - const AffineTransform trans (shape.getTransformToScaleToFit (offset, offset, - w - offset - outlineWidth, - h - offset - outlineWidth, - maintainShapeProportions)); - g.fillPath (shape, trans); - - if (outlineWidth > 0.0f) - { - g.setColour (outlineColour); - g.strokePath (shape, PathStrokeType (outlineWidth), trans); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ShapeButton.cpp ***/ - - -/*** Start of inlined file: juce_TextButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -TextButton::TextButton (const String& name, - const String& toolTip) - : Button (name) -{ - setTooltip (toolTip); -} - -TextButton::~TextButton() -{ -} - -void TextButton::paintButton (Graphics& g, - bool isMouseOverButton, - bool isButtonDown) -{ - getLookAndFeel().drawButtonBackground (g, *this, - findColour (getToggleState() ? buttonOnColourId - : buttonColourId), - isMouseOverButton, - isButtonDown); - - getLookAndFeel().drawButtonText (g, *this, - isMouseOverButton, - isButtonDown); -} - -void TextButton::colourChanged() -{ - repaint(); -} - -const Font TextButton::getFont() -{ - return Font (jmin (15.0f, getHeight() * 0.6f)); -} - -void TextButton::changeWidthToFitText (const int newHeight) -{ - if (newHeight >= 0) - setSize (jmax (1, getWidth()), newHeight); - - setSize (getFont().getStringWidth (getButtonText()) + getHeight(), - getHeight()); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_TextButton.cpp ***/ - - -/*** Start of inlined file: juce_ToggleButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ToggleButton::ToggleButton (const String& buttonText) - : Button (buttonText) -{ - setClickingTogglesState (true); -} - -ToggleButton::~ToggleButton() -{ -} - -void ToggleButton::paintButton (Graphics& g, - bool isMouseOverButton, - bool isButtonDown) -{ - getLookAndFeel().drawToggleButton (g, *this, - isMouseOverButton, - isButtonDown); -} - -void ToggleButton::changeWidthToFitText() -{ - getLookAndFeel().changeToggleButtonWidthToFitText (*this); -} - -void ToggleButton::colourChanged() -{ - repaint(); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ToggleButton.cpp ***/ - - -/*** Start of inlined file: juce_ToolbarButton.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ToolbarButton::ToolbarButton (const int itemId_, const String& buttonText, - Drawable* const normalImage_, Drawable* const toggledOnImage_) - : ToolbarItemComponent (itemId_, buttonText, true), - normalImage (normalImage_), - toggledOnImage (toggledOnImage_), - currentImage (nullptr) -{ - jassert (normalImage_ != nullptr); -} - -ToolbarButton::~ToolbarButton() -{ -} - -bool ToolbarButton::getToolbarItemSizes (int toolbarDepth, bool /*isToolbarVertical*/, int& preferredSize, int& minSize, int& maxSize) -{ - preferredSize = minSize = maxSize = toolbarDepth; - return true; -} - -void ToolbarButton::paintButtonArea (Graphics&, int /*width*/, int /*height*/, bool /*isMouseOver*/, bool /*isMouseDown*/) -{ -} - -void ToolbarButton::contentAreaChanged (const Rectangle&) -{ - buttonStateChanged(); -} - -void ToolbarButton::updateDrawable() -{ - if (currentImage != nullptr) - { - currentImage->setTransformToFit (getContentArea().toFloat(), RectanglePlacement::centred); - currentImage->setAlpha (isEnabled() ? 1.0f : 0.5f); - } -} - -void ToolbarButton::resized() -{ - ToolbarItemComponent::resized(); - updateDrawable(); -} - -void ToolbarButton::enablementChanged() -{ - ToolbarItemComponent::enablementChanged(); - updateDrawable(); -} - -void ToolbarButton::buttonStateChanged() -{ - Drawable* d = normalImage; - - if (getToggleState() && toggledOnImage != nullptr) - d = toggledOnImage; - - if (d != currentImage) - { - removeChildComponent (currentImage); - currentImage = d; - - if (d != nullptr) - { - enablementChanged(); - addAndMakeVisible (d); - updateDrawable(); - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_ToolbarButton.cpp ***/ - - -/*** Start of inlined file: juce_CodeDocument.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class CodeDocumentLine -{ -public: - CodeDocumentLine (const String::CharPointerType& line_, - const int lineLength_, - const int numNewLineChars, - const int lineStartInFile_) - : line (line_, lineLength_), - lineStartInFile (lineStartInFile_), - lineLength (lineLength_), - lineLengthWithoutNewLines (lineLength_ - numNewLineChars) - { - } - - static void createLines (Array & newLines, const String& text) - { - String::CharPointerType t (text.getCharPointer()); - int charNumInFile = 0; - bool finished = false; - - while (! (finished || t.isEmpty())) - { - String::CharPointerType startOfLine (t); - int startOfLineInFile = charNumInFile; - int lineLength = 0; - int numNewLineChars = 0; - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - - if (c == 0) - { - finished = true; - break; - } - - ++charNumInFile; - ++lineLength; - - if (c == '\r') - { - ++numNewLineChars; - - if (*t == '\n') - { - ++t; - ++charNumInFile; - ++lineLength; - ++numNewLineChars; - } - - break; - } - - if (c == '\n') - { - ++numNewLineChars; - break; - } - } - - newLines.add (new CodeDocumentLine (startOfLine, lineLength, - numNewLineChars, startOfLineInFile)); - } - - jassert (charNumInFile == text.length()); - } - - bool endsWithLineBreak() const noexcept - { - return lineLengthWithoutNewLines != lineLength; - } - - void updateLength() noexcept - { - lineLength = 0; - lineLengthWithoutNewLines = 0; - - String::CharPointerType t (line.getCharPointer()); - - for (;;) - { - const juce_wchar c = t.getAndAdvance(); - - if (c == 0) - break; - - ++lineLength; - - if (c != '\n' && c != '\r') - lineLengthWithoutNewLines = lineLength; - } - } - - String line; - int lineStartInFile, lineLength, lineLengthWithoutNewLines; -}; - -CodeDocument::Iterator::Iterator (CodeDocument* const document_) - : document (document_), - charPointer (nullptr), - line (0), - position (0) -{ -} - -CodeDocument::Iterator::Iterator (const CodeDocument::Iterator& other) - : document (other.document), - charPointer (other.charPointer), - line (other.line), - position (other.position) -{ -} - -CodeDocument::Iterator& CodeDocument::Iterator::operator= (const CodeDocument::Iterator& other) noexcept -{ - document = other.document; - charPointer = other.charPointer; - line = other.line; - position = other.position; - - return *this; -} - -CodeDocument::Iterator::~Iterator() noexcept -{ -} - -juce_wchar CodeDocument::Iterator::nextChar() -{ - for (;;) - { - if (charPointer.getAddress() == nullptr) - { - CodeDocumentLine* const l = document->lines[line]; - - if (l == nullptr) - return 0; - - charPointer = l->line.getCharPointer(); - } - - const juce_wchar result = charPointer.getAndAdvance(); - - if (result == 0) - { - ++line; - charPointer = nullptr; - } - else - { - ++position; - return result; - } - } -} - -void CodeDocument::Iterator::skip() -{ - nextChar(); -} - -void CodeDocument::Iterator::skipToEndOfLine() -{ - if (charPointer.getAddress() == nullptr) - { - CodeDocumentLine* const l = document->lines[line]; - - if (l == nullptr) - return; - - charPointer = l->line.getCharPointer(); - } - - position += (int) charPointer.length(); - ++line; - charPointer = nullptr; -} - -juce_wchar CodeDocument::Iterator::peekNextChar() const -{ - if (charPointer.getAddress() == nullptr) - { - CodeDocumentLine* const l = document->lines[line]; - - if (l == nullptr) - return 0; - - charPointer = l->line.getCharPointer(); - } - - const juce_wchar c = *charPointer; - - if (c != 0) - return c; - - CodeDocumentLine* const l = document->lines [line + 1]; - return l == nullptr ? 0 : l->line[0]; -} - -void CodeDocument::Iterator::skipWhitespace() -{ - while (CharacterFunctions::isWhitespace (peekNextChar())) - skip(); -} - -bool CodeDocument::Iterator::isEOF() const noexcept -{ - return charPointer.getAddress() == nullptr && line >= document->lines.size(); -} - -CodeDocument::Position::Position() noexcept - : owner (0), characterPos (0), line (0), - indexInLine (0), positionMaintained (false) -{ -} - -CodeDocument::Position::Position (const CodeDocument* const ownerDocument, - const int line_, const int indexInLine_) noexcept - : owner (const_cast (ownerDocument)), - characterPos (0), line (line_), - indexInLine (indexInLine_), positionMaintained (false) -{ - setLineAndIndex (line_, indexInLine_); -} - -CodeDocument::Position::Position (const CodeDocument* const ownerDocument, - const int characterPos_) noexcept - : owner (const_cast (ownerDocument)), - positionMaintained (false) -{ - setPosition (characterPos_); -} - -CodeDocument::Position::Position (const Position& other) noexcept - : owner (other.owner), characterPos (other.characterPos), line (other.line), - indexInLine (other.indexInLine), positionMaintained (false) -{ - jassert (*this == other); -} - -CodeDocument::Position::~Position() -{ - setPositionMaintained (false); -} - -CodeDocument::Position& CodeDocument::Position::operator= (const Position& other) -{ - if (this != &other) - { - const bool wasPositionMaintained = positionMaintained; - if (owner != other.owner) - setPositionMaintained (false); - - owner = other.owner; - line = other.line; - indexInLine = other.indexInLine; - characterPos = other.characterPos; - setPositionMaintained (wasPositionMaintained); - - jassert (*this == other); - } - - return *this; -} - -bool CodeDocument::Position::operator== (const Position& other) const noexcept -{ - jassert ((characterPos == other.characterPos) - == (line == other.line && indexInLine == other.indexInLine)); - - return characterPos == other.characterPos - && line == other.line - && indexInLine == other.indexInLine - && owner == other.owner; -} - -bool CodeDocument::Position::operator!= (const Position& other) const noexcept -{ - return ! operator== (other); -} - -void CodeDocument::Position::setLineAndIndex (const int newLineNum, const int newIndexInLine) -{ - jassert (owner != nullptr); - - if (owner->lines.size() == 0) - { - line = 0; - indexInLine = 0; - characterPos = 0; - } - else - { - if (newLineNum >= owner->lines.size()) - { - line = owner->lines.size() - 1; - - CodeDocumentLine* const l = owner->lines.getUnchecked (line); - jassert (l != nullptr); - - indexInLine = l->lineLengthWithoutNewLines; - characterPos = l->lineStartInFile + indexInLine; - } - else - { - line = jmax (0, newLineNum); - - CodeDocumentLine* const l = owner->lines.getUnchecked (line); - jassert (l != nullptr); - - if (l->lineLengthWithoutNewLines > 0) - indexInLine = jlimit (0, l->lineLengthWithoutNewLines, newIndexInLine); - else - indexInLine = 0; - - characterPos = l->lineStartInFile + indexInLine; - } - } -} - -void CodeDocument::Position::setPosition (const int newPosition) -{ - jassert (owner != nullptr); - - line = 0; - indexInLine = 0; - characterPos = 0; - - if (newPosition > 0) - { - int lineStart = 0; - int lineEnd = owner->lines.size(); - - for (;;) - { - if (lineEnd - lineStart < 4) - { - for (int i = lineStart; i < lineEnd; ++i) - { - CodeDocumentLine* const l = owner->lines.getUnchecked (i); - - int index = newPosition - l->lineStartInFile; - - if (index >= 0 && (index < l->lineLength || i == lineEnd - 1)) - { - line = i; - indexInLine = jmin (l->lineLengthWithoutNewLines, index); - characterPos = l->lineStartInFile + indexInLine; - } - } - - break; - } - else - { - const int midIndex = (lineStart + lineEnd + 1) / 2; - CodeDocumentLine* const mid = owner->lines.getUnchecked (midIndex); - - if (newPosition >= mid->lineStartInFile) - lineStart = midIndex; - else - lineEnd = midIndex; - } - } - } -} - -void CodeDocument::Position::moveBy (int characterDelta) -{ - jassert (owner != nullptr); - - if (characterDelta == 1) - { - setPosition (getPosition()); - - // If moving right, make sure we don't get stuck between the \r and \n characters.. - if (line < owner->lines.size()) - { - CodeDocumentLine* const l = owner->lines.getUnchecked (line); - if (indexInLine + characterDelta < l->lineLength - && indexInLine + characterDelta >= l->lineLengthWithoutNewLines + 1) - ++characterDelta; - } - } - - setPosition (characterPos + characterDelta); -} - -const CodeDocument::Position CodeDocument::Position::movedBy (const int characterDelta) const -{ - CodeDocument::Position p (*this); - p.moveBy (characterDelta); - return p; -} - -const CodeDocument::Position CodeDocument::Position::movedByLines (const int deltaLines) const -{ - CodeDocument::Position p (*this); - p.setLineAndIndex (getLineNumber() + deltaLines, getIndexInLine()); - return p; -} - -const juce_wchar CodeDocument::Position::getCharacter() const -{ - const CodeDocumentLine* const l = owner->lines [line]; - return l == nullptr ? 0 : l->line [getIndexInLine()]; -} - -String CodeDocument::Position::getLineText() const -{ - const CodeDocumentLine* const l = owner->lines [line]; - return l == nullptr ? String::empty : l->line; -} - -void CodeDocument::Position::setPositionMaintained (const bool isMaintained) -{ - if (isMaintained != positionMaintained) - { - positionMaintained = isMaintained; - - if (owner != nullptr) - { - if (isMaintained) - { - jassert (! owner->positionsToMaintain.contains (this)); - owner->positionsToMaintain.add (this); - } - else - { - // If this happens, you may have deleted the document while there are Position objects that are still using it... - jassert (owner->positionsToMaintain.contains (this)); - owner->positionsToMaintain.removeValue (this); - } - } - } -} - -CodeDocument::CodeDocument() - : undoManager (std::numeric_limits::max(), 10000), - currentActionIndex (0), - indexOfSavedState (-1), - maximumLineLength (-1), - newLineChars ("\r\n") -{ -} - -CodeDocument::~CodeDocument() -{ -} - -String CodeDocument::getAllContent() const -{ - return getTextBetween (Position (this, 0), - Position (this, lines.size(), 0)); -} - -String CodeDocument::getTextBetween (const Position& start, const Position& end) const -{ - if (end.getPosition() <= start.getPosition()) - return String::empty; - - const int startLine = start.getLineNumber(); - const int endLine = end.getLineNumber(); - - if (startLine == endLine) - { - CodeDocumentLine* const line = lines [startLine]; - return (line == nullptr) ? String::empty : line->line.substring (start.getIndexInLine(), end.getIndexInLine()); - } - - MemoryOutputStream mo; - mo.preallocate (end.getPosition() - start.getPosition() + 4); - - const int maxLine = jmin (lines.size() - 1, endLine); - - for (int i = jmax (0, startLine); i <= maxLine; ++i) - { - const CodeDocumentLine* line = lines.getUnchecked(i); - int len = line->lineLength; - - if (i == startLine) - { - const int index = start.getIndexInLine(); - mo << line->line.substring (index, len); - } - else if (i == endLine) - { - len = end.getIndexInLine(); - mo << line->line.substring (0, len); - } - else - { - mo << line->line; - } - } - - return mo.toString(); -} - -int CodeDocument::getNumCharacters() const noexcept -{ - const CodeDocumentLine* const lastLine = lines.getLast(); - return (lastLine == nullptr) ? 0 : lastLine->lineStartInFile + lastLine->lineLength; -} - -String CodeDocument::getLine (const int lineIndex) const noexcept -{ - const CodeDocumentLine* const line = lines [lineIndex]; - return (line == nullptr) ? String::empty : line->line; -} - -int CodeDocument::getMaximumLineLength() noexcept -{ - if (maximumLineLength < 0) - { - maximumLineLength = 0; - - for (int i = lines.size(); --i >= 0;) - maximumLineLength = jmax (maximumLineLength, lines.getUnchecked(i)->lineLength); - } - - return maximumLineLength; -} - -void CodeDocument::deleteSection (const Position& startPosition, const Position& endPosition) -{ - remove (startPosition.getPosition(), endPosition.getPosition(), true); -} - -void CodeDocument::insertText (const Position& position, const String& text) -{ - insert (text, position.getPosition(), true); -} - -void CodeDocument::replaceAllContent (const String& newContent) -{ - remove (0, getNumCharacters(), true); - insert (newContent, 0, true); -} - -bool CodeDocument::loadFromStream (InputStream& stream) -{ - remove (0, getNumCharacters(), false); - insert (stream.readEntireStreamAsString(), 0, false); - setSavePoint(); - clearUndoHistory(); - return true; -} - -bool CodeDocument::writeToStream (OutputStream& stream) -{ - for (int i = 0; i < lines.size(); ++i) - { - String temp (lines.getUnchecked(i)->line); // use a copy to avoid bloating the memory footprint of the stored string. - const char* utf8 = temp.toUTF8(); - - if (! stream.write (utf8, (int) strlen (utf8))) - return false; - } - - return true; -} - -void CodeDocument::setNewLineCharacters (const String& newLineChars_) noexcept -{ - jassert (newLineChars_ == "\r\n" || newLineChars_ == "\n" || newLineChars_ == "\r"); - newLineChars = newLineChars_; -} - -void CodeDocument::newTransaction() -{ - undoManager.beginNewTransaction (String::empty); -} - -void CodeDocument::undo() -{ - newTransaction(); - undoManager.undo(); -} - -void CodeDocument::redo() -{ - undoManager.redo(); -} - -void CodeDocument::clearUndoHistory() -{ - undoManager.clearUndoHistory(); -} - -void CodeDocument::setSavePoint() noexcept -{ - indexOfSavedState = currentActionIndex; -} - -bool CodeDocument::hasChangedSinceSavePoint() const noexcept -{ - return currentActionIndex != indexOfSavedState; -} - -namespace CodeDocumentHelpers -{ - int getCharacterType (const juce_wchar character) noexcept - { - return (CharacterFunctions::isLetterOrDigit (character) || character == '_') - ? 2 : (CharacterFunctions::isWhitespace (character) ? 0 : 1); - } -} - -const CodeDocument::Position CodeDocument::findWordBreakAfter (const Position& position) const noexcept -{ - Position p (position); - const int maxDistance = 256; - int i = 0; - - while (i < maxDistance - && CharacterFunctions::isWhitespace (p.getCharacter()) - && (i == 0 || (p.getCharacter() != '\n' - && p.getCharacter() != '\r'))) - { - ++i; - p.moveBy (1); - } - - if (i == 0) - { - const int type = CodeDocumentHelpers::getCharacterType (p.getCharacter()); - - while (i < maxDistance && type == CodeDocumentHelpers::getCharacterType (p.getCharacter())) - { - ++i; - p.moveBy (1); - } - - while (i < maxDistance - && CharacterFunctions::isWhitespace (p.getCharacter()) - && (i == 0 || (p.getCharacter() != '\n' - && p.getCharacter() != '\r'))) - { - ++i; - p.moveBy (1); - } - } - - return p; -} - -const CodeDocument::Position CodeDocument::findWordBreakBefore (const Position& position) const noexcept -{ - Position p (position); - const int maxDistance = 256; - int i = 0; - bool stoppedAtLineStart = false; - - while (i < maxDistance) - { - const juce_wchar c = p.movedBy (-1).getCharacter(); - - if (c == '\r' || c == '\n') - { - stoppedAtLineStart = true; - - if (i > 0) - break; - } - - if (! CharacterFunctions::isWhitespace (c)) - break; - - p.moveBy (-1); - ++i; - } - - if (i < maxDistance && ! stoppedAtLineStart) - { - const int type = CodeDocumentHelpers::getCharacterType (p.movedBy (-1).getCharacter()); - - while (i < maxDistance && type == CodeDocumentHelpers::getCharacterType (p.movedBy (-1).getCharacter())) - { - p.moveBy (-1); - ++i; - } - } - - return p; -} - -void CodeDocument::checkLastLineStatus() -{ - while (lines.size() > 0 - && lines.getLast()->lineLength == 0 - && (lines.size() == 1 || ! lines.getUnchecked (lines.size() - 2)->endsWithLineBreak())) - { - // remove any empty lines at the end if the preceding line doesn't end in a newline. - lines.removeLast(); - } - - const CodeDocumentLine* const lastLine = lines.getLast(); - - if (lastLine != nullptr && lastLine->endsWithLineBreak()) - { - // check that there's an empty line at the end if the preceding one ends in a newline.. - lines.add (new CodeDocumentLine (String::empty.getCharPointer(), 0, 0, lastLine->lineStartInFile + lastLine->lineLength)); - } -} - -void CodeDocument::addListener (CodeDocument::Listener* const listener) noexcept -{ - listeners.add (listener); -} - -void CodeDocument::removeListener (CodeDocument::Listener* const listener) noexcept -{ - listeners.remove (listener); -} - -void CodeDocument::sendListenerChangeMessage (const int startLine, const int endLine) -{ - Position startPos (this, startLine, 0); - Position endPos (this, endLine, 0); - - listeners.call (&CodeDocument::Listener::codeDocumentChanged, startPos, endPos); -} - -class CodeDocumentInsertAction : public UndoableAction -{ -public: - CodeDocumentInsertAction (CodeDocument& owner_, const String& text_, const int insertPos_) noexcept - : owner (owner_), - text (text_), - insertPos (insertPos_) - { - } - - bool perform() - { - owner.currentActionIndex++; - owner.insert (text, insertPos, false); - return true; - } - - bool undo() - { - owner.currentActionIndex--; - owner.remove (insertPos, insertPos + text.length(), false); - return true; - } - - int getSizeInUnits() { return text.length() + 32; } - -private: - CodeDocument& owner; - const String text; - int insertPos; - - JUCE_DECLARE_NON_COPYABLE (CodeDocumentInsertAction); -}; - -void CodeDocument::insert (const String& text, const int insertPos, const bool undoable) -{ - if (text.isEmpty()) - return; - - if (undoable) - { - undoManager.perform (new CodeDocumentInsertAction (*this, text, insertPos)); - } - else - { - Position pos (this, insertPos); - const int firstAffectedLine = pos.getLineNumber(); - int lastAffectedLine = firstAffectedLine + 1; - - CodeDocumentLine* const firstLine = lines [firstAffectedLine]; - String textInsideOriginalLine (text); - - if (firstLine != nullptr) - { - const int index = pos.getIndexInLine(); - textInsideOriginalLine = firstLine->line.substring (0, index) - + textInsideOriginalLine - + firstLine->line.substring (index); - } - - maximumLineLength = -1; - Array newLines; - CodeDocumentLine::createLines (newLines, textInsideOriginalLine); - jassert (newLines.size() > 0); - - CodeDocumentLine* const newFirstLine = newLines.getUnchecked (0); - newFirstLine->lineStartInFile = firstLine != nullptr ? firstLine->lineStartInFile : 0; - lines.set (firstAffectedLine, newFirstLine); - - if (newLines.size() > 1) - { - for (int i = 1; i < newLines.size(); ++i) - { - CodeDocumentLine* const l = newLines.getUnchecked (i); - lines.insert (firstAffectedLine + i, l); - } - - lastAffectedLine = lines.size(); - } - - int i, lineStart = newFirstLine->lineStartInFile; - for (i = firstAffectedLine; i < lines.size(); ++i) - { - CodeDocumentLine* const l = lines.getUnchecked (i); - l->lineStartInFile = lineStart; - lineStart += l->lineLength; - } - - checkLastLineStatus(); - - const int newTextLength = text.length(); - for (i = 0; i < positionsToMaintain.size(); ++i) - { - CodeDocument::Position* const p = positionsToMaintain.getUnchecked(i); - - if (p->getPosition() >= insertPos) - p->setPosition (p->getPosition() + newTextLength); - } - - sendListenerChangeMessage (firstAffectedLine, lastAffectedLine); - } -} - -class CodeDocumentDeleteAction : public UndoableAction -{ -public: - CodeDocumentDeleteAction (CodeDocument& owner_, const int startPos_, const int endPos_) noexcept - : owner (owner_), - startPos (startPos_), - endPos (endPos_) - { - removedText = owner.getTextBetween (CodeDocument::Position (&owner, startPos), - CodeDocument::Position (&owner, endPos)); - } - - bool perform() - { - owner.currentActionIndex++; - owner.remove (startPos, endPos, false); - return true; - } - - bool undo() - { - owner.currentActionIndex--; - owner.insert (removedText, startPos, false); - return true; - } - - int getSizeInUnits() { return removedText.length() + 32; } - -private: - CodeDocument& owner; - int startPos, endPos; - String removedText; - - JUCE_DECLARE_NON_COPYABLE (CodeDocumentDeleteAction); -}; - -void CodeDocument::remove (const int startPos, const int endPos, const bool undoable) -{ - if (endPos <= startPos) - return; - - if (undoable) - { - undoManager.perform (new CodeDocumentDeleteAction (*this, startPos, endPos)); - } - else - { - Position startPosition (this, startPos); - Position endPosition (this, endPos); - - maximumLineLength = -1; - const int firstAffectedLine = startPosition.getLineNumber(); - const int endLine = endPosition.getLineNumber(); - int lastAffectedLine = firstAffectedLine + 1; - CodeDocumentLine* const firstLine = lines.getUnchecked (firstAffectedLine); - - if (firstAffectedLine == endLine) - { - firstLine->line = firstLine->line.substring (0, startPosition.getIndexInLine()) - + firstLine->line.substring (endPosition.getIndexInLine()); - firstLine->updateLength(); - } - else - { - lastAffectedLine = lines.size(); - - CodeDocumentLine* const lastLine = lines.getUnchecked (endLine); - jassert (lastLine != nullptr); - - firstLine->line = firstLine->line.substring (0, startPosition.getIndexInLine()) - + lastLine->line.substring (endPosition.getIndexInLine()); - firstLine->updateLength(); - - int numLinesToRemove = endLine - firstAffectedLine; - lines.removeRange (firstAffectedLine + 1, numLinesToRemove); - } - - int i; - for (i = firstAffectedLine + 1; i < lines.size(); ++i) - { - CodeDocumentLine* const l = lines.getUnchecked (i); - const CodeDocumentLine* const previousLine = lines.getUnchecked (i - 1); - l->lineStartInFile = previousLine->lineStartInFile + previousLine->lineLength; - } - - checkLastLineStatus(); - - const int totalChars = getNumCharacters(); - - for (i = 0; i < positionsToMaintain.size(); ++i) - { - CodeDocument::Position* p = positionsToMaintain.getUnchecked(i); - - if (p->getPosition() > startPosition.getPosition()) - p->setPosition (jmax (startPos, p->getPosition() + startPos - endPos)); - - if (p->getPosition() > totalChars) - p->setPosition (totalChars); - } - - sendListenerChangeMessage (firstAffectedLine, lastAffectedLine); - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_CodeDocument.cpp ***/ - - -/*** Start of inlined file: juce_CodeEditorComponent.cpp ***/ -BEGIN_JUCE_NAMESPACE - -class CodeEditorComponent::CodeEditorLine -{ -public: - CodeEditorLine() noexcept - : highlightColumnStart (0), highlightColumnEnd (0) - { - } - - bool update (CodeDocument& document, int lineNum, - CodeDocument::Iterator& source, - CodeTokeniser* analyser, const int spacesPerTab, - const CodeDocument::Position& selectionStart, - const CodeDocument::Position& selectionEnd) - { - Array newTokens; - newTokens.ensureStorageAllocated (8); - - if (analyser == nullptr) - { - newTokens.add (SyntaxToken (document.getLine (lineNum), -1)); - } - else if (lineNum < document.getNumLines()) - { - const CodeDocument::Position pos (&document, lineNum, 0); - createTokens (pos.getPosition(), pos.getLineText(), - source, analyser, newTokens); - } - - replaceTabsWithSpaces (newTokens, spacesPerTab); - - int newHighlightStart = 0; - int newHighlightEnd = 0; - - if (selectionStart.getLineNumber() <= lineNum && selectionEnd.getLineNumber() >= lineNum) - { - const String line (document.getLine (lineNum)); - - CodeDocument::Position lineStart (&document, lineNum, 0), lineEnd (&document, lineNum + 1, 0); - newHighlightStart = indexToColumn (jmax (0, selectionStart.getPosition() - lineStart.getPosition()), - line, spacesPerTab); - newHighlightEnd = indexToColumn (jmin (lineEnd.getPosition() - lineStart.getPosition(), selectionEnd.getPosition() - lineStart.getPosition()), - line, spacesPerTab); - } - - if (newHighlightStart != highlightColumnStart || newHighlightEnd != highlightColumnEnd) - { - highlightColumnStart = newHighlightStart; - highlightColumnEnd = newHighlightEnd; - } - else - { - if (tokens.size() == newTokens.size()) - { - bool allTheSame = true; - - for (int i = newTokens.size(); --i >= 0;) - { - if (tokens.getReference(i) != newTokens.getReference(i)) - { - allTheSame = false; - break; - } - } - - if (allTheSame) - return false; - } - } - - tokens.swapWithArray (newTokens); - return true; - } - - void draw (CodeEditorComponent& owner, Graphics& g, const Font& font, - float x, const int y, const int baselineOffset, const int lineHeight, - const Colour& highlightColour) const - { - if (highlightColumnStart < highlightColumnEnd) - { - g.setColour (highlightColour); - g.fillRect (roundToInt (x + highlightColumnStart * owner.getCharWidth()), y, - roundToInt ((highlightColumnEnd - highlightColumnStart) * owner.getCharWidth()), lineHeight); - } - - int lastType = std::numeric_limits::min(); - - for (int i = 0; i < tokens.size(); ++i) - { - SyntaxToken& token = tokens.getReference(i); - - if (lastType != token.tokenType) - { - lastType = token.tokenType; - g.setColour (owner.getColourForTokenType (lastType)); - } - - g.drawSingleLineText (token.text, roundToInt (x), y + baselineOffset); - - if (i < tokens.size() - 1) - { - if (token.width < 0) - token.width = font.getStringWidthFloat (token.text); - - x += token.width; - } - } - } - -private: - struct SyntaxToken - { - SyntaxToken (const String& text_, const int type) noexcept - : text (text_), tokenType (type), width (-1.0f) - { - } - - bool operator!= (const SyntaxToken& other) const noexcept - { - return text != other.text || tokenType != other.tokenType; - } - - String text; - int tokenType; - float width; - }; - - Array tokens; - int highlightColumnStart, highlightColumnEnd; - - static void createTokens (int startPosition, const String& lineText, - CodeDocument::Iterator& source, - CodeTokeniser* analyser, - Array & newTokens) - { - CodeDocument::Iterator lastIterator (source); - const int lineLength = lineText.length(); - - for (;;) - { - int tokenType = analyser->readNextToken (source); - int tokenStart = lastIterator.getPosition(); - int tokenEnd = source.getPosition(); - - if (tokenEnd <= tokenStart) - break; - - tokenEnd -= startPosition; - - if (tokenEnd > 0) - { - tokenStart -= startPosition; - newTokens.add (SyntaxToken (lineText.substring (jmax (0, tokenStart), tokenEnd), - tokenType)); - - if (tokenEnd >= lineLength) - break; - } - - lastIterator = source; - } - - source = lastIterator; - } - - static void replaceTabsWithSpaces (Array & tokens, const int spacesPerTab) - { - int x = 0; - for (int i = 0; i < tokens.size(); ++i) - { - SyntaxToken& t = tokens.getReference(i); - - for (;;) - { - int tabPos = t.text.indexOfChar ('\t'); - if (tabPos < 0) - break; - - const int spacesNeeded = spacesPerTab - ((tabPos + x) % spacesPerTab); - t.text = t.text.replaceSection (tabPos, 1, String::repeatedString (" ", spacesNeeded)); - } - - x += t.text.length(); - } - } - - int indexToColumn (int index, const String& line, int spacesPerTab) const noexcept - { - jassert (index <= line.length()); - - String::CharPointerType t (line.getCharPointer()); - int col = 0; - for (int i = 0; i < index; ++i) - { - if (t.getAndAdvance() != '\t') - ++col; - else - col += spacesPerTab - (col % spacesPerTab); - } - - return col; - } -}; - -CodeEditorComponent::CodeEditorComponent (CodeDocument& document_, - CodeTokeniser* const codeTokeniser_) - : document (document_), - firstLineOnScreen (0), - gutter (5), - spacesPerTab (4), - lineHeight (0), - linesOnScreen (0), - columnsOnScreen (0), - scrollbarThickness (16), - columnToTryToMaintain (-1), - useSpacesForTabs (false), - xOffset (0), - verticalScrollBar (true), - horizontalScrollBar (false), - codeTokeniser (codeTokeniser_) -{ - caretPos = CodeDocument::Position (&document_, 0, 0); - caretPos.setPositionMaintained (true); - - selectionStart = CodeDocument::Position (&document_, 0, 0); - selectionStart.setPositionMaintained (true); - - selectionEnd = CodeDocument::Position (&document_, 0, 0); - selectionEnd.setPositionMaintained (true); - - setOpaque (true); - setMouseCursor (MouseCursor (MouseCursor::IBeamCursor)); - setWantsKeyboardFocus (true); - - addAndMakeVisible (&verticalScrollBar); - verticalScrollBar.setSingleStepSize (1.0); - - addAndMakeVisible (&horizontalScrollBar); - horizontalScrollBar.setSingleStepSize (1.0); - - addAndMakeVisible (caret = getLookAndFeel().createCaretComponent (this)); - - Font f (12.0f); - f.setTypefaceName (Font::getDefaultMonospacedFontName()); - setFont (f); - - resetToDefaultColours(); - - verticalScrollBar.addListener (this); - horizontalScrollBar.addListener (this); - document.addListener (this); -} - -CodeEditorComponent::~CodeEditorComponent() -{ - document.removeListener (this); -} - -void CodeEditorComponent::loadContent (const String& newContent) -{ - clearCachedIterators (0); - document.replaceAllContent (newContent); - document.clearUndoHistory(); - document.setSavePoint(); - caretPos.setPosition (0); - selectionStart.setPosition (0); - selectionEnd.setPosition (0); - scrollToLine (0); -} - -bool CodeEditorComponent::isTextInputActive() const -{ - return true; -} - -void CodeEditorComponent::setTemporaryUnderlining (const Array >&) -{ - jassertfalse; // TODO Windows IME not yet supported for this comp.. -} - -const Rectangle CodeEditorComponent::getCaretRectangle() -{ - return getLocalArea (caret, caret->getLocalBounds()); -} - -void CodeEditorComponent::codeDocumentChanged (const CodeDocument::Position& affectedTextStart, - const CodeDocument::Position& affectedTextEnd) -{ - clearCachedIterators (affectedTextStart.getLineNumber()); - - triggerAsyncUpdate(); - - updateCaretPosition(); - columnToTryToMaintain = -1; - - if (affectedTextEnd.getPosition() >= selectionStart.getPosition() - && affectedTextStart.getPosition() <= selectionEnd.getPosition()) - deselectAll(); - - if (caretPos.getPosition() > affectedTextEnd.getPosition() - || caretPos.getPosition() < affectedTextStart.getPosition()) - moveCaretTo (affectedTextStart, false); - - updateScrollBars(); -} - -void CodeEditorComponent::resized() -{ - linesOnScreen = (getHeight() - scrollbarThickness) / lineHeight; - columnsOnScreen = (int) ((getWidth() - scrollbarThickness) / charWidth); - lines.clear(); - rebuildLineTokens(); - updateCaretPosition(); - - verticalScrollBar.setBounds (getWidth() - scrollbarThickness, 0, scrollbarThickness, getHeight() - scrollbarThickness); - horizontalScrollBar.setBounds (gutter, getHeight() - scrollbarThickness, getWidth() - scrollbarThickness - gutter, scrollbarThickness); - updateScrollBars(); -} - -void CodeEditorComponent::paint (Graphics& g) -{ - handleUpdateNowIfNeeded(); - - g.fillAll (findColour (CodeEditorComponent::backgroundColourId)); - - g.reduceClipRegion (gutter, 0, verticalScrollBar.getX() - gutter, horizontalScrollBar.getY()); - - g.setFont (font); - const int baselineOffset = (int) font.getAscent(); - const Colour defaultColour (findColour (CodeEditorComponent::defaultTextColourId)); - const Colour highlightColour (findColour (CodeEditorComponent::highlightColourId)); - - const Rectangle clip (g.getClipBounds()); - const int firstLineToDraw = jmax (0, clip.getY() / lineHeight); - const int lastLineToDraw = jmin (lines.size(), clip.getBottom() / lineHeight + 1); - - for (int j = firstLineToDraw; j < lastLineToDraw; ++j) - { - lines.getUnchecked(j)->draw (*this, g, font, - (float) (gutter - xOffset * charWidth), - lineHeight * j, baselineOffset, lineHeight, - highlightColour); - } -} - -void CodeEditorComponent::setScrollbarThickness (const int thickness) -{ - if (scrollbarThickness != thickness) - { - scrollbarThickness = thickness; - resized(); - } -} - -void CodeEditorComponent::handleAsyncUpdate() -{ - rebuildLineTokens(); -} - -void CodeEditorComponent::rebuildLineTokens() -{ - cancelPendingUpdate(); - - const int numNeeded = linesOnScreen + 1; - - int minLineToRepaint = numNeeded; - int maxLineToRepaint = 0; - - if (numNeeded != lines.size()) - { - lines.clear(); - - for (int i = numNeeded; --i >= 0;) - lines.add (new CodeEditorLine()); - - minLineToRepaint = 0; - maxLineToRepaint = numNeeded; - } - - jassert (numNeeded == lines.size()); - - CodeDocument::Iterator source (&document); - getIteratorForPosition (CodeDocument::Position (&document, firstLineOnScreen, 0).getPosition(), source); - - for (int i = 0; i < numNeeded; ++i) - { - CodeEditorLine* const line = lines.getUnchecked(i); - - if (line->update (document, firstLineOnScreen + i, source, codeTokeniser, spacesPerTab, - selectionStart, selectionEnd)) - { - minLineToRepaint = jmin (minLineToRepaint, i); - maxLineToRepaint = jmax (maxLineToRepaint, i); - } - } - - if (minLineToRepaint <= maxLineToRepaint) - { - repaint (gutter, lineHeight * minLineToRepaint - 1, - verticalScrollBar.getX() - gutter, - lineHeight * (1 + maxLineToRepaint - minLineToRepaint) + 2); - } -} - -void CodeEditorComponent::updateCaretPosition() -{ - caret->setCaretPosition (getCharacterBounds (getCaretPos())); -} - -void CodeEditorComponent::moveCaretTo (const CodeDocument::Position& newPos, const bool highlighting) -{ - caretPos = newPos; - columnToTryToMaintain = -1; - - if (highlighting) - { - if (dragType == notDragging) - { - if (abs (caretPos.getPosition() - selectionStart.getPosition()) - < abs (caretPos.getPosition() - selectionEnd.getPosition())) - dragType = draggingSelectionStart; - else - dragType = draggingSelectionEnd; - } - - if (dragType == draggingSelectionStart) - { - selectionStart = caretPos; - - if (selectionEnd.getPosition() < selectionStart.getPosition()) - { - const CodeDocument::Position temp (selectionStart); - selectionStart = selectionEnd; - selectionEnd = temp; - - dragType = draggingSelectionEnd; - } - } - else - { - selectionEnd = caretPos; - - if (selectionEnd.getPosition() < selectionStart.getPosition()) - { - const CodeDocument::Position temp (selectionStart); - selectionStart = selectionEnd; - selectionEnd = temp; - - dragType = draggingSelectionStart; - } - } - - triggerAsyncUpdate(); - } - else - { - deselectAll(); - } - - updateCaretPosition(); - scrollToKeepCaretOnScreen(); - updateScrollBars(); -} - -void CodeEditorComponent::deselectAll() -{ - if (selectionStart != selectionEnd) - triggerAsyncUpdate(); - - selectionStart = caretPos; - selectionEnd = caretPos; -} - -void CodeEditorComponent::updateScrollBars() -{ - verticalScrollBar.setRangeLimits (0, jmax (document.getNumLines(), firstLineOnScreen + linesOnScreen)); - verticalScrollBar.setCurrentRange (firstLineOnScreen, linesOnScreen); - - horizontalScrollBar.setRangeLimits (0, jmax ((double) document.getMaximumLineLength(), xOffset + columnsOnScreen)); - horizontalScrollBar.setCurrentRange (xOffset, columnsOnScreen); -} - -void CodeEditorComponent::scrollToLineInternal (int newFirstLineOnScreen) -{ - newFirstLineOnScreen = jlimit (0, jmax (0, document.getNumLines() - 1), - newFirstLineOnScreen); - - if (newFirstLineOnScreen != firstLineOnScreen) - { - firstLineOnScreen = newFirstLineOnScreen; - updateCaretPosition(); - - updateCachedIterators (firstLineOnScreen); - triggerAsyncUpdate(); - } -} - -void CodeEditorComponent::scrollToColumnInternal (double column) -{ - const double newOffset = jlimit (0.0, document.getMaximumLineLength() + 3.0, column); - - if (xOffset != newOffset) - { - xOffset = newOffset; - updateCaretPosition(); - repaint(); - } -} - -void CodeEditorComponent::scrollToLine (int newFirstLineOnScreen) -{ - scrollToLineInternal (newFirstLineOnScreen); - updateScrollBars(); -} - -void CodeEditorComponent::scrollToColumn (int newFirstColumnOnScreen) -{ - scrollToColumnInternal (newFirstColumnOnScreen); - updateScrollBars(); -} - -void CodeEditorComponent::scrollBy (int deltaLines) -{ - scrollToLine (firstLineOnScreen + deltaLines); -} - -void CodeEditorComponent::scrollToKeepCaretOnScreen() -{ - if (caretPos.getLineNumber() < firstLineOnScreen) - scrollBy (caretPos.getLineNumber() - firstLineOnScreen); - else if (caretPos.getLineNumber() >= firstLineOnScreen + linesOnScreen) - scrollBy (caretPos.getLineNumber() - (firstLineOnScreen + linesOnScreen - 1)); - - const int column = indexToColumn (caretPos.getLineNumber(), caretPos.getIndexInLine()); - if (column >= xOffset + columnsOnScreen - 1) - scrollToColumn (column + 1 - columnsOnScreen); - else if (column < xOffset) - scrollToColumn (column); -} - -const Rectangle CodeEditorComponent::getCharacterBounds (const CodeDocument::Position& pos) const -{ - return Rectangle (roundToInt ((gutter - xOffset * charWidth) + indexToColumn (pos.getLineNumber(), pos.getIndexInLine()) * charWidth), - (pos.getLineNumber() - firstLineOnScreen) * lineHeight, - roundToInt (charWidth), - lineHeight); -} - -const CodeDocument::Position CodeEditorComponent::getPositionAt (int x, int y) -{ - const int line = y / lineHeight + firstLineOnScreen; - const int column = roundToInt ((x - (gutter - xOffset * charWidth)) / charWidth); - const int index = columnToIndex (line, column); - - return CodeDocument::Position (&document, line, index); -} - -void CodeEditorComponent::insertTextAtCaret (const String& newText) -{ - document.deleteSection (selectionStart, selectionEnd); - - if (newText.isNotEmpty()) - document.insertText (caretPos, newText); - - scrollToKeepCaretOnScreen(); -} - -void CodeEditorComponent::insertTabAtCaret() -{ - if (CharacterFunctions::isWhitespace (caretPos.getCharacter()) - && caretPos.getLineNumber() == caretPos.movedBy (1).getLineNumber()) - { - moveCaretTo (document.findWordBreakAfter (caretPos), false); - } - - if (useSpacesForTabs) - { - const int caretCol = indexToColumn (caretPos.getLineNumber(), caretPos.getIndexInLine()); - const int spacesNeeded = spacesPerTab - (caretCol % spacesPerTab); - insertTextAtCaret (String::repeatedString (" ", spacesNeeded)); - } - else - { - insertTextAtCaret ("\t"); - } -} - -void CodeEditorComponent::cut() -{ - insertTextAtCaret (String::empty); -} - -bool CodeEditorComponent::copyToClipboard() -{ - newTransaction(); - - const String selection (document.getTextBetween (selectionStart, selectionEnd)); - - if (selection.isNotEmpty()) - SystemClipboard::copyTextToClipboard (selection); - - return true; -} - -bool CodeEditorComponent::cutToClipboard() -{ - copyToClipboard(); - cut(); - newTransaction(); - return true; -} - -bool CodeEditorComponent::pasteFromClipboard() -{ - newTransaction(); - const String clip (SystemClipboard::getTextFromClipboard()); - - if (clip.isNotEmpty()) - insertTextAtCaret (clip); - - newTransaction(); - return true; -} - -bool CodeEditorComponent::moveCaretLeft (const bool moveInWholeWordSteps, const bool selecting) -{ - newTransaction(); - - if (moveInWholeWordSteps) - moveCaretTo (document.findWordBreakBefore (caretPos), selecting); - else - moveCaretTo (caretPos.movedBy (-1), selecting); - - return true; -} - -bool CodeEditorComponent::moveCaretRight (const bool moveInWholeWordSteps, const bool selecting) -{ - newTransaction(); - - if (moveInWholeWordSteps) - moveCaretTo (document.findWordBreakAfter (caretPos), selecting); - else - moveCaretTo (caretPos.movedBy (1), selecting); - - return true; -} - -void CodeEditorComponent::moveLineDelta (const int delta, const bool selecting) -{ - CodeDocument::Position pos (caretPos); - const int newLineNum = pos.getLineNumber() + delta; - - if (columnToTryToMaintain < 0) - columnToTryToMaintain = indexToColumn (pos.getLineNumber(), pos.getIndexInLine()); - - pos.setLineAndIndex (newLineNum, columnToIndex (newLineNum, columnToTryToMaintain)); - - const int colToMaintain = columnToTryToMaintain; - moveCaretTo (pos, selecting); - columnToTryToMaintain = colToMaintain; -} - -bool CodeEditorComponent::moveCaretDown (const bool selecting) -{ - newTransaction(); - - if (caretPos.getLineNumber() == document.getNumLines() - 1) - moveCaretTo (CodeDocument::Position (&document, std::numeric_limits::max(), std::numeric_limits::max()), selecting); - else - moveLineDelta (1, selecting); - - return true; -} - -bool CodeEditorComponent::moveCaretUp (const bool selecting) -{ - newTransaction(); - - if (caretPos.getLineNumber() == 0) - moveCaretTo (CodeDocument::Position (&document, 0, 0), selecting); - else - moveLineDelta (-1, selecting); - - return true; -} - -bool CodeEditorComponent::pageDown (const bool selecting) -{ - newTransaction(); - scrollBy (jlimit (0, linesOnScreen, 1 + document.getNumLines() - firstLineOnScreen - linesOnScreen)); - moveLineDelta (linesOnScreen, selecting); - return true; -} - -bool CodeEditorComponent::pageUp (const bool selecting) -{ - newTransaction(); - scrollBy (-linesOnScreen); - moveLineDelta (-linesOnScreen, selecting); - return true; -} - -bool CodeEditorComponent::scrollUp() -{ - newTransaction(); - scrollBy (1); - - if (caretPos.getLineNumber() < firstLineOnScreen) - moveLineDelta (1, false); - - return true; -} - -bool CodeEditorComponent::scrollDown() -{ - newTransaction(); - scrollBy (-1); - - if (caretPos.getLineNumber() >= firstLineOnScreen + linesOnScreen) - moveLineDelta (-1, false); - - return true; -} - -bool CodeEditorComponent::moveCaretToTop (const bool selecting) -{ - newTransaction(); - moveCaretTo (CodeDocument::Position (&document, 0, 0), selecting); - return true; -} - -namespace CodeEditorHelpers -{ - int findFirstNonWhitespaceChar (const String& line) noexcept - { - String::CharPointerType t (line.getCharPointer()); - int i = 0; - - while (! t.isEmpty()) - { - if (! t.isWhitespace()) - return i; - - ++t; - ++i; - } - - return 0; - } -} - -bool CodeEditorComponent::moveCaretToStartOfLine (const bool selecting) -{ - newTransaction(); - - int index = CodeEditorHelpers::findFirstNonWhitespaceChar (caretPos.getLineText()); - - if (index >= caretPos.getIndexInLine() && caretPos.getIndexInLine() > 0) - index = 0; - - moveCaretTo (CodeDocument::Position (&document, caretPos.getLineNumber(), index), selecting); - return true; -} - -bool CodeEditorComponent::moveCaretToEnd (const bool selecting) -{ - newTransaction(); - moveCaretTo (CodeDocument::Position (&document, std::numeric_limits::max(), std::numeric_limits::max()), selecting); - return true; -} - -bool CodeEditorComponent::moveCaretToEndOfLine (const bool selecting) -{ - newTransaction(); - moveCaretTo (CodeDocument::Position (&document, caretPos.getLineNumber(), std::numeric_limits::max()), selecting); - return true; -} - -bool CodeEditorComponent::deleteBackwards (const bool moveInWholeWordSteps) -{ - if (moveInWholeWordSteps) - { - cut(); // in case something is already highlighted - moveCaretTo (document.findWordBreakBefore (caretPos), true); - } - else - { - if (selectionStart == selectionEnd) - selectionStart.moveBy (-1); - } - - cut(); - return true; -} - -bool CodeEditorComponent::deleteForwards (const bool moveInWholeWordSteps) -{ - if (moveInWholeWordSteps) - { - cut(); // in case something is already highlighted - moveCaretTo (document.findWordBreakAfter (caretPos), true); - } - else - { - if (selectionStart == selectionEnd) - selectionEnd.moveBy (1); - else - newTransaction(); - } - - cut(); - return true; -} - -bool CodeEditorComponent::selectAll() -{ - newTransaction(); - moveCaretTo (CodeDocument::Position (&document, std::numeric_limits::max(), std::numeric_limits::max()), false); - moveCaretTo (CodeDocument::Position (&document, 0, 0), true); - return true; -} - -bool CodeEditorComponent::undo() -{ - document.undo(); - scrollToKeepCaretOnScreen(); - return true; -} - -bool CodeEditorComponent::redo() -{ - document.redo(); - scrollToKeepCaretOnScreen(); - return true; -} - -void CodeEditorComponent::newTransaction() -{ - document.newTransaction(); - startTimer (600); -} - -void CodeEditorComponent::timerCallback() -{ - newTransaction(); -} - -const Range CodeEditorComponent::getHighlightedRegion() const -{ - return Range (selectionStart.getPosition(), selectionEnd.getPosition()); -} - -void CodeEditorComponent::setHighlightedRegion (const Range& newRange) -{ - moveCaretTo (CodeDocument::Position (&document, newRange.getStart()), false); - moveCaretTo (CodeDocument::Position (&document, newRange.getEnd()), true); -} - -const String CodeEditorComponent::getTextInRange (const Range& range) const -{ - return document.getTextBetween (CodeDocument::Position (&document, range.getStart()), - CodeDocument::Position (&document, range.getEnd())); -} - -bool CodeEditorComponent::keyPressed (const KeyPress& key) -{ - if (! TextEditorKeyMapper::invokeKeyFunction (*this, key)) - { - if (key == KeyPress::tabKey || key.getTextCharacter() == '\t') - { - insertTabAtCaret(); - } - else if (key == KeyPress::returnKey) - { - newTransaction(); - insertTextAtCaret (document.getNewLineCharacters()); - } - else if (key.isKeyCode (KeyPress::escapeKey)) - { - newTransaction(); - } - else if (key.getTextCharacter() >= ' ') - { - insertTextAtCaret (String::charToString (key.getTextCharacter())); - } - else - { - return false; - } - } - - return true; -} - -void CodeEditorComponent::mouseDown (const MouseEvent& e) -{ - newTransaction(); - dragType = notDragging; - - if (! e.mods.isPopupMenu()) - { - beginDragAutoRepeat (100); - moveCaretTo (getPositionAt (e.x, e.y), e.mods.isShiftDown()); - } - else - { - /*PopupMenu m; - addPopupMenuItems (m, &e); - - const int result = m.show(); - - if (result != 0) - performPopupMenuAction (result); - */ - } -} - -void CodeEditorComponent::mouseDrag (const MouseEvent& e) -{ - if (! e.mods.isPopupMenu()) - moveCaretTo (getPositionAt (e.x, e.y), true); -} - -void CodeEditorComponent::mouseUp (const MouseEvent&) -{ - newTransaction(); - beginDragAutoRepeat (0); - dragType = notDragging; -} - -void CodeEditorComponent::mouseDoubleClick (const MouseEvent& e) -{ - CodeDocument::Position tokenStart (getPositionAt (e.x, e.y)); - CodeDocument::Position tokenEnd (tokenStart); - - if (e.getNumberOfClicks() > 2) - { - tokenStart.setLineAndIndex (tokenStart.getLineNumber(), 0); - tokenEnd.setLineAndIndex (tokenStart.getLineNumber() + 1, 0); - } - else - { - while (CharacterFunctions::isLetterOrDigit (tokenEnd.getCharacter())) - tokenEnd.moveBy (1); - - tokenStart = tokenEnd; - - while (tokenStart.getIndexInLine() > 0 - && CharacterFunctions::isLetterOrDigit (tokenStart.movedBy (-1).getCharacter())) - tokenStart.moveBy (-1); - } - - moveCaretTo (tokenEnd, false); - moveCaretTo (tokenStart, true); -} - -void CodeEditorComponent::mouseWheelMove (const MouseEvent& e, float wheelIncrementX, float wheelIncrementY) -{ - if ((verticalScrollBar.isVisible() && wheelIncrementY != 0) - || (horizontalScrollBar.isVisible() && wheelIncrementX != 0)) - { - verticalScrollBar.mouseWheelMove (e, 0, wheelIncrementY); - horizontalScrollBar.mouseWheelMove (e, wheelIncrementX, 0); - } - else - { - Component::mouseWheelMove (e, wheelIncrementX, wheelIncrementY); - } -} - -void CodeEditorComponent::scrollBarMoved (ScrollBar* scrollBarThatHasMoved, double newRangeStart) -{ - if (scrollBarThatHasMoved == &verticalScrollBar) - scrollToLineInternal ((int) newRangeStart); - else - scrollToColumnInternal (newRangeStart); -} - -void CodeEditorComponent::focusGained (FocusChangeType) -{ - updateCaretPosition(); -} - -void CodeEditorComponent::focusLost (FocusChangeType) -{ - updateCaretPosition(); -} - -void CodeEditorComponent::setTabSize (const int numSpaces, const bool insertSpaces) -{ - useSpacesForTabs = insertSpaces; - - if (spacesPerTab != numSpaces) - { - spacesPerTab = numSpaces; - triggerAsyncUpdate(); - } -} - -int CodeEditorComponent::indexToColumn (int lineNum, int index) const noexcept -{ - String::CharPointerType t (document.getLine (lineNum).getCharPointer()); - - int col = 0; - for (int i = 0; i < index; ++i) - { - if (t.isEmpty()) - { - jassertfalse; - break; - } - - if (t.getAndAdvance() != '\t') - ++col; - else - col += getTabSize() - (col % getTabSize()); - } - - return col; -} - -int CodeEditorComponent::columnToIndex (int lineNum, int column) const noexcept -{ - String::CharPointerType t (document.getLine (lineNum).getCharPointer()); - - int i = 0, col = 0; - - while (! t.isEmpty()) - { - if (t.getAndAdvance() != '\t') - ++col; - else - col += getTabSize() - (col % getTabSize()); - - if (col > column) - break; - - ++i; - } - - return i; -} - -void CodeEditorComponent::setFont (const Font& newFont) -{ - font = newFont; - charWidth = font.getStringWidthFloat ("0"); - lineHeight = roundToInt (font.getHeight()); - resized(); -} - -void CodeEditorComponent::resetToDefaultColours() -{ - coloursForTokenCategories.clear(); - - if (codeTokeniser != nullptr) - { - for (int i = codeTokeniser->getTokenTypes().size(); --i >= 0;) - setColourForTokenType (i, codeTokeniser->getDefaultColour (i)); - } -} - -void CodeEditorComponent::setColourForTokenType (const int tokenType, const Colour& colour) -{ - jassert (tokenType < 256); - - while (coloursForTokenCategories.size() < tokenType) - coloursForTokenCategories.add (Colours::black); - - coloursForTokenCategories.set (tokenType, colour); - repaint(); -} - -const Colour CodeEditorComponent::getColourForTokenType (const int tokenType) const -{ - if (! isPositiveAndBelow (tokenType, coloursForTokenCategories.size())) - return findColour (CodeEditorComponent::defaultTextColourId); - - return coloursForTokenCategories.getReference (tokenType); -} - -void CodeEditorComponent::clearCachedIterators (const int firstLineToBeInvalid) -{ - int i; - for (i = cachedIterators.size(); --i >= 0;) - if (cachedIterators.getUnchecked (i)->getLine() < firstLineToBeInvalid) - break; - - cachedIterators.removeRange (jmax (0, i - 1), cachedIterators.size()); -} - -void CodeEditorComponent::updateCachedIterators (int maxLineNum) -{ - const int maxNumCachedPositions = 5000; - const int linesBetweenCachedSources = jmax (10, document.getNumLines() / maxNumCachedPositions); - - if (cachedIterators.size() == 0) - cachedIterators.add (new CodeDocument::Iterator (&document)); - - if (codeTokeniser == nullptr) - return; - - for (;;) - { - CodeDocument::Iterator* last = cachedIterators.getLast(); - - if (last->getLine() >= maxLineNum) - break; - - CodeDocument::Iterator* t = new CodeDocument::Iterator (*last); - cachedIterators.add (t); - const int targetLine = last->getLine() + linesBetweenCachedSources; - - for (;;) - { - codeTokeniser->readNextToken (*t); - - if (t->getLine() >= targetLine) - break; - - if (t->isEOF()) - return; - } - } -} - -void CodeEditorComponent::getIteratorForPosition (int position, CodeDocument::Iterator& source) -{ - if (codeTokeniser == nullptr) - return; - - for (int i = cachedIterators.size(); --i >= 0;) - { - CodeDocument::Iterator* t = cachedIterators.getUnchecked (i); - if (t->getPosition() <= position) - { - source = *t; - break; - } - } - - while (source.getPosition() < position) - { - const CodeDocument::Iterator original (source); - codeTokeniser->readNextToken (source); - - if (source.getPosition() > position || source.isEOF()) - { - source = original; - break; - } - } -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_CodeEditorComponent.cpp ***/ - - -/*** Start of inlined file: juce_CPlusPlusCodeTokeniser.cpp ***/ -BEGIN_JUCE_NAMESPACE - -CPlusPlusCodeTokeniser::CPlusPlusCodeTokeniser() -{ -} - -CPlusPlusCodeTokeniser::~CPlusPlusCodeTokeniser() -{ -} - -namespace CppTokeniser -{ - bool isIdentifierStart (const juce_wchar c) noexcept - { - return CharacterFunctions::isLetter (c) - || c == '_' || c == '@'; - } - - bool isIdentifierBody (const juce_wchar c) noexcept - { - return CharacterFunctions::isLetterOrDigit (c) - || c == '_' || c == '@'; - } - - bool isReservedKeyword (String::CharPointerType token, const int tokenLength) noexcept - { - static const char* const keywords2Char[] = - { "if", "do", "or", "id", 0 }; - - static const char* const keywords3Char[] = - { "for", "int", "new", "try", "xor", "and", "asm", "not", 0 }; - - static const char* const keywords4Char[] = - { "bool", "void", "this", "true", "long", "else", "char", - "enum", "case", "goto", "auto", 0 }; - - static const char* const keywords5Char[] = - { "while", "bitor", "break", "catch", "class", "compl", "const", "false", - "float", "short", "throw", "union", "using", "or_eq", 0 }; - - static const char* const keywords6Char[] = - { "return", "struct", "and_eq", "bitand", "delete", "double", "extern", - "friend", "inline", "not_eq", "public", "sizeof", "static", "signed", - "switch", "typeid", "wchar_t", "xor_eq", 0}; - - static const char* const keywords7Char[] = - { "default", "mutable", "private", "typedef", "nullptr", "virtual", 0 }; - - static const char* const keywordsOther[] = - { "noexcept", "const_cast", "continue", "explicit", "namespace", - "operator", "protected", "register", "reinterpret_cast", "static_cast", - "template", "typename", "unsigned", "volatile", "constexpr", - "@implementation", "@interface", "@end", "@synthesize", "@dynamic", "@public", - "@private", "@property", "@protected", "@class", 0 }; - - const char* const* k; - - switch (tokenLength) - { - case 2: k = keywords2Char; break; - case 3: k = keywords3Char; break; - case 4: k = keywords4Char; break; - case 5: k = keywords5Char; break; - case 6: k = keywords6Char; break; - case 7: k = keywords7Char; break; - - default: - if (tokenLength < 2 || tokenLength > 16) - return false; - - k = keywordsOther; - break; - } - - int i = 0; - while (k[i] != 0) - { - if (token.compare (CharPointer_ASCII (k[i])) == 0) - return true; - - ++i; - } - - return false; - } - - int parseIdentifier (CodeDocument::Iterator& source) noexcept - { - int tokenLength = 0; - String::CharPointerType::CharType possibleIdentifier [100]; - String::CharPointerType possible (possibleIdentifier); - - while (isIdentifierBody (source.peekNextChar())) - { - const juce_wchar c = source.nextChar(); - - if (tokenLength < 20) - possible.write (c); - - ++tokenLength; - } - - if (tokenLength > 1 && tokenLength <= 16) - { - possible.writeNull(); - - if (isReservedKeyword (String::CharPointerType (possibleIdentifier), tokenLength)) - return CPlusPlusCodeTokeniser::tokenType_builtInKeyword; - } - - return CPlusPlusCodeTokeniser::tokenType_identifier; - } - - bool skipNumberSuffix (CodeDocument::Iterator& source) - { - const juce_wchar c = source.peekNextChar(); - if (c == 'l' || c == 'L' || c == 'u' || c == 'U') - source.skip(); - - if (CharacterFunctions::isLetterOrDigit (source.peekNextChar())) - return false; - - return true; - } - - bool isHexDigit (const juce_wchar c) noexcept - { - return (c >= '0' && c <= '9') - || (c >= 'a' && c <= 'f') - || (c >= 'A' && c <= 'F'); - } - - bool parseHexLiteral (CodeDocument::Iterator& source) noexcept - { - if (source.nextChar() != '0') - return false; - - juce_wchar c = source.nextChar(); - if (c != 'x' && c != 'X') - return false; - - int numDigits = 0; - while (isHexDigit (source.peekNextChar())) - { - ++numDigits; - source.skip(); - } - - if (numDigits == 0) - return false; - - return skipNumberSuffix (source); - } - - bool isOctalDigit (const juce_wchar c) noexcept - { - return c >= '0' && c <= '7'; - } - - bool parseOctalLiteral (CodeDocument::Iterator& source) noexcept - { - if (source.nextChar() != '0') - return false; - - if (! isOctalDigit (source.nextChar())) - return false; - - while (isOctalDigit (source.peekNextChar())) - source.skip(); - - return skipNumberSuffix (source); - } - - bool isDecimalDigit (const juce_wchar c) noexcept - { - return c >= '0' && c <= '9'; - } - - bool parseDecimalLiteral (CodeDocument::Iterator& source) noexcept - { - int numChars = 0; - while (isDecimalDigit (source.peekNextChar())) - { - ++numChars; - source.skip(); - } - - if (numChars == 0) - return false; - - return skipNumberSuffix (source); - } - - bool parseFloatLiteral (CodeDocument::Iterator& source) noexcept - { - int numDigits = 0; - - while (isDecimalDigit (source.peekNextChar())) - { - source.skip(); - ++numDigits; - } - - const bool hasPoint = (source.peekNextChar() == '.'); - - if (hasPoint) - { - source.skip(); - - while (isDecimalDigit (source.peekNextChar())) - { - source.skip(); - ++numDigits; - } - } - - if (numDigits == 0) - return false; - - juce_wchar c = source.peekNextChar(); - const bool hasExponent = (c == 'e' || c == 'E'); - - if (hasExponent) - { - source.skip(); - - c = source.peekNextChar(); - if (c == '+' || c == '-') - source.skip(); - - int numExpDigits = 0; - while (isDecimalDigit (source.peekNextChar())) - { - source.skip(); - ++numExpDigits; - } - - if (numExpDigits == 0) - return false; - } - - c = source.peekNextChar(); - if (c == 'f' || c == 'F') - source.skip(); - else if (! (hasExponent || hasPoint)) - return false; - - return true; - } - - int parseNumber (CodeDocument::Iterator& source) - { - const CodeDocument::Iterator original (source); - - if (parseFloatLiteral (source)) - return CPlusPlusCodeTokeniser::tokenType_floatLiteral; - - source = original; - - if (parseHexLiteral (source)) - return CPlusPlusCodeTokeniser::tokenType_integerLiteral; - - source = original; - - if (parseOctalLiteral (source)) - return CPlusPlusCodeTokeniser::tokenType_integerLiteral; - - source = original; - - if (parseDecimalLiteral (source)) - return CPlusPlusCodeTokeniser::tokenType_integerLiteral; - - source = original; - source.skip(); - - return CPlusPlusCodeTokeniser::tokenType_error; - } - - void skipQuotedString (CodeDocument::Iterator& source) noexcept - { - const juce_wchar quote = source.nextChar(); - - for (;;) - { - const juce_wchar c = source.nextChar(); - - if (c == quote || c == 0) - break; - - if (c == '\\') - source.skip(); - } - } - - void skipComment (CodeDocument::Iterator& source) noexcept - { - bool lastWasStar = false; - - for (;;) - { - const juce_wchar c = source.nextChar(); - - if (c == 0 || (c == '/' && lastWasStar)) - break; - - lastWasStar = (c == '*'); - } - } -} - -int CPlusPlusCodeTokeniser::readNextToken (CodeDocument::Iterator& source) -{ - int result = tokenType_error; - source.skipWhitespace(); - - juce_wchar firstChar = source.peekNextChar(); - - switch (firstChar) - { - case 0: - source.skip(); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - result = CppTokeniser::parseNumber (source); - break; - - case '.': - result = CppTokeniser::parseNumber (source); - - if (result == tokenType_error) - result = tokenType_punctuation; - - break; - - case ',': - case ';': - case ':': - source.skip(); - result = tokenType_punctuation; - break; - - case '(': - case ')': - case '{': - case '}': - case '[': - case ']': - source.skip(); - result = tokenType_bracket; - break; - - case '"': - case '\'': - CppTokeniser::skipQuotedString (source); - result = tokenType_stringLiteral; - break; - - case '+': - result = tokenType_operator; - source.skip(); - - if (source.peekNextChar() == '+') - source.skip(); - else if (source.peekNextChar() == '=') - source.skip(); - - break; - - case '-': - source.skip(); - result = CppTokeniser::parseNumber (source); - - if (result == tokenType_error) - { - result = tokenType_operator; - - if (source.peekNextChar() == '-') - source.skip(); - else if (source.peekNextChar() == '=') - source.skip(); - } - break; - - case '*': - case '%': - case '=': - case '!': - result = tokenType_operator; - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - - break; - - case '/': - result = tokenType_operator; - source.skip(); - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '/') - { - result = tokenType_comment; - source.skipToEndOfLine(); - } - else if (source.peekNextChar() == '*') - { - source.skip(); - result = tokenType_comment; - CppTokeniser::skipComment (source); - } - - break; - - case '?': - case '~': - source.skip(); - result = tokenType_operator; - break; - - case '<': - source.skip(); - result = tokenType_operator; - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '<') - { - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - } - - break; - - case '>': - source.skip(); - result = tokenType_operator; - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '<') - { - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - } - - break; - - case '|': - source.skip(); - result = tokenType_operator; - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '|') - { - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - } - - break; - - case '&': - source.skip(); - result = tokenType_operator; - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '&') - { - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - } - - break; - - case '^': - source.skip(); - result = tokenType_operator; - - if (source.peekNextChar() == '=') - { - source.skip(); - } - else if (source.peekNextChar() == '^') - { - source.skip(); - - if (source.peekNextChar() == '=') - source.skip(); - } - - break; - - case '#': - result = tokenType_preprocessor; - source.skipToEndOfLine(); - break; - - default: - if (CppTokeniser::isIdentifierStart (firstChar)) - result = CppTokeniser::parseIdentifier (source); - else - source.skip(); - - break; - } - - return result; -} - -StringArray CPlusPlusCodeTokeniser::getTokenTypes() -{ - const char* const types[] = - { - "Error", - "Comment", - "C++ keyword", - "Identifier", - "Integer literal", - "Float literal", - "String literal", - "Operator", - "Bracket", - "Punctuation", - "Preprocessor line", - 0 - }; - - return StringArray (types); -} - -const Colour CPlusPlusCodeTokeniser::getDefaultColour (const int tokenType) -{ - const uint32 colours[] = - { - 0xffcc0000, // error - 0xff00aa00, // comment - 0xff0000cc, // keyword - 0xff000000, // identifier - 0xff880000, // int literal - 0xff885500, // float literal - 0xff990099, // string literal - 0xff225500, // operator - 0xff000055, // bracket - 0xff004400, // punctuation - 0xff660000 // preprocessor - }; - - if (tokenType >= 0 && tokenType < numElementsInArray (colours)) - return Colour (colours [tokenType]); - - return Colours::black; -} - -bool CPlusPlusCodeTokeniser::isReservedKeyword (const String& token) noexcept -{ - return CppTokeniser::isReservedKeyword (token.getCharPointer(), token.length()); -} - -END_JUCE_NAMESPACE - -/*** End of inlined file: juce_CPlusPlusCodeTokeniser.cpp ***/ - - -/*** Start of inlined file: juce_ComboBox.cpp ***/ -BEGIN_JUCE_NAMESPACE - -ComboBox::ItemInfo::ItemInfo (const String& name_, int itemId_, bool isEnabled_, bool isHeading_) - : name (name_), itemId (itemId_), isEnabled (isEnabled_), isHeading (isHeading_) -{ -} - -bool ComboBox::ItemInfo::isSeparator() const noexcept -{ - return name.isEmpty(); -} - -bool ComboBox::ItemInfo::isRealItem() const noexcept -{ - return ! (isHeading || name.isEmpty()); -} - -ComboBox::ComboBox (const String& name) - : Component (name), - lastCurrentId (0), - isButtonDown (false), - separatorPending (false), - menuActive (false), - noChoicesMessage (TRANS("(no choices)")) -{ - setRepaintsOnMouseActivity (true); - ComboBox::lookAndFeelChanged(); - currentId.addListener (this); -} - -ComboBox::~ComboBox() -{ - currentId.removeListener (this); - - if (menuActive) - PopupMenu::dismissAllActiveMenus(); - - label = nullptr; -} - -void ComboBox::setEditableText (const bool isEditable) -{ - if (label->isEditableOnSingleClick() != isEditable || label->isEditableOnDoubleClick() != isEditable) - { - label->setEditable (isEditable, isEditable, false); - setWantsKeyboardFocus (! isEditable); - resized(); - } -} - -bool ComboBox::isTextEditable() const noexcept -{ - return label->isEditable(); -} - -void ComboBox::setJustificationType (const Justification& justification) -{ - label->setJustificationType (justification); -} - -const Justification ComboBox::getJustificationType() const noexcept -{ - return label->getJustificationType(); -} - -void ComboBox::setTooltip (const String& newTooltip) -{ - SettableTooltipClient::setTooltip (newTooltip); - label->setTooltip (newTooltip); -} - -void ComboBox::addItem (const String& newItemText, const int newItemId) -{ - // you can't add empty strings to the list.. - jassert (newItemText.isNotEmpty()); - - // IDs must be non-zero, as zero is used to indicate a lack of selecion. - jassert (newItemId != 0); - - // you shouldn't use duplicate item IDs! - jassert (getItemForId (newItemId) == nullptr); - - if (newItemText.isNotEmpty() && newItemId != 0) - { - if (separatorPending) - { - separatorPending = false; - items.add (new ItemInfo (String::empty, 0, false, false)); - } - - items.add (new ItemInfo (newItemText, newItemId, true, false)); - } -} - -void ComboBox::addSeparator() -{ - separatorPending = (items.size() > 0); -} - -void ComboBox::addSectionHeading (const String& headingName) -{ - // you can't add empty strings to the list.. - jassert (headingName.isNotEmpty()); - - if (headingName.isNotEmpty()) - { - if (separatorPending) - { - separatorPending = false; - items.add (new ItemInfo (String::empty, 0, false, false)); - } - - items.add (new ItemInfo (headingName, 0, true, true)); - } -} - -void ComboBox::setItemEnabled (const int itemId, const bool shouldBeEnabled) -{ - ItemInfo* const item = getItemForId (itemId); - - if (item != nullptr) - item->isEnabled = shouldBeEnabled; -} - -bool ComboBox::isItemEnabled (int itemId) const noexcept -{ - const ItemInfo* const item = getItemForId (itemId); - return item != nullptr && item->isEnabled; -} - -void ComboBox::changeItemText (const int itemId, const String& newText) -{ - ItemInfo* const item = getItemForId (itemId); - - jassert (item != nullptr); - - if (item != nullptr) - item->name = newText; -} - -void ComboBox::clear (const bool dontSendChangeMessage) -{ - items.clear(); - separatorPending = false; - - if (! label->isEditable()) - setSelectedItemIndex (-1, dontSendChangeMessage); -} - -ComboBox::ItemInfo* ComboBox::getItemForId (const int itemId) const noexcept -{ - if (itemId != 0) - { - for (int i = items.size(); --i >= 0;) - if (items.getUnchecked(i)->itemId == itemId) - return items.getUnchecked(i); - } - - return nullptr; -} - -ComboBox::ItemInfo* ComboBox::getItemForIndex (const int index) const noexcept -{ - for (int n = 0, i = 0; i < items.size(); ++i) - { - ItemInfo* const item = items.getUnchecked(i); - - if (item->isRealItem()) - if (n++ == index) - return item; - } - - return nullptr; -} - -int ComboBox::getNumItems() const noexcept -{ - int n = 0; - - for (int i = items.size(); --i >= 0;) - if (items.getUnchecked(i)->isRealItem()) - ++n; - - return n; -} - -String ComboBox::getItemText (const int index) const -{ - const ItemInfo* const item = getItemForIndex (index); - - return item != nullptr ? item->name : String::empty; -} - -int ComboBox::getItemId (const int index) const noexcept -{ - const ItemInfo* const item = getItemForIndex (index); - - return item != nullptr ? item->itemId : 0; -} - -int ComboBox::indexOfItemId (const int itemId) const noexcept -{ - for (int n = 0, i = 0; i < items.size(); ++i) - { - const ItemInfo* const item = items.getUnchecked(i); - - if (item->isRealItem()) - { - if (item->itemId == itemId) - return n; - - ++n; - } - } - - return -1; -} - -int ComboBox::getSelectedItemIndex() const -{ - int index = indexOfItemId (currentId.getValue()); - - if (getText() != getItemText (index)) - index = -1; - - return index; -} - -void ComboBox::setSelectedItemIndex (const int index, const bool dontSendChangeMessage) -{ - setSelectedId (getItemId (index), dontSendChangeMessage); -} - -int ComboBox::getSelectedId() const noexcept -{ - const ItemInfo* const item = getItemForId (currentId.getValue()); - - return (item != nullptr && getText() == item->name) ? item->itemId : 0; -} - -void ComboBox::setSelectedId (const int newItemId, const bool dontSendChangeMessage) -{ - const ItemInfo* const item = getItemForId (newItemId); - const String newItemText (item != nullptr ? item->name : String::empty); - - if (lastCurrentId != newItemId || label->getText() != newItemText) - { - if (! dontSendChangeMessage) - triggerAsyncUpdate(); - - label->setText (newItemText, false); - lastCurrentId = newItemId; - currentId = newItemId; - - repaint(); // for the benefit of the 'none selected' text - } -} - -bool ComboBox::selectIfEnabled (const int index) -{ - const ItemInfo* const item = getItemForIndex (index); - - if (item != nullptr && item->isEnabled) - { - setSelectedItemIndex (index); - return true; - } - - return false; -} - -void ComboBox::valueChanged (Value&) -{ - if (lastCurrentId != (int) currentId.getValue()) - setSelectedId (currentId.getValue(), false); -} - -String ComboBox::getText() const -{ - return label->getText(); -} - -void ComboBox::setText (const String& newText, const bool dontSendChangeMessage) -{ - for (int i = items.size(); --i >= 0;) - { - const ItemInfo* const item = items.getUnchecked(i); - - if (item->isRealItem() - && item->name == newText) - { - setSelectedId (item->itemId, dontSendChangeMessage); - return; - } - } - - lastCurrentId = 0; - currentId = 0; - - if (label->getText() != newText) - { - label->setText (newText, false); - - if (! dontSendChangeMessage) - triggerAsyncUpdate(); - } - - repaint(); -} - -void ComboBox::showEditor() -{ - jassert (isTextEditable()); // you probably shouldn't do this to a non-editable combo box? - - label->showEditor(); -} - -void ComboBox::setTextWhenNothingSelected (const String& newMessage) -{ - if (textWhenNothingSelected != newMessage) - { - textWhenNothingSelected = newMessage; - repaint(); - } -} - -String ComboBox::getTextWhenNothingSelected() const -{ - return textWhenNothingSelected; -} - -void ComboBox::setTextWhenNoChoicesAvailable (const String& newMessage) -{ - noChoicesMessage = newMessage; -} - -String ComboBox::getTextWhenNoChoicesAvailable() const -{ - return noChoicesMessage; -} - -void ComboBox::paint (Graphics& g) -{ - getLookAndFeel().drawComboBox (g, getWidth(), getHeight(), isButtonDown, - label->getRight(), 0, getWidth() - label->getRight(), getHeight(), - *this); - - if (textWhenNothingSelected.isNotEmpty() - && label->getText().isEmpty() - && ! label->isBeingEdited()) - { - g.setColour (findColour (textColourId).withMultipliedAlpha (0.5f)); - g.setFont (label->getFont()); - g.drawFittedText (textWhenNothingSelected, - label->getX() + 2, label->getY() + 1, - label->getWidth() - 4, label->getHeight() - 2, - label->getJustificationType(), - jmax (1, (int) (label->getHeight() / label->getFont().getHeight()))); - } -} - -void ComboBox::resized() -{ - if (getHeight() > 0 && getWidth() > 0) - getLookAndFeel().positionComboBoxText (*this, *label); -} - -void ComboBox::enablementChanged() -{ - repaint(); -} - -void ComboBox::lookAndFeelChanged() -{ - repaint(); - - { - ScopedPointer