New upstream version 4.2.4~repack
authorIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>
Wed, 21 Sep 2016 06:42:15 +0000 (08:42 +0200)
committerIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>
Wed, 21 Sep 2016 06:42:15 +0000 (08:42 +0200)
502 files changed:
.github/ISSUE_TEMPLATE.txt [new file with mode: 0644]
ChangeList.txt
examples/AUv3Synth/AUv3Synth.jucer
examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj
examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj
examples/AUv3Synth/JuceLibraryCode/AppConfig.h
examples/AnimationAppExample/AnimationAppExample.jucer
examples/AnimationAppExample/Builds/MacOSX/AnimationAppExample.xcodeproj/project.pbxproj
examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj
examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj.filters
examples/AnimationAppExample/Builds/iOS/AnimationAppExample.xcodeproj/project.pbxproj
examples/AnimationAppExample/JuceLibraryCode/AppConfig.h
examples/AudioAppExample/AudioAppExample.jucer
examples/AudioAppExample/Builds/MacOSX/AudioAppExample.xcodeproj/project.pbxproj
examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj
examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj.filters
examples/AudioAppExample/Builds/iOS/AudioAppExample.xcodeproj/project.pbxproj
examples/AudioAppExample/JuceLibraryCode/AppConfig.h
examples/BouncingBallWavetableDemo/BouncingBallWavetableDemo.jucer
examples/BouncingBallWavetableDemo/Builds/Linux/Makefile
examples/BouncingBallWavetableDemo/Builds/MacOSX/BouncingBallWavetableDemo.xcodeproj/project.pbxproj
examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj
examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj.filters
examples/BouncingBallWavetableDemo/JuceLibraryCode/AppConfig.h
examples/ComponentTutorialExample/Builds/MacOSX/ComponentTutorialExample.xcodeproj/project.pbxproj
examples/ComponentTutorialExample/Builds/VisualStudio2010/ComponentTutorialExample.vcxproj
examples/ComponentTutorialExample/Builds/VisualStudio2010/ComponentTutorialExample.vcxproj.filters
examples/ComponentTutorialExample/Builds/VisualStudio2012/ComponentTutorialExample.vcxproj
examples/ComponentTutorialExample/Builds/VisualStudio2012/ComponentTutorialExample.vcxproj.filters
examples/ComponentTutorialExample/ComponentTutorialExample.jucer
examples/ComponentTutorialExample/JuceLibraryCode/AppConfig.h
examples/Demo/Builds/Android/jni/Android.mk
examples/Demo/Builds/Linux/Makefile
examples/Demo/Builds/MacOSX/JuceDemo.xcodeproj/project.pbxproj
examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj
examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj.filters
examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj
examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj.filters
examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj
examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj.filters
examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj
examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj.filters
examples/Demo/Builds/iOS/JuceDemo.xcodeproj/project.pbxproj
examples/Demo/JuceDemo.jucer
examples/Demo/JuceLibraryCode/AppConfig.h
examples/Demo/Source/Demos/AudioSynthesiserDemo.cpp
examples/Demo/Source/Demos/CodeEditorDemo.cpp
examples/Demo/Source/Demos/FlexBoxDemo.cpp [new file with mode: 0644]
examples/Demo/Source/Demos/FontsDemo.cpp
examples/Demo/Source/Demos/GraphicsDemo.cpp
examples/Demo/Source/Demos/MDIDemo.cpp
examples/Demo/Source/Demos/OpenGLDemo.cpp
examples/Demo/Source/Demos/OpenGLDemo2D.cpp
examples/Demo/Source/Demos/SystemInfoDemo.cpp
examples/Demo/Source/Demos/VideoDemo.cpp
examples/Demo/Source/Demos/WavefrontObjParser.h
examples/Demo/Source/Demos/WidgetsDemo.cpp
examples/Demo/Source/Demos/XMLandJSONDemo.cpp
examples/Demo/Source/MainWindow.cpp
examples/HelloWorld/Builds/Linux/Makefile
examples/HelloWorld/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj
examples/HelloWorld/Builds/VisualStudio2010/HelloWorld.vcxproj
examples/HelloWorld/Builds/VisualStudio2010/HelloWorld.vcxproj.filters
examples/HelloWorld/Builds/VisualStudio2015/HelloWorld.vcxproj
examples/HelloWorld/Builds/VisualStudio2015/HelloWorld.vcxproj.filters
examples/HelloWorld/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj
examples/HelloWorld/HelloWorld.jucer
examples/HelloWorld/JuceLibraryCode/AppConfig.h
examples/MPETest/Builds/LinuxMakefile/Makefile
examples/MPETest/Builds/MacOSX/MPETest.xcodeproj/project.pbxproj
examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj
examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj.filters
examples/MPETest/JuceLibraryCode/AppConfig.h
examples/MPETest/MPETest.jucer
examples/MPETest/Source/MPESetupComponent.h
examples/MPETest/Source/MainComponent.h
examples/MidiTest/Builds/LinuxMakefile/Makefile
examples/MidiTest/Builds/MacOSX/MidiTest.xcodeproj/project.pbxproj
examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj
examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj.filters
examples/MidiTest/Builds/iOS/MidiTest.xcodeproj/project.pbxproj
examples/MidiTest/JuceLibraryCode/AppConfig.h
examples/MidiTest/MidiTest.jucer
examples/MidiTest/Source/MainComponent.cpp
examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
examples/NetworkGraphicsDemo/Builds/MacOSX/JUCE Network Graphics Demo.xcodeproj/project.pbxproj
examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj
examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj.filters
examples/NetworkGraphicsDemo/Builds/iOS/JUCE Network Graphics Demo.xcodeproj/project.pbxproj
examples/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h
examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer
examples/OSCMonitor/Builds/LinuxMakefile/Makefile
examples/OSCMonitor/Builds/MacOSX/OSCMonitor.xcodeproj/project.pbxproj
examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj
examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj.filters
examples/OSCMonitor/JuceLibraryCode/AppConfig.h
examples/OSCMonitor/OSCMonitor.jucer
examples/OSCReceiver/Builds/LinuxMakefile/Makefile
examples/OSCReceiver/Builds/MacOSX/OSCReceiver.xcodeproj/project.pbxproj
examples/OSCReceiver/Builds/VisualStudio2015/OSCReceiver.vcxproj
examples/OSCReceiver/Builds/VisualStudio2015/OSCReceiver.vcxproj.filters
examples/OSCReceiver/Builds/iOS/OSCReceiver.xcodeproj/project.pbxproj
examples/OSCReceiver/JuceLibraryCode/AppConfig.h
examples/OSCReceiver/OSCReceiver.jucer
examples/OSCSender/Builds/LinuxMakefile/Makefile
examples/OSCSender/Builds/MacOSX/OSCSender.xcodeproj/project.pbxproj
examples/OSCSender/Builds/VisualStudio2015/OSCSender.vcxproj
examples/OSCSender/Builds/VisualStudio2015/OSCSender.vcxproj.filters
examples/OSCSender/Builds/iOS/OSCSender.xcodeproj/project.pbxproj
examples/OSCSender/JuceLibraryCode/AppConfig.h
examples/OSCSender/OSCSender.jucer
examples/OpenGLAppExample/Builds/MacOSX/OpenGLAppExample.xcodeproj/project.pbxproj
examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj
examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj.filters
examples/OpenGLAppExample/Builds/iOS/OpenGLAppExample.xcodeproj/project.pbxproj
examples/OpenGLAppExample/JuceLibraryCode/AppConfig.h
examples/OpenGLAppExample/OpenGLAppExample.jucer
examples/OpenGLAppExample/Source/Resources/WavefrontObjParser.h
examples/PluckedStringsDemo/Builds/MacOSX/PluckedStringsDemo.xcodeproj/project.pbxproj
examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj
examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj.filters
examples/PluckedStringsDemo/JuceLibraryCode/AppConfig.h
examples/PluckedStringsDemo/PluckedStringsDemo.jucer
examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer
examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj
examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj
examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters
examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj
examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj
examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters
examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer
examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/GenericEditor.h
examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj
examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj
examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters
examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer
examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj
examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj
examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters
examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/NoiseGate/NoiseGate.jucer
examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile
examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj
examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj
examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters
examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/Surround/Source/SurroundEditor.h
examples/PlugInSamples/Surround/Source/SurroundProcessor.cpp
examples/PlugInSamples/Surround/Surround.jucer
examples/SimpleFFTExample/Builds/MacOSX/SimpleFFTExample.xcodeproj/project.pbxproj
examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj
examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj.filters
examples/SimpleFFTExample/JuceLibraryCode/AppConfig.h
examples/SimpleFFTExample/SimpleFFTExample.jucer
examples/audio plugin demo/Builds/Linux/Makefile
examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj
examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters
examples/audio plugin demo/JuceDemoPlugin.jucer
examples/audio plugin demo/JuceLibraryCode/AppConfig.h
examples/audio plugin demo/Source/PluginEditor.cpp
examples/audio plugin demo/Source/PluginProcessor.h
examples/audio plugin host/Builds/Linux/Makefile
examples/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj
examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj
examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj.filters
examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj
examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj.filters
examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj
examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj.filters
examples/audio plugin host/JuceLibraryCode/AppConfig.h
examples/audio plugin host/Plugin Host.jucer
examples/audio plugin host/Source/FilterGraph.cpp
examples/audio plugin host/Source/GraphEditorPanel.cpp
examples/audio plugin host/Source/GraphEditorPanel.h
examples/audio plugin host/Source/HostStartup.cpp
examples/audio plugin host/Source/MainHostWindow.cpp
examples/audio plugin host/Source/MainHostWindow.h
extras/AudioPerformanceTest/AudioPerformanceTest.jucer
extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj
extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj.filters
extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h
extras/Projucer/Builds/LinuxMakefile/Makefile
extras/Projucer/Builds/MacOSX/Info-App.plist
extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj
extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj.filters
extras/Projucer/Builds/VisualStudio2013/resources.rc
extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj
extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj.filters
extras/Projucer/Builds/VisualStudio2015/resources.rc
extras/Projucer/JuceLibraryCode/AppConfig.h
extras/Projucer/JuceLibraryCode/JuceHeader.h
extras/Projucer/Projucer.jucer
extras/Projucer/Source/Application/jucer_AppearanceSettings.cpp
extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
extras/Projucer/Source/Application/jucer_AutoUpdater.h
extras/Projucer/Source/Application/jucer_GlobalPreferences.cpp
extras/Projucer/Source/Application/jucer_GlobalPreferences.h
extras/Projucer/Source/Application/jucer_MainWindow.cpp
extras/Projucer/Source/Application/jucer_OpenDocumentManager.cpp
extras/Projucer/Source/Application/jucer_OpenDocumentManager.h
extras/Projucer/Source/Code Editor/jucer_SourceCodeEditor.cpp
extras/Projucer/Source/Code Editor/jucer_SourceCodeEditor.h
extras/Projucer/Source/ComponentEditor/components/jucer_ComboBoxHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp
extras/Projucer/Source/ComponentEditor/components/jucer_GenericComponentHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_GroupComponentHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_ImageButtonHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_LabelHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_TabbedComponentHandler.h
extras/Projucer/Source/ComponentEditor/components/jucer_ViewportHandler.h
extras/Projucer/Source/ComponentEditor/documents/jucer_ButtonDocument.cpp
extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.cpp
extras/Projucer/Source/ComponentEditor/jucer_ComponentLayout.cpp
extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp
extras/Projucer/Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp
extras/Projucer/Source/ComponentEditor/paintelements/jucer_FillType.h
extras/Projucer/Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h
extras/Projucer/Source/ComponentEditor/paintelements/jucer_PaintElementImage.h
extras/Projucer/Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp
extras/Projucer/Source/ComponentEditor/properties/jucer_FilePropertyComponent.h
extras/Projucer/Source/ComponentEditor/properties/jucer_FontPropertyComponent.h
extras/Projucer/Source/ComponentEditor/properties/jucer_PositionPropertyBase.h
extras/Projucer/Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp
extras/Projucer/Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp
extras/Projucer/Source/LiveBuildEngine/projucer_ClassDatabase.h
extras/Projucer/Source/LiveBuildEngine/projucer_CompileEngineClient.cpp
extras/Projucer/Source/LiveBuildEngine/projucer_CompileEngineServer.cpp
extras/Projucer/Source/LiveBuildEngine/projucer_ComponentListComp.h
extras/Projucer/Source/LiveBuildEngine/projucer_CppHelpers.h
extras/Projucer/Source/LiveBuildEngine/projucer_ErrorListComponent.h
extras/Projucer/Source/LiveBuildEngine/projucer_SourceCodeRange.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_AndroidStudio.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h
extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp
extras/Projucer/Source/Project Saving/jucer_ProjectExporter.h
extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h
extras/Projucer/Source/Project Saving/jucer_TextWithDefaultPropertyComponent.h
extras/Projucer/Source/Project/jucer_DependencyPathPropertyComponent.cpp
extras/Projucer/Source/Project/jucer_DependencyPathPropertyComponent.h
extras/Projucer/Source/Project/jucer_Module.cpp
extras/Projucer/Source/Project/jucer_Module.h
extras/Projucer/Source/Project/jucer_Project.cpp
extras/Projucer/Source/Project/jucer_Project.h
extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp
extras/Projucer/Source/Project/jucer_ProjectContentComponent.h
extras/Projucer/Source/Project/jucer_ProjectTree_Base.h
extras/Projucer/Source/Utility/jucer_DialogLookAndFeel.h
extras/Projucer/Source/Utility/jucer_FilePathPropertyComponent.h
extras/Projucer/Source/Utility/jucer_PresetIDs.h
extras/Projucer/Source/Utility/jucer_SVGPathDataComponent.h
extras/Projucer/Source/Utility/jucer_StoredSettings.cpp
extras/Projucer/Source/Utility/jucer_TranslationTool.h
extras/Projucer/Source/Utility/jucer_UTF8Component.h
extras/Projucer/Source/Wizards/jucer_NewFileWizard.cpp
extras/Projucer/Source/Wizards/jucer_NewProjectWizard.h
extras/Projucer/Source/Wizards/jucer_NewProjectWizardComponent.h
extras/Projucer/Source/Wizards/jucer_TemplateThumbnailsComponent.h
extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj
extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj.filters
extras/UnitTestRunner/JuceLibraryCode/AppConfig.h
extras/UnitTestRunner/UnitTestRunner.jucer
extras/binarybuilder/BinaryBuilder.jucer
extras/binarybuilder/Builds/Linux/Makefile
extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
extras/binarybuilder/JuceLibraryCode/AppConfig.h
extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj
extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj.filters
extras/windows dll/JuceLibraryCode/AppConfig.h
extras/windows dll/jucedll.jucer
modules/JUCE Module Format.txt
modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h
modules/juce_audio_basics/juce_audio_basics.h
modules/juce_audio_basics/midi/juce_MidiFile.cpp
modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp
modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h
modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp
modules/juce_audio_basics/synthesisers/juce_Synthesiser.h
modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h
modules/juce_audio_devices/juce_audio_devices.cpp
modules/juce_audio_devices/juce_audio_devices.h
modules/juce_audio_devices/native/juce_ios_Audio.cpp
modules/juce_audio_devices/native/juce_linux_Midi.cpp
modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm
modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp
modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp
modules/juce_audio_devices/native/juce_win32_WASAPI.cpp
modules/juce_audio_devices/sources/juce_AudioTransportSource.h
modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp
modules/juce_audio_formats/juce_audio_formats.h
modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h
modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h
modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
modules/juce_audio_plugin_client/juce_audio_plugin_client.h
modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp
modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h
modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h
modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
modules/juce_audio_processors/format_types/juce_VSTInterface.h [new file with mode: 0644]
modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h
modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h
modules/juce_audio_processors/juce_audio_processors.h
modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h
modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp
modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h
modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp
modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h
modules/juce_audio_utils/gui/juce_AudioAppComponent.h
modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp
modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h
modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h
modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp
modules/juce_audio_utils/juce_audio_utils.h
modules/juce_box2d/juce_box2d.h
modules/juce_core/containers/juce_Array.h
modules/juce_core/containers/juce_ListenerList.h
modules/juce_core/containers/juce_NamedValueSet.cpp
modules/juce_core/containers/juce_NamedValueSet.h
modules/juce_core/containers/juce_PropertySet.h
modules/juce_core/containers/juce_Variant.cpp
modules/juce_core/containers/juce_Variant.h
modules/juce_core/files/juce_File.cpp
modules/juce_core/files/juce_File.h
modules/juce_core/files/juce_MemoryMappedFile.h
modules/juce_core/files/juce_TemporaryFile.cpp
modules/juce_core/javascript/juce_JSON.cpp
modules/juce_core/javascript/juce_Javascript.cpp
modules/juce_core/juce_core.h
modules/juce_core/maths/juce_BigInteger.cpp
modules/juce_core/maths/juce_BigInteger.h
modules/juce_core/maths/juce_MathsFunctions.h
modules/juce_core/maths/juce_NormalisableRange.h
modules/juce_core/maths/juce_Range.h
modules/juce_core/memory/juce_ScopedPointer.h
modules/juce_core/memory/juce_SharedResourcePointer.h
modules/juce_core/native/juce_BasicNativeHeaders.h
modules/juce_core/native/juce_curl_Network.cpp
modules/juce_core/native/juce_mac_Files.mm
modules/juce_core/native/juce_mac_Network.mm
modules/juce_core/native/juce_posix_SharedCode.h
modules/juce_core/native/juce_win32_ComSmartPtr.h
modules/juce_core/native/juce_win32_Files.cpp
modules/juce_core/native/juce_win32_SystemStats.cpp
modules/juce_core/network/juce_URL.cpp
modules/juce_core/network/juce_URL.h
modules/juce_core/system/juce_StandardHeader.h
modules/juce_core/system/juce_SystemStats.cpp
modules/juce_core/text/juce_String.cpp
modules/juce_core/text/juce_String.h
modules/juce_core/text/juce_StringArray.cpp
modules/juce_core/text/juce_TextDiff.cpp
modules/juce_core/threads/juce_ThreadPool.h
modules/juce_core/time/juce_PerformanceCounter.h
modules/juce_core/xml/juce_XmlElement.cpp
modules/juce_core/xml/juce_XmlElement.h
modules/juce_core/zip/juce_ZipFile.h
modules/juce_cryptography/juce_cryptography.h
modules/juce_data_structures/juce_data_structures.h
modules/juce_data_structures/undomanager/juce_UndoManager.cpp
modules/juce_data_structures/undomanager/juce_UndoManager.h
modules/juce_data_structures/undomanager/juce_UndoableAction.h
modules/juce_data_structures/values/juce_CachedValue.cpp
modules/juce_data_structures/values/juce_ValueTree.cpp
modules/juce_data_structures/values/juce_ValueTree.h
modules/juce_events/juce_events.h
modules/juce_events/messages/juce_ApplicationBase.cpp
modules/juce_graphics/contexts/juce_GraphicsContext.h
modules/juce_graphics/geometry/juce_AffineTransform.cpp
modules/juce_graphics/geometry/juce_AffineTransform.h
modules/juce_graphics/geometry/juce_Line.h
modules/juce_graphics/geometry/juce_Rectangle.h
modules/juce_graphics/images/juce_Image.cpp
modules/juce_graphics/images/juce_Image.h
modules/juce_graphics/juce_graphics.h
modules/juce_gui_basics/buttons/juce_Button.cpp
modules/juce_gui_basics/buttons/juce_Button.h
modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp
modules/juce_gui_basics/buttons/juce_ImageButton.h
modules/juce_gui_basics/buttons/juce_ToggleButton.cpp
modules/juce_gui_basics/components/juce_Component.cpp
modules/juce_gui_basics/components/juce_Component.h
modules/juce_gui_basics/components/juce_Desktop.cpp
modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp
modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h
modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp
modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h
modules/juce_gui_basics/filebrowser/juce_FileChooser.h
modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp
modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h
modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp
modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h
modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp
modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp
modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h
modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp
modules/juce_gui_basics/juce_gui_basics.cpp
modules/juce_gui_basics/juce_gui_basics.h
modules/juce_gui_basics/layout/juce_FlexBox.cpp [new file with mode: 0644]
modules/juce_gui_basics/layout/juce_FlexBox.h [new file with mode: 0644]
modules/juce_gui_basics/layout/juce_FlexItem.h [new file with mode: 0644]
modules/juce_gui_basics/layout/juce_GroupComponent.h
modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp
modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h
modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h
modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp
modules/juce_gui_basics/layout/juce_Viewport.cpp
modules/juce_gui_basics/layout/juce_Viewport.h
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h
modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp
modules/juce_gui_basics/menus/juce_MenuBarModel.cpp
modules/juce_gui_basics/menus/juce_MenuBarModel.h
modules/juce_gui_basics/menus/juce_PopupMenu.cpp
modules/juce_gui_basics/menus/juce_PopupMenu.h
modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp
modules/juce_gui_basics/mouse/juce_SelectedItemSet.h
modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
modules/juce_gui_basics/native/juce_linux_Windowing.cpp
modules/juce_gui_basics/native/juce_mac_FileChooser.mm
modules/juce_gui_basics/native/juce_mac_MainMenu.mm
modules/juce_gui_basics/native/juce_mac_MouseCursor.mm
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
modules/juce_gui_basics/native/juce_win32_Windowing.cpp
modules/juce_gui_basics/properties/juce_PropertyPanel.cpp
modules/juce_gui_basics/properties/juce_PropertyPanel.h
modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp
modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h
modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp
modules/juce_gui_basics/properties/juce_TextPropertyComponent.h
modules/juce_gui_basics/widgets/juce_ComboBox.cpp
modules/juce_gui_basics/widgets/juce_ComboBox.h
modules/juce_gui_basics/widgets/juce_ImageComponent.h
modules/juce_gui_basics/widgets/juce_Label.h
modules/juce_gui_basics/widgets/juce_ListBox.cpp
modules/juce_gui_basics/widgets/juce_ListBox.h
modules/juce_gui_basics/widgets/juce_Slider.cpp
modules/juce_gui_basics/widgets/juce_Slider.h
modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp
modules/juce_gui_basics/widgets/juce_TextEditor.cpp
modules/juce_gui_basics/widgets/juce_TextEditor.h
modules/juce_gui_basics/widgets/juce_Toolbar.cpp
modules/juce_gui_basics/widgets/juce_TreeView.cpp
modules/juce_gui_basics/widgets/juce_TreeView.h
modules/juce_gui_basics/windows/juce_AlertWindow.cpp
modules/juce_gui_basics/windows/juce_CallOutBox.cpp
modules/juce_gui_basics/windows/juce_CallOutBox.h
modules/juce_gui_basics/windows/juce_DialogWindow.h
modules/juce_gui_basics/windows/juce_DocumentWindow.h
modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp
modules/juce_gui_extra/documents/juce_FileBasedDocument.h
modules/juce_gui_extra/juce_gui_extra.h
modules/juce_gui_extra/misc/juce_ColourSelector.cpp
modules/juce_gui_extra/misc/juce_ColourSelector.h
modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp
modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp
modules/juce_gui_extra/misc/juce_LiveConstantEditor.h
modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h
modules/juce_gui_extra/misc/juce_SplashScreen.cpp
modules/juce_gui_extra/misc/juce_SplashScreen.h
modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp
modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp
modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp
modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp
modules/juce_opengl/juce_opengl.h
modules/juce_opengl/native/juce_OpenGL_osx.h
modules/juce_osc/juce_osc.h
modules/juce_tracktion_marketplace/juce_tracktion_marketplace.cpp
modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h
modules/juce_tracktion_marketplace/marketplace/juce_KeyFileGeneration.h
modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockForm.cpp
modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp
modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.h
modules/juce_video/capture/juce_CameraDevice.cpp
modules/juce_video/capture/juce_CameraDevice.h
modules/juce_video/juce_video.h
modules/juce_video/native/juce_mac_CameraDevice.mm
modules/juce_video/native/juce_mac_QuickTimeMovieComponent.mm
modules/juce_video/native/juce_win32_CameraDevice.cpp
modules/juce_video/native/juce_win32_DirectShowComponent.cpp
modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp
modules/juce_video/playback/juce_QuickTimeMovieComponent.h

diff --git a/.github/ISSUE_TEMPLATE.txt b/.github/ISSUE_TEMPLATE.txt
new file mode 100644 (file)
index 0000000..5b012c7
--- /dev/null
@@ -0,0 +1,15 @@
+Please include:
+
+  1) detailed steps on how to reproduce the bug, preferably with already
+     existing JUCE code such as the demo plugin or the demo code
+  2) the expected behaviour
+  3) the operating system
+  4) the architecture (32-bit or 64-bit)
+  5) a stack trace - if the bug causes a crash
+  6) the plugin format (VST2, VST3, AU, AAX, RTAS) - if applicable
+  7) which DAW you observed the bug in - if applicable
+
+Make sure you have pulled the latest commits from the JUCE repo and re-compiled
+the Projucer before you submit your bug. If it's a major bug, which must be
+hot-fixed immediately, then we will also accept bug reports for tagged release
+versions.
index 71efd0e4f4b6751143e2fcab51f59ac3a48d9c06..06e08888555f53d930f7737b808d71ed2f779f3f 100644 (file)
@@ -4,6 +4,30 @@
 This file just lists the more notable headline features. For more detailed info\r
 about minor changes and bugfixes, please see the git log!
 
+Version 4.2.4
+  - Pre-release of live build engine on Windows
+  - Added FlexBox layout engine
+  - Removed dependency on external Steinberg SDK when building and/or hosting VST2 plug-ins
+  - Added support for MIDI network sessions in the iOS simulator
+  - Added support for symmetric skew to Slider, NormalisableRange and SliderPropertyComponent
+  - Projucer now asks the user what to do when it detects that the .jucer file was modified outside of the Projucer
+  - Improved support for Windows 10 touch devices
+  - Added begin/end iterator methods for ValueTree, for handy range-based-for loops over its children
+  - Added support for recent mingw-w64 compilers
+  - Added useful proportional Rectangle utility methods
+  - Significantly improved the performance of BigInteger
+  - Added support for expiring licenses to juce_tracktion_marketplace
+  - Added support for retina mouse cursors on OS X
+  - Added a new low-quality mode for the CameraDevice
+  - Added pkg-config support for Linux
+  - Projucer will now wrap your AAX plug-in in the bundle format expected Pro Tools on Windows
+  - Multiple bug-fixes for AudioUnit parameter ids
+  - Fixed a bug where AlertWindows weren’t always on top
+  - Multiple fixes for web InputStreams
+  - Various improvements to the live build engine
+  - Various minor improvements and bug fixes
+  - Various documentation improvements
+
 Version 4.2.3
   - Various VST3 improvements: resizing VST3 windows, plug-in compatibility issues
   - Use NSURLSession on newer OS X versions
index c1aa7d0c40744656255a825da768ab54829aea1d..453d9466c2d772f8d5ffb97abafc08f3bbcf44d8 100644 (file)
@@ -9,7 +9,7 @@
               pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="AUv3SynthAU"\r
               pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.4"\r
               buildStandalone="1">\r
   <MAINGROUP id="h0gx6L" name="AUv3Synth">\r
     <GROUP id="{9DC59668-E6DF-876C-EB58-DDA88D152162}" name="Source">\r
index 8dec284a66a44d066f5f599d6dbf6c317422ec03..f0b16f1e2c173f41e93157db64a20d540635d301 100644 (file)
                A452E5BB6D20DB6842646EE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                A4BE4A85CD5ACC6A78C3B8A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_1.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm"; sourceTree = "SOURCE_ROOT"; };
                A4E1FFE9E94A28D434C2E4BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
+               A512EE08FFC0B8B22E6408FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                A53855C517AD1588DBF87CA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                A56060E773F77B3CA7DC3743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcapistd.c"; sourceTree = "SOURCE_ROOT"; };
                A58103D78876730190F3BC4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
                AC36AEF9A7D94B5F50725E38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; };
                AC3D1C939D60CBB9F06E5195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; };
                ACDA8668B39A102D419BD481 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; };
-               ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-               AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; };
                AD748818ED49AF2A6BF7AF0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMath.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h"; sourceTree = "SOURCE_ROOT"; };
                ADA10B57D3CACBF7CA3E7058 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
                ADEFBF282F9FF39E37862A73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pnginfo.h"; sourceTree = "SOURCE_ROOT"; };
                AF02093447674A2DBEFB7B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; };
                AF575F9303D3AA5E410C274A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
                B0015C46815CEB6E15236944 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; };
-               B032D869039A2B845AAD274E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; };
-               B054CDFF33B17777FD1855BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; };
-               B05EC8A81DA162236663A8AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../../modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B0B4FAE3EA49CE2AE0074204 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B0E5392688FD05700AFA0569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B19103A5C4E54D5ABB50F27F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; };
                B1972B63AC71C03527E02534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B2A30D3171F293ECE50DC06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B2C885D79DF233E10656633A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; };
-               B33097C6BA7E4793E7536BBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
-               B33E3A1B455B48F251A4EFEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; };
+               B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
+               B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; };
                B3CA6447C345EE05F8B98195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
                B442A76A84E1800D10EE5954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; };
+               B46C496B84C02A7F7D49B44F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                B48471A74A3A2BDA248931F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisfile.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c"; sourceTree = "SOURCE_ROOT"; };
-               B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; };
-               B585667FC1E99FE5C1E3F799 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; };
+               B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                B58CC7A93DBB3706A60E9E76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; };
-               B5C3356C447E60F512C5E8CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B5CA4FEE0ADFDACCAF2FB017 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; };
+               B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
                B6ABAD2ACC048C4DAB31CA27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; };
-               B6B3AF7688EF55A4FC61D5D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; };
                B774AC9A00BFF63E24EA0646 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
-               B77C48286D446F5C7BD4B76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
                B77F4A6EA1005BE4683A0DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B812C4A2809BB37D45F54A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; };
-               B8133580F67C0B95E1F36D4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; };
-               B85C9F9BF94FA8926EB9ACB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; };
                B8622807DB0688A98F8C75E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lookup_data.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h"; sourceTree = "SOURCE_ROOT"; };
-               B98F443DC0CE94BC13CC3D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; };
                BAA373F740C171EB1219D9B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; };
-               BB1D6E0B0982D0590E8EC99F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
-               BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; };
-               BBB323B5DE53878F445064D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
-               BCC48160464BC0DFCAD33792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; };
-               BD283419247CBA6C6DD2ADD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; };
-               BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; };
+               BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; };
                C12C3BDF0D24260675D88C04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; };
                E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
                F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; };
                8C9C38D32DB4D8BD543CA892 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
                A6610B06B712DDE6F2A27290 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Flac Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/flac/Flac Licence.txt"; sourceTree = "SOURCE_ROOT"; };
                AC3356631ED2AC043BC67B79 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+               ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
                AD228AE61929A94FFBE55CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomicStack.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h"; sourceTree = "SOURCE_ROOT"; };
+               AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; };
                AE9CA003C4D379CB43E9CDE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAException.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h"; sourceTree = "SOURCE_ROOT"; };
+               B032D869039A2B845AAD274E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; };
+               B054CDFF33B17777FD1855BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; };
+               B05EC8A81DA162236663A8AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../../modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
                B0A987158C4CF4E8D0D75243 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/format.h"; sourceTree = "SOURCE_ROOT"; };
-               B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
-               B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; };
+               B0B4FAE3EA49CE2AE0074204 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B0E5392688FD05700AFA0569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B19103A5C4E54D5ABB50F27F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; };
+               B2A30D3171F293ECE50DC06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B2C885D79DF233E10656633A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; };
+               B33097C6BA7E4793E7536BBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
+               B33E3A1B455B48F251A4EFEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
                B3425236EBB43087A2C4AA71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
                B389D5350378076E0DF5DA6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = export.h; path = "../../../../modules/juce_audio_formats/codecs/flac/export.h"; sourceTree = "SOURCE_ROOT"; };
-               B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-               B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
+               B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; };
+               B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; };
+               B585667FC1E99FE5C1E3F799 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; };
+               B5C3356C447E60F512C5E8CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B5CA4FEE0ADFDACCAF2FB017 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; };
+               B6B3AF7688EF55A4FC61D5D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; };
                B6EA3B412C6E73478C4D36AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B77C48286D446F5C7BD4B76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
                B79F6D7A104EF67978CFFC4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h"; sourceTree = "SOURCE_ROOT"; };
                B801E3F5A1C2992F592A0FBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; };
+               B812C4A2809BB37D45F54A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; };
+               B8133580F67C0B95E1F36D4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; };
+               B85C9F9BF94FA8926EB9ACB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; };
                B986157ED5B0414CDF696C62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAHostTimeBase.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h"; sourceTree = "SOURCE_ROOT"; };
+               B98F443DC0CE94BC13CC3D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; };
                BABAE6EE994D5EBDC4013AAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               BB1D6E0B0982D0590E8EC99F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
                BB525259297D31B45CC624C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; };
-               BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; };
+               BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; };
+               BBB323B5DE53878F445064D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
                BC2068C5203B2AA39EAE0C6A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; };
+               BCC48160464BC0DFCAD33792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; };
+               BD283419247CBA6C6DD2ADD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; };
                BD58CC09BA9FED0E9CACC97B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WindowsMediaAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                BD95E66B6A4CDADCF0631707 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp"; sourceTree = "SOURCE_ROOT"; };
                BDDC593699182D1603163238 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; };
+               BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; };
                BED2521A9CE66A6F1A5AE7F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngpread.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngpread.c"; sourceTree = "SOURCE_ROOT"; };
                BED2D02D5F333084E058D678 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                BF6BA28F41BA2A03D9325E0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = md5.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h"; sourceTree = "SOURCE_ROOT"; };
                C478ECA66D2FDB2303FDC140 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NotificationType.h"; path = "../../../../modules/juce_events/messages/juce_NotificationType.h"; sourceTree = "SOURCE_ROOT"; };
                C4BBB0A36D8C8E7D180247DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; };
                C4FED4C2640C8615AB415884 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
+               C5075702583930AA69562983 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                C50B7EF31D44D3B5E03CB4A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; };
                C5A11A2A1F932F48A0D23E91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterBool.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"; sourceTree = "SOURCE_ROOT"; };
                C5A2FC7A4569F1C242016136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.c"; sourceTree = "SOURCE_ROOT"; };
                C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; };
                C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; };
                CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
+               CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
                CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; };
+               CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
                D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; };
                EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
                9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; };
                C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; };
                C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; };
                C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
-               CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
                CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; };
                CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; };
                CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
                CF7ECFB4AA9A00E103525840 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; };
                CF9EEC4A087AA9010D5D21A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
                CFADD611F5F0D9EC5127C6C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; };
-               CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
+               CFAF04B0DF40F2C81026ACD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                CFFC609186B1EE226ACEBD2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
                D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; };
                D0584D8F725E0D7E61F830F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; };
                                        5F6BB197FA13DEB1F2260CC0,
                                        387D55482BBDCBC351F2BECE,
                                        B774AC9A00BFF63E24EA0646,
+                                       CFAF04B0DF40F2C81026ACD2,
                                        87FC5378F4B65DBD11E62015,
                                        E0FD3183237BAB53F14A4B92,
                                        58461A95ADF95E35EE92161D, ); name = "format_types"; sourceTree = "<group>"; };
                                        F77C93B319FB7E23D69C8371,
                                        F7B8C6AA3AEF025B6BFE5678,
                                        3CCBF30007C57491CF649D39,
+                                       B46C496B84C02A7F7D49B44F,
+                                       A512EE08FFC0B8B22E6408FC,
+                                       C5075702583930AA69562983,
                                        0B842061D62F68F42428E33A,
                                        E7E45873BE802DD8D676E9CD,
                                        F511F1E8F0B3F64C850321F2,
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_AppExtension.plist;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_AppExtension.plist;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_Standalone.plist;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_Standalone.plist;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 0e9b73e892397dc46ac265a10cf33104f6524596..3b250019a1639e3c6e2ebadfb14e7c059e621798 100644 (file)
@@ -6,7 +6,6 @@
        objectVersion = 46;
        objects = {
 
-               55B4C2F046533A9C139516FF = {isa = PBXBuildFile; fileRef = F5E81FD99EFCB226D2486603; };
                EE8DCBA5DC0EE7CAD6FF2F39 = {isa = PBXBuildFile; fileRef = 746B19364297E7D489749B70; };
                3F1630B6EF37313AADD6EAB8 = {isa = PBXBuildFile; fileRef = EC3DE1F504C76EEDDA7F2216; };
                77FA445D27C21FBA66A46BF2 = {isa = PBXBuildFile; fileRef = 9536B5A780A03F6BACB24144; };
@@ -32,7 +31,6 @@
                0E0B50F4A042E48B9631A42A = {isa = PBXBuildFile; fileRef = CF02DA80A8A515CE41B0C8F6; };
                72733104CA9C62BE856879C9 = {isa = PBXBuildFile; fileRef = 63AFF514CAE6FB89A3503CEF; };
                A00624D77FD68669DD6234D0 = {isa = PBXBuildFile; fileRef = A8315F08B794D9C87328F17F; };
-               E94BB952CDD544FA3A0A4DBB = {isa = PBXBuildFile; fileRef = 853D9A89FE96C6DD6730CEC7; };
                8EBD1E279B7E4B420F310D12 = {isa = PBXBuildFile; fileRef = D9ED0926381D40DA1A66C26D; };
                045E9D3412FD38BFE3071254 = {isa = PBXBuildFile; fileRef = 9965CB9ED8D2B26CACA9C44A; };
                4066B5EF83133035C3579D0D = {isa = PBXBuildFile; fileRef = 58E254BD072595F6E3F6D5F5; };
                6C5C4F38A006227C77FCBAD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
                6CE2AFEAEE4AE23D2E17E2D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../../../modules/juce_graphics/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; };
                6D61505DE8021C51E8C5AE52 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c"; sourceTree = "SOURCE_ROOT"; };
-               6DA4597568FFE5B6D1F5B68A = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST.plist"; path = "Info-VST.plist"; sourceTree = "SOURCE_ROOT"; };
                6DED13EB49FCE393E16D59FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; };
                6DF4FA55C69B25537DCD88C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; };
                6DFDBE298AD93DD1B3F067B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; };
                738FC67C7D9A53148C0A21AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                73BB8E247A275838FD16AFE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mapping0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c"; sourceTree = "SOURCE_ROOT"; };
                745B58030382C3D0DB6E7815 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; };
+               746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; };
                75034A13541D4052025A4B39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jutils.c"; sourceTree = "SOURCE_ROOT"; };
                750DF21E43BED98CE4F53DE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; };
                76272B6E0F4FB6D7225653CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                7BAB8DD68B7A25B281233969 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; };
                7C3E7364953EF9D78C71B866 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
                7CA84F62BB5AC492B1EB49A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; };
+               7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
                7CE0FEFCEC64DF0ADA0B2DF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
                7D0417B22EF55BE16E7C5061 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; };
                7D1E28BE09A85EEBA041558C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; };
                84ABD4F5D068289F4D43E7CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; };
                84D3302B18B67B725905AF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LAMEEncoderAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                8524CF106D2B7B1E08D312C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioAppComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.h"; sourceTree = "SOURCE_ROOT"; };
-               853D9A89FE96C6DD6730CEC7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; };
                854757FAD81F978667CAA43C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; };
                8553867F8B04D10919C2BD4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = smallft.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c"; sourceTree = "SOURCE_ROOT"; };
                856618203AAE94C7B806F9EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; };
                86AC66980898843AE721BD08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; };
                86E1396EB5DB7C3F8D42AF19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; };
                87181526B9C99144CBE4F8A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; };
+               872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
                87415D844832686C8423F226 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; };
                874FADD694BB58E2E736FC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                876D30F6E9647DB0F9BE4463 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h"; sourceTree = "SOURCE_ROOT"; };
                89CC639E5B1CDE71BDBC02D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
                89E00773FE73394C30642A4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; };
                8A3F809F240408D5195FB0F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; };
+               8AA012F95CDEE0ECAC1D698E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; };
                8ACD82D09483797E1A7A65B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; };
                8AEA9D5BBBC4CB214F18FCE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; };
                8AED766CFA1A37B45BC2DE98 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; };
                8D030B4C002B429D9A9CF05A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = metadata.h; path = "../../../../modules/juce_audio_formats/codecs/flac/metadata.h"; sourceTree = "SOURCE_ROOT"; };
                8D4AF11BC6D0F698838984C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputElement.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                8D6D7548957FA154DA777E17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
+               8D753ADD4B2F1CB0C974A522 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; };
+               8DCEAA37D9F7AAD98A244B49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; };
                8E1318FA20D468AD45C7A20F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; };
                8E29909B5886662F2EC3F5CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                8E61D5E0D6068F247E70219C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; };
                8F3941CB0EBB70B37B7DB6DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; };
                8F3C3474E9EB852A40B3A25B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; };
                8F3FC2A8E965AA4E83259DB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; };
+               8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; };
                8FC88FE9250C7A25AC724BEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; };
+               8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; };
+               90064DDC086AD775FA7D5FFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
+               9015FC74644F82DB0A49FBFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; };
                903B9CD04DF181894AC76EF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; };
                90C18AF3CAC0E59C88732904 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; };
                90D3112151AC631747E60670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Base64.h"; path = "../../../../modules/juce_core/text/juce_Base64.h"; sourceTree = "SOURCE_ROOT"; };
                9136CCE147582160FA805637 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_16.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h"; sourceTree = "SOURCE_ROOT"; };
                9146F18918C954121E932A8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-               92529B06E070A28F0C3C4914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; };
-               933DE5C4D4002BA9203F65A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
-               9376596E6EC0707DFEE00ADB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
-               94304B55601DBF7FBCFC6767 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; };
-               94BFEB9B92F3D546332FD8E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = alloc.h; path = "../../../../modules/juce_audio_formats/codecs/flac/alloc.h"; sourceTree = "SOURCE_ROOT"; };
-               95D4FB306A367AE3A6D28173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
-               96DCCD578FF29CD7D381E8BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; };
-               96F6E7AE69A06FEE69CCA3C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; };
-               9A392FBECB732FAC0AA04262 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; };
-               9FB1AAC5EC1146B5FC0EFCD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; };
-               A148CC41BDB41EDC8E88DC7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; };
-               A15E68C337279B15ED933BE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; };
-               E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
-               F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; };
-               746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; };
-               7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
-               872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
-               8AA012F95CDEE0ECAC1D698E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; };
-               8D753ADD4B2F1CB0C974A522 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; };
-               8DCEAA37D9F7AAD98A244B49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; };
-               8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; };
-               8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; };
-               90064DDC086AD775FA7D5FFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
-               9015FC74644F82DB0A49FBFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; };
                9198593E2E34D16752B90CD1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; };
                91D10BF1909D2B9C169E4493 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; };
                91F32F326BD577CD67AE20D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h"; sourceTree = "SOURCE_ROOT"; };
+               92529B06E070A28F0C3C4914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; };
                92723EFA7826236908D48AC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp"; sourceTree = "SOURCE_ROOT"; };
                92BFAF31B51618764234C779 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; };
                9312B68ACDD2A4EAA31CAA73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                9329788543F0C6DA2B50BD72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; };
+               933DE5C4D4002BA9203F65A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
+               9376596E6EC0707DFEE00ADB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
                938B5112D072B60A18918CF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdcoefct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdcoefct.c"; sourceTree = "SOURCE_ROOT"; };
+               94304B55601DBF7FBCFC6767 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; };
                94308E0D87CFF0D58DAAA0D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "os_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/os_types.h"; sourceTree = "SOURCE_ROOT"; };
                947776740572A5A07C2500EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; };
+               94BFEB9B92F3D546332FD8E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = alloc.h; path = "../../../../modules/juce_audio_formats/codecs/flac/alloc.h"; sourceTree = "SOURCE_ROOT"; };
                94EA45AA948C996F231D6946 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                955635CD2D6A1C5BACA519CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                95931BF9B518FB17845AF4A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = smallft.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h"; sourceTree = "SOURCE_ROOT"; };
+               95D4FB306A367AE3A6D28173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
                96102E98CC639030FAD7EA68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                968EC4E33A1D1949AA4A9F87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; };
                96DA31F4C1619188159F7FC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; };
+               96DCCD578FF29CD7D381E8BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; };
+               96F6E7AE69A06FEE69CCA3C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; };
                9767C9015F48F6F42AEC0C9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAutoDisposer.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h"; sourceTree = "SOURCE_ROOT"; };
                97C74E9A0E8A5576FC301241 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; };
                97DDC460BD01030B91158218 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; };
                997766E6B5491A51A5242F68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; };
                99AC2D0C2304F21B912FEC5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; };
                9A3351689C885961A9BD3F2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; };
+               9A392FBECB732FAC0AA04262 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; };
                9A419F28D68BDEB200F29603 = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AUv3Synth/Images.xcassets; sourceTree = "SOURCE_ROOT"; };
                9A69DDED5C8357717BAD57DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; };
                9AA36A7E6CCDA68D308E0721 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; };
                9F1DFEFDC78EC139C4089DEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RuntimePermissions.cpp"; path = "../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp"; sourceTree = "SOURCE_ROOT"; };
                9F91E161DF777F050B61B6BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                9FA43271ACEB06BF3AB00095 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = envelope.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h"; sourceTree = "SOURCE_ROOT"; };
+               9FB1AAC5EC1146B5FC0EFCD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; };
                A0173759895A8C13BB754998 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; };
                A032CFC5A613848D8594B40B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h"; sourceTree = "SOURCE_ROOT"; };
                A1159B10837BBDD1BD12A882 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CachedValue.cpp"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.cpp"; sourceTree = "SOURCE_ROOT"; };
                A11CF361C0253B499324D31E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                A12A4C86AE4FA12C99334932 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               A148CC41BDB41EDC8E88DC7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1595E748092878FDAEA5A30 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; };
+               A15E68C337279B15ED933BE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1CFD76549B8E9EB1C360ED5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1FA95A0AA37CD773ACBCE8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; };
                A2129507609CE7130FBA1340 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; };
                A452E5BB6D20DB6842646EE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                A4BE4A85CD5ACC6A78C3B8A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_1.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm"; sourceTree = "SOURCE_ROOT"; };
                A4E1FFE9E94A28D434C2E4BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
+               A512EE08FFC0B8B22E6408FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                A53855C517AD1588DBF87CA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                A56060E773F77B3CA7DC3743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcapistd.c"; sourceTree = "SOURCE_ROOT"; };
                A58103D78876730190F3BC4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
                B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; };
                B3CA6447C345EE05F8B98195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
                B442A76A84E1800D10EE5954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; };
+               B46C496B84C02A7F7D49B44F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                B48471A74A3A2BDA248931F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisfile.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c"; sourceTree = "SOURCE_ROOT"; };
                B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; };
                B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                C14EFFF60594E0BC2421DC0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                C1983ED4284CBEF3B5A427E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                C1D83773976CEDB413DB5E5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = envelope.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c"; sourceTree = "SOURCE_ROOT"; };
-               C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; };
                C1EFF2064480889DAC74D2D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; };
                C25203A01A84B7032A7774CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; };
                C2DF4936EF95E5A32E71B755 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
                C3FF9B9008D2A03F2BB23F1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../../modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; };
                C478ECA66D2FDB2303FDC140 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NotificationType.h"; path = "../../../../modules/juce_events/messages/juce_NotificationType.h"; sourceTree = "SOURCE_ROOT"; };
                C4BBB0A36D8C8E7D180247DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; };
+               C5075702583930AA69562983 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                C50B7EF31D44D3B5E03CB4A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; };
                C5A11A2A1F932F48A0D23E91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterBool.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"; sourceTree = "SOURCE_ROOT"; };
                C5A2FC7A4569F1C242016136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.c"; sourceTree = "SOURCE_ROOT"; };
                C5B2DDCFB6FEA46E4F97BBA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; };
                C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; };
-               C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; };
-               C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
                C639338DD5AF077DF5BF8361 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
                C68283C8A9FA7CEC6AA6975C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; };
                C6846316837E7D4578428945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; };
                C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; };
                C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; };
                CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
-               CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
-               CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; };
                CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; };
                CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-               CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; };
                CD3ABE20AE524B92B9B6A6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; };
                CD41042388657A558C93AD86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; };
                CD44BCDC60998F9B56D816C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; };
-               CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
-               CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; };
-               CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; };
                CF02DA80A8A515CE41B0C8F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_Standalone.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_Standalone.cpp"; sourceTree = "SOURCE_ROOT"; };
                CF2F576CE0F6A185597C8D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; };
                CF344C62ABCBA9BAAB6ACFA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                CF51659EBB00003E6CB20B66 = {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"; };
+               D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; };
+               D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
+               D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; };
+               D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; };
+               DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+               EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
+               9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; };
+               C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; };
+               C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; };
+               C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
+               CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
+               CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; };
+               CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; };
+               CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; };
+               CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; };
                CF6FA9D2F39F03FE2858F11B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                CF7ECFB4AA9A00E103525840 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; };
                CF9EEC4A087AA9010D5D21A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
                CFADD611F5F0D9EC5127C6C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; };
+               CFAF04B0DF40F2C81026ACD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
                CFFC609186B1EE226ACEBD2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-               D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; };
                D0584D8F725E0D7E61F830F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; };
-               D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; };
-               D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
                D0ECDC7390CA390D69946652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcsample.c"; sourceTree = "SOURCE_ROOT"; };
-               D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; };
                D19E20CCCD4790B2347D5B80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                D2436FFFE291F08409B1EEE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; };
                D264387115074C98CF251072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; };
                D48932C6554B443ECB71DC87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; };
                D4A4555171F923D744B1FDF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngstruct.h"; sourceTree = "SOURCE_ROOT"; };
                D4C0852C1C54EDA5D4F82EB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; };
-               D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; };
                D557AAD12557BF1706441B19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                D5797410CEE0E8D2E03D98F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; };
                D57DF4F024A84881420586E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trees.h; path = "../../../../modules/juce_core/zip/zlib/trees.h"; sourceTree = "SOURCE_ROOT"; };
                DA4E0EA3EB80BE34F9047E72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; };
                DACA6E5A3CE684EC649F31B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; };
                DAEE812EF95F96E7D65D875F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; };
-               DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
                DB216D8107F0BBBBD3F2B0E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
                DB3A7C49C8444BD2F57B6689 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; };
                DB43ED26DBABD0BC17385E6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; };
                DFF6A93D460B71379FE3EAA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; };
                E0260479B3C2CAF8477026FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; };
                E03AA585A375A39A9BFF3DD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; };
+               E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
                E0484E5F0994D64013F4EEA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
                E09404F45899AA1E82CFC21C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                E0B49BAB1C8D7341A6E142B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdct.h"; sourceTree = "SOURCE_ROOT"; };
                E31219AD074DCBB8C6A9F816 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
                E320A8161071D0D1B9261E2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; };
                E32E43F0CC33ED95FD0A9DE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsMediaAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
+               E40580FB3605FA6D5DA3FD73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h"; sourceTree = "SOURCE_ROOT"; };
                E433734FC5466D7E26FC11D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; };
                E4CB12FDCA729EC8BD9E0845 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; };
                E4D985BB229FC31731681790 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                E755606E63BE2C5558FFB353 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; };
                E795FC063102CA8BAB722C58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                E79A4F024D4890B61628C42C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; };
-               E93BF1F2B52BF52EA12326A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; };
-               EA6D44AA3D1C9B0A5873DC4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; };
-               EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
-               9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; };
-               E40580FB3605FA6D5DA3FD73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h"; sourceTree = "SOURCE_ROOT"; };
                E7E45873BE802DD8D676E9CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; };
                E88DF76B88F3E67D0FB58CEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = floor0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c"; sourceTree = "SOURCE_ROOT"; };
                E8EB40396974468FBD0EE15B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; };
+               E93BF1F2B52BF52EA12326A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; };
                E9617DEC7E639354C2AF66A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; };
                E9745B8F0DE747F94EAF65A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; };
                E975A1A60F48EB781C00B9CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; };
                E9C1C03509E00C37AAA45727 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                EA4345362FE80828317BB860 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Base64.cpp"; path = "../../../../modules/juce_core/text/juce_Base64.cpp"; sourceTree = "SOURCE_ROOT"; };
+               EA6D44AA3D1C9B0A5873DC4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; };
                EA89A423564A332B875F040F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = misc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h"; sourceTree = "SOURCE_ROOT"; };
                EA8B1437F945AFED7BDF11DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsHooks.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_WindowsHooks.h"; sourceTree = "SOURCE_ROOT"; };
                EA92EA0E7F4D3859821CEB4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h"; sourceTree = "SOURCE_ROOT"; };
                                        5F6BB197FA13DEB1F2260CC0,
                                        387D55482BBDCBC351F2BECE,
                                        B774AC9A00BFF63E24EA0646,
+                                       CFAF04B0DF40F2C81026ACD2,
                                        87FC5378F4B65DBD11E62015,
                                        E0FD3183237BAB53F14A4B92,
                                        58461A95ADF95E35EE92161D, ); name = "format_types"; sourceTree = "<group>"; };
                                        F77C93B319FB7E23D69C8371,
                                        F7B8C6AA3AEF025B6BFE5678,
                                        3CCBF30007C57491CF649D39,
+                                       B46C496B84C02A7F7D49B44F,
+                                       A512EE08FFC0B8B22E6408FC,
+                                       C5075702583930AA69562983,
                                        0B842061D62F68F42428E33A,
                                        E7E45873BE802DD8D676E9CD,
                                        F511F1E8F0B3F64C850321F2,
                                        CF02DA80A8A515CE41B0C8F6,
                                        63AFF514CAE6FB89A3503CEF,
                                        A8315F08B794D9C87328F17F,
-                                       853D9A89FE96C6DD6730CEC7,
                                        D9ED0926381D40DA1A66C26D,
                                        9965CB9ED8D2B26CACA9C44A,
                                        58E254BD072595F6E3F6D5F5,
                                        E553E188A17BDF4E832F0A01,
                                        F138CA63A1127DA0DB69B127, ); name = "Juce Library Code"; sourceTree = "<group>"; };
                A727F6B063FCDB816462D213 = {isa = PBXGroup; children = (
-                                       6DA4597568FFE5B6D1F5B68A,
                                        F3498E82A2D4ACBED68A7F43,
                                        6AFB9EB642850186B551DB33,
                                        9A419F28D68BDEB200F29603,
                                        29982493607128FD6DB6A284,
                                        5EF6762AB1C5CE4C2DCD59ED, ); name = Frameworks; sourceTree = "<group>"; };
                E793574695108F202603BAA5 = {isa = PBXGroup; children = (
-                                       F5E81FD99EFCB226D2486603,
                                        746B19364297E7D489749B70,
                                        EC3DE1F504C76EEDDA7F2216,
                                        9536B5A780A03F6BACB24144, ); name = Products; sourceTree = "<group>"; };
                                        E793574695108F202603BAA5, ); name = Source; sourceTree = "<group>"; };
                7007C784A0219490DFD18C27 = {isa = XCBuildConfiguration; buildSettings = {  }; name = Debug; };
                0ADE306E346FE4F925722F86 = {isa = XCBuildConfiguration; buildSettings = {  }; name = Release; };
-               653C6C73C56BA201AB6F094C = {isa = XCBuildConfiguration; buildSettings = {
-                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-                               ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
-                               CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-                               CLANG_LINK_OBJC_RUNTIME = NO;
-                               CODE_SIGN_IDENTITY = "";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
-                               COPY_PHASE_STRIP = NO;
-                               DEPLOYMENT_LOCATION = YES;
-                               DSTROOT = /;
-                               GCC_DYNAMIC_NO_PIC = NO;
-                               GCC_OPTIMIZATION_LEVEL = 0;
-                               GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "_DEBUG=1",
-                                       "DEBUG=1",
-                                       "JucePlugin_Build_VST=1",
-                                       "JucePlugin_Build_VST3=0",
-                                       "JucePlugin_Build_AU=0",
-                                       "JucePlugin_Build_AUv3=0",
-                                       "JucePlugin_Build_RTAS=0",
-                                       "JucePlugin_Build_AAX=0",
-                                       "JucePlugin_Build_Standalone=0",
-                                       "JUCER_XCODE_IPHONE_5BC26AE3=1",
-                                       "JUCE_APP_VERSION=1.0.0",
-                                       "JUCE_APP_VERSION_HEX=0x10000", );
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               GENERATE_PKGINFO_FILE = YES;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
-                               INFOPLIST_FILE = Info-VST.plist;
-                               INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
-                               LIBRARY_STYLE = Bundle;
-                               OTHER_LDFLAGS = "-bundle -lAUv3Synth";
-                               PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
-                               WRAPPER_EXTENSION = vst; }; name = Debug; };
-               19D80348287645B624E0C6B8 = {isa = XCBuildConfiguration; buildSettings = {
-                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-                               ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
-                               CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-                               CLANG_LINK_OBJC_RUNTIME = NO;
-                               CODE_SIGN_IDENTITY = "";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
-                               DEAD_CODE_STRIPPING = YES;
-                               DEPLOYMENT_LOCATION = YES;
-                               DSTROOT = /;
-                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-                               GCC_OPTIMIZATION_LEVEL = 3;
-                               GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "_NDEBUG=1",
-                                       "NDEBUG=1",
-                                       "JucePlugin_Build_VST=1",
-                                       "JucePlugin_Build_VST3=0",
-                                       "JucePlugin_Build_AU=0",
-                                       "JucePlugin_Build_AUv3=0",
-                                       "JucePlugin_Build_RTAS=0",
-                                       "JucePlugin_Build_AAX=0",
-                                       "JucePlugin_Build_Standalone=0",
-                                       "JUCER_XCODE_IPHONE_5BC26AE3=1",
-                                       "JUCE_APP_VERSION=1.0.0",
-                                       "JUCE_APP_VERSION_HEX=0x10000", );
-                               GCC_SYMBOLS_PRIVATE_EXTERN = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               GENERATE_PKGINFO_FILE = YES;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
-                               INFOPLIST_FILE = Info-VST.plist;
-                               INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
-                               LIBRARY_STYLE = Bundle;
-                               OTHER_LDFLAGS = "-bundle -lAUv3Synth";
-                               PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth;
-                               WRAPPER_EXTENSION = vst; }; name = Release; };
                DC95EAEBECC74A55CADCD887 = {isa = XCBuildConfiguration; buildSettings = {
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                                ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
                                        "JUCE_APP_VERSION=1.0.0",
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_AppExtension.plist;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3; }; name = Debug; };
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_SYMBOLS_PRIVATE_EXTERN = YES;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_AppExtension.plist;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3; }; name = Release; };
                                        "JUCE_APP_VERSION=1.0.0",
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_Standalone.plist;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Debug; };
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_SYMBOLS_PRIVATE_EXTERN = YES;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-AUv3_Standalone.plist;
                                OTHER_LDFLAGS = "-lAUv3Synth";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Release; };
                                        "_DEBUG=1",
                                        "DEBUG=1",
                                        "JUCE_SHARED_CODE=1",
-                                       "JucePlugin_Build_VST=1",
+                                       "JucePlugin_Build_VST=0",
                                        "JucePlugin_Build_VST3=0",
                                        "JucePlugin_Build_AU=0",
                                        "JucePlugin_Build_AUv3=1",
                                        "JUCE_APP_VERSION=1.0.0",
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/Frameworks";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Debug; };
                5DA389BE0C844A1A9E20FD7C = {isa = XCBuildConfiguration; buildSettings = {
                                        "_NDEBUG=1",
                                        "NDEBUG=1",
                                        "JUCE_SHARED_CODE=1",
-                                       "JucePlugin_Build_VST=1",
+                                       "JucePlugin_Build_VST=0",
                                        "JucePlugin_Build_VST3=0",
                                        "JucePlugin_Build_AU=0",
                                        "JucePlugin_Build_AUv3=1",
                                        "JUCE_APP_VERSION_HEX=0x10000", );
                                GCC_SYMBOLS_PRIVATE_EXTERN = YES;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-                               HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
+                               HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/Frameworks";
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Release; };
                D32671708EF2662A51A6335A = {isa = XCBuildConfiguration; buildSettings = {
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "AUv3Synth";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "AUv3Synth";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                WARNING_CFLAGS = -Wreorder;
                                ZERO_LINK = NO; }; name = Release; };
-               811D9E9CC2221100847306C9 = {isa = PBXTargetDependency; target = 73F4C13CDCAC7EE5914F2E61; };
                8F5816EA1D519B78C3345C1B = {isa = PBXTargetDependency; target = 7A046597FDDDB82B78C64AAC; };
                E06C8C12CD5FDD7FB372E602 = {isa = PBXTargetDependency; target = E600EF631F7AFA8F3A723E29; };
                017B214D817BF0DF53051BB2 = {isa = PBXTargetDependency; target = CD6892FED0DB19C0DDD9AD37; };
                                        7007C784A0219490DFD18C27,
                                        0ADE306E346FE4F925722F86, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
                EF49DCC88B5FC3C6E67ED2A4 = {isa = PBXAggregateTarget; buildConfigurationList = F550A01E8A9468C64A914B97; buildPhases = (  ); buildRules = ( ); dependencies = (
-                                       811D9E9CC2221100847306C9,
                                        8F5816EA1D519B78C3345C1B,
                                        E06C8C12CD5FDD7FB372E602,
                                        017B214D817BF0DF53051BB2, ); name = "AUv3Synth (All)"; productName = AUv3Synth; };
-               32113A068DE980F098C3A7FA = {isa = XCConfigurationList; buildConfigurations = (
-                                       653C6C73C56BA201AB6F094C,
-                                       19D80348287645B624E0C6B8, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
-               2094EE2ED994CDD1B1C905BB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = (
-                                       6F585AC4628EC14C9F757022,
-                                       78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; };
-               074C299F37078964C5476AC0 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = (
-                                       E94BB952CDD544FA3A0A4DBB, ); runOnlyForDeploymentPostprocessing = 0; };
-               88CA07DBC6CAFF5FF3E65E3E = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = (
-                                       FAD4DF17110D52B8ED8D9F93,
-                                       737E06660F37BFFCABD89643,
-                                       D53302896621B8A3E8BDD606,
-                                       669F51FA55E939D010EA279D,
-                                       EDC8ABA2EC0A2D7A2147E896,
-                                       7DEC97493F97160DE6622DBC,
-                                       1DF18B2507A574FBA9C49DE1,
-                                       71F62F07CBC67FB4FB010583,
-                                       6B818B8342839FB008124DEA,
-                                       F452B8399A32BE4F1074F596,
-                                       E4236DCEE707C3855C2E3B22, ); runOnlyForDeploymentPostprocessing = 0; };
-               73F4C13CDCAC7EE5914F2E61 = {isa = PBXNativeTarget; buildConfigurationList = 32113A068DE980F098C3A7FA; buildPhases = (
-                                       2094EE2ED994CDD1B1C905BB,
-                                       074C299F37078964C5476AC0,
-                                       88CA07DBC6CAFF5FF3E65E3E, ); buildRules = ( ); dependencies = (
-                                       017B214D817BF0DF53051BB2, ); name = "AUv3Synth (VST)"; productName = AUv3Synth; productReference = F5E81FD99EFCB226D2486603; productType = "com.apple.product-type.bundle"; };
                3A7896DB2C11717D9046CE5B = {isa = XCConfigurationList; buildConfigurations = (
                                        DC95EAEBECC74A55CADCD887,
                                        5FAC649347835B831BAE3C41, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
                                        4D9D92DD454BB03746241196, ); runOnlyForDeploymentPostprocessing = 0; };
                CD6892FED0DB19C0DDD9AD37 = {isa = PBXNativeTarget; buildConfigurationList = AF907C78A0D17B741F5F8944; buildPhases = (
                                        1F4A8812AAE49E02F3215F48, ); buildRules = ( ); dependencies = (  ); name = "AUv3Synth (Shared Code)"; productName = AUv3Synth; productReference = 9536B5A780A03F6BACB24144; productType = "com.apple.product-type.library.static"; };
-               D0E003364F0BE3205BD9243E = {isa = PBXProject; buildConfigurationList = 444EA74CE26BF416566E542C; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { EF49DCC88B5FC3C6E67ED2A4 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };73F4C13CDCAC7EE5914F2E61 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };7A046597FDDDB82B78C64AAC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 1; }; }; };E600EF631F7AFA8F3A723E29 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };CD6892FED0DB19C0DDD9AD37 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 4BFA153CE4E8A774C67EC642; projectDirPath = ""; projectRoot = ""; targets = (EF49DCC88B5FC3C6E67ED2A4, 73F4C13CDCAC7EE5914F2E61, 7A046597FDDDB82B78C64AAC, E600EF631F7AFA8F3A723E29, CD6892FED0DB19C0DDD9AD37); };
+               D0E003364F0BE3205BD9243E = {isa = PBXProject; buildConfigurationList = 444EA74CE26BF416566E542C; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { EF49DCC88B5FC3C6E67ED2A4 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };7A046597FDDDB82B78C64AAC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 1; }; }; };E600EF631F7AFA8F3A723E29 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };CD6892FED0DB19C0DDD9AD37 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 4BFA153CE4E8A774C67EC642; projectDirPath = ""; projectRoot = ""; targets = (EF49DCC88B5FC3C6E67ED2A4, 7A046597FDDDB82B78C64AAC, E600EF631F7AFA8F3A723E29, CD6892FED0DB19C0DDD9AD37); };
        };
        rootObject = D0E003364F0BE3205BD9243E;
 }
index 303210b658fdf275f873e047f6a74b17b7762446..554b0416ee03c48a11071bf7528829eaa62ac810 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index c28861d38951f2c5100d75e95647abddcffe6884..b5377d739a411c8621e81484ad068245ac5a61a2 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="LrATE6" name="AnimationAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.AnimationAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="F3keCY" name="AnimationAppExample">\r
     <GROUP id="{5E4132EA-C4A0-CBDE-BEDA-FD6772DA79D5}" name="Source">\r
       <FILE id="n1FmZc" name="MainComponent.cpp" compile="1" resource="0"\r
index 4992d84f88315974c87d1502b3bcd35ce44190b8..c75513f69b6d63dcda2708e108d42fbf0521a11b 100644 (file)
                2254F8D031DD15BDB278DE3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; };
                22C4F82B505995F81CD682B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; };
                22F62D0B5A88067C39036648 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; };
+               231ACACE9E864E20DA50E3BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                2328C66A446079EDDCC8B14E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LiveConstantEditor.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
                234D4927B398ED6E9B7B0E6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; };
                236A887259131B8CF3BFAA4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.c"; sourceTree = "SOURCE_ROOT"; };
                63EE49826BF4CFBD9D546DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; };
                6421EA349C5D558114D36717 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; };
                64807B3EFFBDC3348512901E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
+               659AE4B65FC0E64C2AB91AB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                65DF385E92A4A65760DC3BD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; };
                66897EA1FD2CDFB4CED47F8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; };
                66B37CB373F19F65553466C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; };
                A3F10D6226F279E9195F2CB2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; };
                A415044DB2E87AAB1BB9BEF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; };
                A42A97232CE0593D8D989FC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
+               A4DF895426B87D58C9446FAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                A4F394FB62E70E3A3A02E4C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
                A50AF1519D78428A8DCD91BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
                A52B29340D8E551C2F6FBC43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; };
                D64B71F992FF01CB0EE89641 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; };
                D6D37626671B0FB1CE8505C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; };
                D6ECAF8B2A4E8B6C97B89FFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
+               D71A9A6C9DF92980ADD5DF79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                D74DEEE99CFE7B2FFD474A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; };
                D763221FDA235D75039D4C46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                D77B700B6C68C6055C26376E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jmemsys.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jmemsys.h"; sourceTree = "SOURCE_ROOT"; };
                                        2B02634F8DA8660ED42B0AEF,
                                        F79ADEBA7B305354085FFB8D,
                                        66E854431C2BBDEE56EA43C8,
+                                       D71A9A6C9DF92980ADD5DF79,
                                        0F67C59CB48583941B8656EF,
                                        BB144FF841A99B08D5479777,
                                        E652F16998FA1CBF2068C6FC, ); name = "format_types"; sourceTree = "<group>"; };
                                        7F171BE6BFAA1E3E2A9BED61,
                                        C8F82FBA1E0EF7EEA5BD02B9,
                                        BCFE159BD9F2DA5515E028A4,
+                                       231ACACE9E864E20DA50E3BB,
+                                       659AE4B65FC0E64C2AB91AB1,
+                                       A4DF895426B87D58C9446FAB,
                                        4C40BFAE1E25F166EBB5EC48,
                                        25E6B62A5BF19A0D1E085E10,
                                        684E11B1CE018B2C46938D80,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.AnimationAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.AnimationAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 72e8a6ed0d9ea48e25aee8a8b06e2007fd1bb564..c7fe12f8cafd32fec7c3cabe396bf8ecc7627330 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 353e89ca70d3de4ae86c83a640b48da2a434b0d9..de3feda3540d74b1faae7ef8d8eb27cb0244b429 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 5b7f42ef8fa9bdb32b97d7379e1d35275b4047c3..17a6fcaf152a3edb50e35b90993689c464bccf9c 100644 (file)
                2254F8D031DD15BDB278DE3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; };
                22C4F82B505995F81CD682B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; };
                22F62D0B5A88067C39036648 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; };
+               231ACACE9E864E20DA50E3BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                2328C66A446079EDDCC8B14E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LiveConstantEditor.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
                234D4927B398ED6E9B7B0E6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../../modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; };
                236A887259131B8CF3BFAA4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.c"; sourceTree = "SOURCE_ROOT"; };
                63EE49826BF4CFBD9D546DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; };
                6421EA349C5D558114D36717 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; };
                64807B3EFFBDC3348512901E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
+               659AE4B65FC0E64C2AB91AB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                65DF385E92A4A65760DC3BD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; };
                66897EA1FD2CDFB4CED47F8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; };
                66B37CB373F19F65553466C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; };
                A3F10D6226F279E9195F2CB2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; };
                A415044DB2E87AAB1BB9BEF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; };
                A42A97232CE0593D8D989FC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
+               A4DF895426B87D58C9446FAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                A4F394FB62E70E3A3A02E4C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
                A50AF1519D78428A8DCD91BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioUnitPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
                A52B29340D8E551C2F6FBC43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; };
                D64B71F992FF01CB0EE89641 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; };
                D6D37626671B0FB1CE8505C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; };
                D6ECAF8B2A4E8B6C97B89FFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
+               D71A9A6C9DF92980ADD5DF79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                D74DEEE99CFE7B2FFD474A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; };
                D763221FDA235D75039D4C46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                D77B700B6C68C6055C26376E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jmemsys.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jmemsys.h"; sourceTree = "SOURCE_ROOT"; };
                                        2B02634F8DA8660ED42B0AEF,
                                        F79ADEBA7B305354085FFB8D,
                                        66E854431C2BBDEE56EA43C8,
+                                       D71A9A6C9DF92980ADD5DF79,
                                        0F67C59CB48583941B8656EF,
                                        BB144FF841A99B08D5479777,
                                        E652F16998FA1CBF2068C6FC, ); name = "format_types"; sourceTree = "<group>"; };
                                        7F171BE6BFAA1E3E2A9BED61,
                                        C8F82FBA1E0EF7EEA5BD02B9,
                                        BCFE159BD9F2DA5515E028A4,
+                                       231ACACE9E864E20DA50E3BB,
+                                       659AE4B65FC0E64C2AB91AB1,
+                                       A4DF895426B87D58C9446FAB,
                                        4C40BFAE1E25F166EBB5EC48,
                                        25E6B62A5BF19A0D1E085E10,
                                        684E11B1CE018B2C46938D80,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "AnimationAppExample";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "AnimationAppExample";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index 7702cb649ffc5f4a2f6cf116e09f22550e70048f..e5b209a02ca61962097a9424bb2653c74937bd8b 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 56b5de6b691f1ac424958553bed09b383ca7da2f..7e723373a0a6d65b4926175fedad51b263be30ae 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="PAnJXP" name="AudioAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.AudioAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="GaJIge" name="AudioAppExample">\r
     <GROUP id="{168FC5D4-FA65-8320-F83E-C14C416638E1}" name="Source">\r
       <FILE id="aHvhJ2" name="MainComponent.cpp" compile="1" resource="0"\r
index b2f627e324dd6211b70ccde65a87ddbcd592e0b9..a3cbddf34c0688328bcbc0e14cde692a6cd37d26 100644 (file)
                0F7E54460D000A212BA37807 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; };
                0FB03F29666B9E3588BCA21A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; };
                0FEA2018033238F713A9933D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; };
+               0FF93A75818FDCB138CEB446 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                1062CD8BD738A5F58CC3F64D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../JuceLibraryCode/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; };
                10CCA4154B34E2601DF7E36C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; };
                10D6995E32D2195B83AB6625 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ordinals.h; path = "../../../../modules/juce_audio_formats/codecs/flac/ordinals.h"; sourceTree = "SOURCE_ROOT"; };
                88AA420D1FEF4EB95D8166FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
                88F756FE30BD5DEA47C1725D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; };
                89163E9DB0626DF42D686130 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
+               8929A0522417804FA7FBDA07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                8930689A13E07781BE58FA24 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; };
                898B5EF2CF5B2303DE59B07A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
                89C90F8B0901C465E356C6C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                CF6E0A89DA49E7D810CF49A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapistd.c"; sourceTree = "SOURCE_ROOT"; };
                CF6F99867E4ECCD2A2ED0B0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Base64.cpp"; path = "../../../../modules/juce_core/text/juce_Base64.cpp"; sourceTree = "SOURCE_ROOT"; };
                CF746C34F8DB1B073F1A4FA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               CFAF960433F3BAD659D67305 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                D000979AF77A84718877BD31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; };
                D045327CC8A3E0C370070496 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                D058B5E13E7E22FC4ED27B5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTreeSynchroniser.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp"; sourceTree = "SOURCE_ROOT"; };
                DE350A7B7F148EDE3EB542DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mdct.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c"; sourceTree = "SOURCE_ROOT"; };
                DE6FBEE731028F230A86F223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; };
                DE90A7AD96CDF9332CA4B1CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               DEB4C3647DCB3A2D1DDDEEF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                DF0EBC428D40282CD24D2015 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; };
                DF4992745F5A01164C573D1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameterWithID.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h"; sourceTree = "SOURCE_ROOT"; };
                DF8AC8795BBD9CC5918F5969 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                                        6C32FCD6B87189C1F43BD462,
                                        DB6C3F30A7B477AA3A695B2D,
                                        6D869E6ED7DF080A9FAF162C,
+                                       DEB4C3647DCB3A2D1DDDEEF1,
                                        6C4F8F17F78FE9C8B45941D3,
                                        DD7C6F9CAF5CBA11B6024A83,
                                        5374AB638100ED67F198E888, ); name = "format_types"; sourceTree = "<group>"; };
                                        A6E737E1560A81E5A45DD9BC,
                                        948076D06B104682079290E5,
                                        705D210EADDE876947060561,
+                                       0FF93A75818FDCB138CEB446,
+                                       8929A0522417804FA7FBDA07,
+                                       CFAF960433F3BAD659D67305,
                                        4DC09FE2D606F3346B269F47,
                                        E03B0CE2DF954597EDE01376,
                                        64E7DC1B23F237CD9F141439,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.AudioAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.AudioAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 00fe53c931b387d0ab680e5be9eceffe183b5fc7..20fdedeb31aecd32f27e9211c3eb36dabf421c32 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 798d7b22e84610e5fb85a70b5374a378421e06ba..b49d8782c9e788f21b30a5fcf3997baead7be842 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index aa568e4ba5f29e57480bf715d453ef0769d7dba5..ff638145ddba03b627ff4df55036a5b8b9fab91b 100644 (file)
                0F7E54460D000A212BA37807 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; };
                0FB03F29666B9E3588BCA21A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; };
                0FEA2018033238F713A9933D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; };
+               0FF93A75818FDCB138CEB446 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                1062CD8BD738A5F58CC3F64D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../JuceLibraryCode/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; };
                10CCA4154B34E2601DF7E36C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; };
                10D6995E32D2195B83AB6625 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ordinals.h; path = "../../../../modules/juce_audio_formats/codecs/flac/ordinals.h"; sourceTree = "SOURCE_ROOT"; };
                88AA420D1FEF4EB95D8166FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
                88F756FE30BD5DEA47C1725D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; };
                89163E9DB0626DF42D686130 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
+               8929A0522417804FA7FBDA07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                8930689A13E07781BE58FA24 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; };
                898B5EF2CF5B2303DE59B07A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
                89C90F8B0901C465E356C6C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                CF6E0A89DA49E7D810CF49A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapistd.c"; sourceTree = "SOURCE_ROOT"; };
                CF6F99867E4ECCD2A2ED0B0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Base64.cpp"; path = "../../../../modules/juce_core/text/juce_Base64.cpp"; sourceTree = "SOURCE_ROOT"; };
                CF746C34F8DB1B073F1A4FA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               CFAF960433F3BAD659D67305 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                D000979AF77A84718877BD31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; };
                D045327CC8A3E0C370070496 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                D058B5E13E7E22FC4ED27B5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTreeSynchroniser.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp"; sourceTree = "SOURCE_ROOT"; };
                DE350A7B7F148EDE3EB542DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mdct.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c"; sourceTree = "SOURCE_ROOT"; };
                DE6FBEE731028F230A86F223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; };
                DE90A7AD96CDF9332CA4B1CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               DEB4C3647DCB3A2D1DDDEEF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                DF0EBC428D40282CD24D2015 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; };
                DF4992745F5A01164C573D1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameterWithID.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h"; sourceTree = "SOURCE_ROOT"; };
                DF8AC8795BBD9CC5918F5969 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                                        6C32FCD6B87189C1F43BD462,
                                        DB6C3F30A7B477AA3A695B2D,
                                        6D869E6ED7DF080A9FAF162C,
+                                       DEB4C3647DCB3A2D1DDDEEF1,
                                        6C4F8F17F78FE9C8B45941D3,
                                        DD7C6F9CAF5CBA11B6024A83,
                                        5374AB638100ED67F198E888, ); name = "format_types"; sourceTree = "<group>"; };
                                        A6E737E1560A81E5A45DD9BC,
                                        948076D06B104682079290E5,
                                        705D210EADDE876947060561,
+                                       0FF93A75818FDCB138CEB446,
+                                       8929A0522417804FA7FBDA07,
+                                       CFAF960433F3BAD659D67305,
                                        4DC09FE2D606F3346B269F47,
                                        E03B0CE2DF954597EDE01376,
                                        64E7DC1B23F237CD9F141439,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "AudioAppExample";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "AudioAppExample";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index c32dfe4b1bf6ddcd4818d1bb8bc484252c541566..58382029a96db9e56fa24ebd9019e16aa16a278a 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 920c8435edefe405b43055eecf997a1e379b48ed..54c1fbfa2ba6ec6277eaaa735ab6077c940c3588 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="fyUrFS" name="BouncingBallWavetableDemo" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.BouncingBallWavetableDemo"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.4">\r
   <MAINGROUP id="MgjqDB" name="BouncingBallWavetableDemo">\r
     <GROUP id="{D35F88A0-C242-1CAA-21A9-6D01F78F4128}" name="Source">\r
       <FILE id="M5GUDX" name="MainComponent.cpp" compile="1" resource="0"\r
index d0ea1f4445f4eaad9f38ebc6eb92d21a27fad910..5a4a7c51ff4c3cd46941933fbb1d501ff393dde0 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := WavetableBouncingEditor\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := WavetableBouncingEditor\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/MainComponent_a6ffb4a5.o \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking BouncingBallWavetableDemo\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning BouncingBallWavetableDemo\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping BouncingBallWavetableDemo\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MainComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 05fbf0afeb63d74ab57c0ca78b8944c22be326d2..766a83b9bed1eba35c73fad8654a0a992588b9a8 100644 (file)
                18BAB9D332D2D82B5D1B92D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; };
                18C3F29BDA22ABA91C0A3941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserBase.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h"; sourceTree = "SOURCE_ROOT"; };
                190658AD9646E057B7580A2E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; };
+               194648E04CC4B30A9E4FFFAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                19703DEDD564FBE9B631A5E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; };
                198B99DB8626E20F46FFDEA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; };
                198CF6CF4F89D4581214D2C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_utils.h"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.h"; sourceTree = "SOURCE_ROOT"; };
                4994A4DDCA255CE5CC96BE85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_11.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h"; sourceTree = "SOURCE_ROOT"; };
                49D0126A6EDA00279B784EB4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; };
                4A310AACD6A634DF5E9EB991 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; };
+               4A4295D6898765B22FED690E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                4A710F2F7A5F24CCEEFD202F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; };
                4AAB1224C8A731A6994D74CE = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WavetableBouncingEditor.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
                4B09A2E2E9F9550B7FCC5FAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioVisualiserComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h"; sourceTree = "SOURCE_ROOT"; };
                56461DE91A3E0D528F854707 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; };
                56B03FD7B52504D3B1929907 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; };
                56B0CFDCC3922B395292E892 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               576DA902DC355B135944F652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                579BC84225D2FB307131F0DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; };
                57B39EABC6E4CF0B9942D379 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
                57E0AAF3F3AD2D086CCC1083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_BluetoothMidiDevicePairingDialogue.mm"; path = "../../../../modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm"; sourceTree = "SOURCE_ROOT"; };
                9DA02B1D7924511E16841B4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "../../../../modules/juce_core/zip/zlib/uncompr.c"; sourceTree = "SOURCE_ROOT"; };
                9DCBCC54540E38F4383E2FB7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
                9DEE6DEB6F0333175EACF2B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; };
+               9DFD34E9526B4AF313FAD3B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                9E2630C8E13FF54922CE148D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; };
                9EEBF7D23F2D1821FD8B1FF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                9F41B18DB0A2FF5EF084AED6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = "../../../../modules/juce_core/zip/zlib/inflate.c"; sourceTree = "SOURCE_ROOT"; };
                                        1A7D831E49C2BA0CC0CA5128,
                                        DBC0E281A2E05DE8E668CBB4,
                                        5E312C939C9B9E5E37639A79,
+                                       576DA902DC355B135944F652,
                                        23AC41EA2ECCA1BED10D7E07,
                                        8427B4F238DA7953130272B2,
                                        ED576238B8B1D81ED56B99A5, ); name = "format_types"; sourceTree = "<group>"; };
                                        227EFECB84E4E33FD7ABE586,
                                        BF9675E73814F809F94D4865,
                                        56461DE91A3E0D528F854707,
+                                       4A4295D6898765B22FED690E,
+                                       9DFD34E9526B4AF313FAD3B7,
+                                       194648E04CC4B30A9E4FFFAA,
                                        4F136C53A5974E59BD7E8D87,
                                        8AE8FB07A821DAF2B447B211,
                                        09887E936A885C1240AE5218,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.BouncingBallWavetableDemo;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.BouncingBallWavetableDemo;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 000ce2abfa03f53aeec2ec489cf98465fb29eb2a..921d52150a0465d1f379aefe7d4febb46c4aa613 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 7ab11ab1b3ceb96ab71cf79d4c3afdc1c7d24418..eb7bb381ee3658f8b537a76f593207e890a2102d 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 4c9d7608e04ea91d7b95d1e2fbbe9e01da9a70a7..052b7d1c4c7c4cdf6ad378d5f603164a86de35dd 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index c90bb9a8dfb680fdf8b8bd38e5d70d08a0e14fd4..8b3356948c3a73e448d3ba4df2efe4f0098eee61 100644 (file)
                55DFA734C7AEB7AD1FA75ACB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; };
                560EF8EDA00C258C5EEE0FE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                561B5014ECB87D691306A4CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; };
+               5637BF8D4486B0BD2D41A541 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                56766C06F131481224707D00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
                578192335A99BEBF7C29D9D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; };
                57A83B990FD49529356D225B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../../modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; };
                89F1E29F501319BF488ECF28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; };
                8A84AC4483BBADF6A7A004B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                8A8C19C2ED45616FAC78EB78 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
+               8ACF65923A3E4AB8AB818CAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                8AEF70673FF810778EFC6D08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; };
                8B11018691CF485F1067F278 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedAppComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h"; sourceTree = "SOURCE_ROOT"; };
                8BB34D1B1519891162B0DBFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; };
                B6E1814BE1E753B8791962F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; };
                B731F59C6868BE055F007329 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; };
                B7FB20F3D5020CD8988242FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; };
+               B9566042D1A56EC2FE64D184 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                B95F8C80E0D44391899531B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jconfig.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jconfig.h"; sourceTree = "SOURCE_ROOT"; };
                BA06E3D4038305A8D8ECD3E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; };
                BA51067FE0DB7FA0DB2F755E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
                                        2C5516C7385DDAA74A06E64A,
                                        CE98C1D1F69BFC0E26DF6292,
                                        042A6506F7508AC4A48527E7,
+                                       5637BF8D4486B0BD2D41A541,
+                                       8ACF65923A3E4AB8AB818CAA,
+                                       B9566042D1A56EC2FE64D184,
                                        D258A8E415E9907EE72BC7D2,
                                        B05DCAAE274EB275BC75F489,
                                        F186324F05630AC2A90C7686,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.ComponentTutorialExample;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.ComponentTutorialExample;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index bcdd9f6fa0b771987fe85717ec0009a1abf7c51d..f5d2230060a64fe619b5af584420f2dce93b8518 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 5fb45b547775180d151767ccfee0b7954b00cf3c..dc19cbc3d2ecc5208aae620923b201d14c1dcf2e 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 19399fc4750bec9cacf366e863082b87d55a79fa..6659ca5b9a41108091e0ee5a53cee68c329062ea 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 5fb45b547775180d151767ccfee0b7954b00cf3c..dc19cbc3d2ecc5208aae620923b201d14c1dcf2e 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 4b9b576a2ee619be92ccc86d1b163dd2ffe979c8..829038f0e2830359f80a32cc027c1f74a14e1ba8 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="oNvA5C" name="ComponentTutorialExample" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.yourcompany.ComponentTutorialExample"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.4">\r
   <MAINGROUP id="WydTVz" name="ComponentTutorialExample">\r
     <GROUP id="{F2C8112A-EE4B-7AF1-A0A9-16152D1EF1A7}" name="Source">\r
       <FILE id="t4ngZQ" name="ToggleLightGridComponent.h" compile="0" resource="0"\r
index 83093f8975dbbe0f30a22fdcc1856f757fed410b..ea23cfeffb9d80fe6e6cab9bfb3cee6d503ff0ab 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 2acd46db7f1b71d2ffe33b4e072acb4036e8d250..be548510a38329d602bd76770e48cfa489aadf9e 100644 (file)
@@ -27,6 +27,7 @@ LOCAL_SRC_FILES := \
   ../../../Source/Demos/ComponentTransformsDemo.cpp\\r
   ../../../Source/Demos/CryptographyDemo.cpp\\r
   ../../../Source/Demos/DialogsDemo.cpp\\r
+  ../../../Source/Demos/FlexBoxDemo.cpp\\r
   ../../../Source/Demos/FontsDemo.cpp\\r
   ../../../Source/Demos/GraphicsDemo.cpp\\r
   ../../../Source/Demos/ImagesDemo.cpp\\r
index 8f73ad3b584f8725358c6a8ce68b54668d80443a..efbe171d2331da25bfa90d1b3bda1aaf80b09c24 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := JuceDemo\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := JuceDemo\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/MainWindow_499ac812.o \\r
-  $(OBJDIR)/IntroScreen_73347059.o \\r
-  $(OBJDIR)/AnimationDemo_9fc7e4e9.o \\r
-  $(OBJDIR)/AudioLatencyDemo_78d49233.o \\r
-  $(OBJDIR)/AudioPlaybackDemo_ea12adf6.o \\r
-  $(OBJDIR)/AudioRecordingDemo_435914e6.o \\r
-  $(OBJDIR)/AudioSettingsDemo_6d710bfe.o \\r
-  $(OBJDIR)/AudioSynthesiserDemo_1b3666f6.o \\r
-  $(OBJDIR)/Box2DDemo_51053c42.o \\r
-  $(OBJDIR)/CameraDemo_a10f7e50.o \\r
-  $(OBJDIR)/ChildProcessDemo_2c2b949e.o \\r
-  $(OBJDIR)/CodeEditorDemo_d5c17a65.o \\r
-  $(OBJDIR)/ComponentTransformsDemo_377f7889.o \\r
-  $(OBJDIR)/CryptographyDemo_232d46d7.o \\r
-  $(OBJDIR)/DialogsDemo_19d585d0.o \\r
-  $(OBJDIR)/FontsDemo_6da1e5e9.o \\r
-  $(OBJDIR)/GraphicsDemo_85142ef6.o \\r
-  $(OBJDIR)/ImagesDemo_ecf13aa3.o \\r
-  $(OBJDIR)/JavaScript_d6e42eb5.o \\r
-  $(OBJDIR)/KeyMappingsDemo_cf05c709.o \\r
-  $(OBJDIR)/LiveConstantDemo_e3b18a9b.o \\r
-  $(OBJDIR)/LookAndFeelDemo_25c558a3.o \\r
-  $(OBJDIR)/MDIDemo_c476c2d7.o \\r
-  $(OBJDIR)/MidiDemo_75ebc30c.o \\r
-  $(OBJDIR)/MultithreadingDemo_ff566eaa.o \\r
-  $(OBJDIR)/MultiTouch_595f3a2e.o \\r
-  $(OBJDIR)/NetworkingDemo_fbd1b19f.o \\r
-  $(OBJDIR)/OpenGLDemo_fdac55da.o \\r
-  $(OBJDIR)/OpenGLDemo2D_48eeadec.o \\r
-  $(OBJDIR)/PropertiesDemo_8ff1a8de.o \\r
-  $(OBJDIR)/SystemInfoDemo_984acd28.o \\r
-  $(OBJDIR)/TimersAndEventsDemo_f2656547.o \\r
-  $(OBJDIR)/UnitTestsDemo_5c21762.o \\r
-  $(OBJDIR)/ValueTreesDemo_9657d84f.o \\r
-  $(OBJDIR)/VideoDemo_b55a1560.o \\r
-  $(OBJDIR)/WebBrowserDemo_3df2dbdf.o \\r
-  $(OBJDIR)/WidgetsDemo_fb0454.o \\r
-  $(OBJDIR)/WindowsDemo_e8cfa428.o \\r
-  $(OBJDIR)/XMLandJSONDemo_5bc88df3.o \\r
-  $(OBJDIR)/BinaryData_ce4232d4.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_box2d_95719d14.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/MainWindow_499ac812.o \\r
+  $(JUCE_OBJDIR)/IntroScreen_73347059.o \\r
+  $(JUCE_OBJDIR)/AnimationDemo_9fc7e4e9.o \\r
+  $(JUCE_OBJDIR)/AudioLatencyDemo_78d49233.o \\r
+  $(JUCE_OBJDIR)/AudioPlaybackDemo_ea12adf6.o \\r
+  $(JUCE_OBJDIR)/AudioRecordingDemo_435914e6.o \\r
+  $(JUCE_OBJDIR)/AudioSettingsDemo_6d710bfe.o \\r
+  $(JUCE_OBJDIR)/AudioSynthesiserDemo_1b3666f6.o \\r
+  $(JUCE_OBJDIR)/Box2DDemo_51053c42.o \\r
+  $(JUCE_OBJDIR)/CameraDemo_a10f7e50.o \\r
+  $(JUCE_OBJDIR)/ChildProcessDemo_2c2b949e.o \\r
+  $(JUCE_OBJDIR)/CodeEditorDemo_d5c17a65.o \\r
+  $(JUCE_OBJDIR)/ComponentTransformsDemo_377f7889.o \\r
+  $(JUCE_OBJDIR)/CryptographyDemo_232d46d7.o \\r
+  $(JUCE_OBJDIR)/DialogsDemo_19d585d0.o \\r
+  $(JUCE_OBJDIR)/FlexBoxDemo_e4f3d9b7.o \\r
+  $(JUCE_OBJDIR)/FontsDemo_6da1e5e9.o \\r
+  $(JUCE_OBJDIR)/GraphicsDemo_85142ef6.o \\r
+  $(JUCE_OBJDIR)/ImagesDemo_ecf13aa3.o \\r
+  $(JUCE_OBJDIR)/JavaScript_d6e42eb5.o \\r
+  $(JUCE_OBJDIR)/KeyMappingsDemo_cf05c709.o \\r
+  $(JUCE_OBJDIR)/LiveConstantDemo_e3b18a9b.o \\r
+  $(JUCE_OBJDIR)/LookAndFeelDemo_25c558a3.o \\r
+  $(JUCE_OBJDIR)/MDIDemo_c476c2d7.o \\r
+  $(JUCE_OBJDIR)/MidiDemo_75ebc30c.o \\r
+  $(JUCE_OBJDIR)/MultithreadingDemo_ff566eaa.o \\r
+  $(JUCE_OBJDIR)/MultiTouch_595f3a2e.o \\r
+  $(JUCE_OBJDIR)/NetworkingDemo_fbd1b19f.o \\r
+  $(JUCE_OBJDIR)/OpenGLDemo_fdac55da.o \\r
+  $(JUCE_OBJDIR)/OpenGLDemo2D_48eeadec.o \\r
+  $(JUCE_OBJDIR)/PropertiesDemo_8ff1a8de.o \\r
+  $(JUCE_OBJDIR)/SystemInfoDemo_984acd28.o \\r
+  $(JUCE_OBJDIR)/TimersAndEventsDemo_f2656547.o \\r
+  $(JUCE_OBJDIR)/UnitTestsDemo_5c21762.o \\r
+  $(JUCE_OBJDIR)/ValueTreesDemo_9657d84f.o \\r
+  $(JUCE_OBJDIR)/VideoDemo_b55a1560.o \\r
+  $(JUCE_OBJDIR)/WebBrowserDemo_3df2dbdf.o \\r
+  $(JUCE_OBJDIR)/WidgetsDemo_fb0454.o \\r
+  $(JUCE_OBJDIR)/WindowsDemo_e8cfa428.o \\r
+  $(JUCE_OBJDIR)/XMLandJSONDemo_5bc88df3.o \\r
+  $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_box2d_95719d14.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking JuceDemo\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning JuceDemo\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping JuceDemo\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MainWindow_499ac812.o: ../../Source/MainWindow.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MainWindow_499ac812.o: ../../Source/MainWindow.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MainWindow.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/IntroScreen_73347059.o: ../../Source/IntroScreen.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/IntroScreen_73347059.o: ../../Source/IntroScreen.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling IntroScreen.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AnimationDemo_9fc7e4e9.o: ../../Source/Demos/AnimationDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AnimationDemo_9fc7e4e9.o: ../../Source/Demos/AnimationDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AnimationDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AudioLatencyDemo_78d49233.o: ../../Source/Demos/AudioLatencyDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AudioLatencyDemo_78d49233.o: ../../Source/Demos/AudioLatencyDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AudioLatencyDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AudioPlaybackDemo_ea12adf6.o: ../../Source/Demos/AudioPlaybackDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AudioPlaybackDemo_ea12adf6.o: ../../Source/Demos/AudioPlaybackDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AudioPlaybackDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AudioRecordingDemo_435914e6.o: ../../Source/Demos/AudioRecordingDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AudioRecordingDemo_435914e6.o: ../../Source/Demos/AudioRecordingDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AudioRecordingDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AudioSettingsDemo_6d710bfe.o: ../../Source/Demos/AudioSettingsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AudioSettingsDemo_6d710bfe.o: ../../Source/Demos/AudioSettingsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AudioSettingsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/AudioSynthesiserDemo_1b3666f6.o: ../../Source/Demos/AudioSynthesiserDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/AudioSynthesiserDemo_1b3666f6.o: ../../Source/Demos/AudioSynthesiserDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling AudioSynthesiserDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/Box2DDemo_51053c42.o: ../../Source/Demos/Box2DDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Box2DDemo_51053c42.o: ../../Source/Demos/Box2DDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Box2DDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/CameraDemo_a10f7e50.o: ../../Source/Demos/CameraDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/CameraDemo_a10f7e50.o: ../../Source/Demos/CameraDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling CameraDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/ChildProcessDemo_2c2b949e.o: ../../Source/Demos/ChildProcessDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/ChildProcessDemo_2c2b949e.o: ../../Source/Demos/ChildProcessDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling ChildProcessDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/CodeEditorDemo_d5c17a65.o: ../../Source/Demos/CodeEditorDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/CodeEditorDemo_d5c17a65.o: ../../Source/Demos/CodeEditorDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling CodeEditorDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/ComponentTransformsDemo_377f7889.o: ../../Source/Demos/ComponentTransformsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/ComponentTransformsDemo_377f7889.o: ../../Source/Demos/ComponentTransformsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling ComponentTransformsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/CryptographyDemo_232d46d7.o: ../../Source/Demos/CryptographyDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/CryptographyDemo_232d46d7.o: ../../Source/Demos/CryptographyDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling CryptographyDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/DialogsDemo_19d585d0.o: ../../Source/Demos/DialogsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/DialogsDemo_19d585d0.o: ../../Source/Demos/DialogsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling DialogsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
+\r
+$(JUCE_OBJDIR)/FlexBoxDemo_e4f3d9b7.o: ../../Source/Demos/FlexBoxDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
+       @echo "Compiling FlexBoxDemo.cpp"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/FontsDemo_6da1e5e9.o: ../../Source/Demos/FontsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/FontsDemo_6da1e5e9.o: ../../Source/Demos/FontsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling FontsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/GraphicsDemo_85142ef6.o: ../../Source/Demos/GraphicsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/GraphicsDemo_85142ef6.o: ../../Source/Demos/GraphicsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling GraphicsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/ImagesDemo_ecf13aa3.o: ../../Source/Demos/ImagesDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/ImagesDemo_ecf13aa3.o: ../../Source/Demos/ImagesDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling ImagesDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/JavaScript_d6e42eb5.o: ../../Source/Demos/JavaScript.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/JavaScript_d6e42eb5.o: ../../Source/Demos/JavaScript.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling JavaScript.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/KeyMappingsDemo_cf05c709.o: ../../Source/Demos/KeyMappingsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/KeyMappingsDemo_cf05c709.o: ../../Source/Demos/KeyMappingsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling KeyMappingsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/LiveConstantDemo_e3b18a9b.o: ../../Source/Demos/LiveConstantDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/LiveConstantDemo_e3b18a9b.o: ../../Source/Demos/LiveConstantDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling LiveConstantDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/LookAndFeelDemo_25c558a3.o: ../../Source/Demos/LookAndFeelDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/LookAndFeelDemo_25c558a3.o: ../../Source/Demos/LookAndFeelDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling LookAndFeelDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MDIDemo_c476c2d7.o: ../../Source/Demos/MDIDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MDIDemo_c476c2d7.o: ../../Source/Demos/MDIDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MDIDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MidiDemo_75ebc30c.o: ../../Source/Demos/MidiDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MidiDemo_75ebc30c.o: ../../Source/Demos/MidiDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MidiDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MultithreadingDemo_ff566eaa.o: ../../Source/Demos/MultithreadingDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MultithreadingDemo_ff566eaa.o: ../../Source/Demos/MultithreadingDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MultithreadingDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MultiTouch_595f3a2e.o: ../../Source/Demos/MultiTouch.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MultiTouch_595f3a2e.o: ../../Source/Demos/MultiTouch.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MultiTouch.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/NetworkingDemo_fbd1b19f.o: ../../Source/Demos/NetworkingDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/NetworkingDemo_fbd1b19f.o: ../../Source/Demos/NetworkingDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling NetworkingDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/OpenGLDemo_fdac55da.o: ../../Source/Demos/OpenGLDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/OpenGLDemo_fdac55da.o: ../../Source/Demos/OpenGLDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling OpenGLDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/OpenGLDemo2D_48eeadec.o: ../../Source/Demos/OpenGLDemo2D.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/OpenGLDemo2D_48eeadec.o: ../../Source/Demos/OpenGLDemo2D.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling OpenGLDemo2D.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling PropertiesDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/SystemInfoDemo_984acd28.o: ../../Source/Demos/SystemInfoDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/SystemInfoDemo_984acd28.o: ../../Source/Demos/SystemInfoDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling SystemInfoDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/TimersAndEventsDemo_f2656547.o: ../../Source/Demos/TimersAndEventsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/TimersAndEventsDemo_f2656547.o: ../../Source/Demos/TimersAndEventsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling TimersAndEventsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/UnitTestsDemo_5c21762.o: ../../Source/Demos/UnitTestsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/UnitTestsDemo_5c21762.o: ../../Source/Demos/UnitTestsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling UnitTestsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/ValueTreesDemo_9657d84f.o: ../../Source/Demos/ValueTreesDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/ValueTreesDemo_9657d84f.o: ../../Source/Demos/ValueTreesDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling ValueTreesDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/VideoDemo_b55a1560.o: ../../Source/Demos/VideoDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/VideoDemo_b55a1560.o: ../../Source/Demos/VideoDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling VideoDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/WebBrowserDemo_3df2dbdf.o: ../../Source/Demos/WebBrowserDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/WebBrowserDemo_3df2dbdf.o: ../../Source/Demos/WebBrowserDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling WebBrowserDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/WidgetsDemo_fb0454.o: ../../Source/Demos/WidgetsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/WidgetsDemo_fb0454.o: ../../Source/Demos/WidgetsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling WidgetsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/WindowsDemo_e8cfa428.o: ../../Source/Demos/WindowsDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/WindowsDemo_e8cfa428.o: ../../Source/Demos/WindowsDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling WindowsDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/XMLandJSONDemo_5bc88df3.o: ../../Source/Demos/XMLandJSONDemo.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/XMLandJSONDemo_5bc88df3.o: ../../Source/Demos/XMLandJSONDemo.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling XMLandJSONDemo.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling BinaryData.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_box2d_95719d14.o: ../../JuceLibraryCode/juce_box2d.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_box2d_95719d14.o: ../../JuceLibraryCode/juce_box2d.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_box2d.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index ba9e048210fcb9e6a6f237a78b8c34e07a86db84..926af1dd53ab93e273004aeb1c9ecac3c753d9d5 100644 (file)
@@ -38,6 +38,7 @@
                587D594CCB99791F4D724DB4 = {isa = PBXBuildFile; fileRef = 64E7D43C4F4037CFC2C5E2AC; };
                40D223F10936E34918B48639 = {isa = PBXBuildFile; fileRef = 49412C044B88516D9AF59FDD; };
                F739D6D21483E3498985C7AF = {isa = PBXBuildFile; fileRef = 55D08920D4992CD0721AA3E3; };
+               2BFF2E7E13527E2E764617AA = {isa = PBXBuildFile; fileRef = 7AEEF2EE40D3B8AE687C6618; };
                E4A67DD76D4D063F547F0844 = {isa = PBXBuildFile; fileRef = 4DB00B418C4F068BC5FC7314; };
                257CBA785DEDAF53F4E9BF60 = {isa = PBXBuildFile; fileRef = 4D569839066D92C393F58EB4; };
                9C30D9613D76EEFDB1653F34 = {isa = PBXBuildFile; fileRef = 7DBF83B26277D13CB3FC1479; };
                2F1324CBA29604BD3E2003B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; };
                2F19C814598FC304CA841242 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                2F66B42AF6C0B5ED381937C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; };
+               2F78DE5144EBEAC697309BDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                2F7F13C84464F8409BBDBEB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; };
                2F8041ECBF70D78604686D6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; };
                2F8D57F15D63118E33CB0639 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                417FED446C0B953AB2DDB633 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2ContactSolver.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.cpp"; sourceTree = "SOURCE_ROOT"; };
                4198EE3311A171C884A5FA9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
                41F65957FAEED268DBFFE925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; };
+               41F76FF32798054E741CB90B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                420516E3BCE114E11526E916 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = smallft.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c"; sourceTree = "SOURCE_ROOT"; };
                4212EA9CE0B9AA4986108D9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLShaderProgram.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp"; sourceTree = "SOURCE_ROOT"; };
                42386AD366F1AD43B6B29364 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; };
                7A2009F14F7AFEEF7F233EBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitmath.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c"; sourceTree = "SOURCE_ROOT"; };
                7AD412430D3AEB0468089AF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
                7AE34C0CF7EABE461F4FE5FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Body.h; path = "../../../../modules/juce_box2d/box2d/Dynamics/b2Body.h"; sourceTree = "SOURCE_ROOT"; };
+               7AEEF2EE40D3B8AE687C6618 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FlexBoxDemo.cpp; path = ../../Source/Demos/FlexBoxDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                7AF9EF500482C84F02849647 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPENote.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.h"; sourceTree = "SOURCE_ROOT"; };
                7B5560AEA0CB3E507C16140C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                7B81083FC4CCD2D096D93162 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; };
                EE7001BD5206A8D8EA2D125B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; };
                EEA020419EF58E90C10AAE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; };
                EEAA1BB6254EDE07A7ABAD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
+               EF18C494669488BEDFC25A5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                EF8055850F3DEA173761E3B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                EFD1BD42000EE640A17EE1ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                EFDA611057B66032D2F06E53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2Joint.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.cpp"; sourceTree = "SOURCE_ROOT"; };
                FC63A33CA2E025F5C4C22CD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; };
                FCA788F92D5BB1640CD2AC35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioSettingsDemo.cpp; path = ../../Source/Demos/AudioSettingsDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                FCAC296E92A219D70EB96AD5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; };
+               FCE177D4FA4ABB9635AC9737 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                FD22F7A808D3B534354FD7E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Distance.h; path = "../../../../modules/juce_box2d/box2d/Collision/b2Distance.h"; sourceTree = "SOURCE_ROOT"; };
                FD2A08CE74C6EBC90CD44A49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; };
                FD46383E356A5DDC1AD53380 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkingDemo.cpp; path = ../../Source/Demos/NetworkingDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                                        64E7D43C4F4037CFC2C5E2AC,
                                        49412C044B88516D9AF59FDD,
                                        55D08920D4992CD0721AA3E3,
+                                       7AEEF2EE40D3B8AE687C6618,
                                        4DB00B418C4F068BC5FC7314,
                                        4D569839066D92C393F58EB4,
                                        7DBF83B26277D13CB3FC1479,
                                        9750423DB3DB6570382DA3C1,
                                        9B9E034C5761096ACB8A76C3,
                                        73267FE8DDE50FD1E6E31ED4,
+                                       41F76FF32798054E741CB90B,
                                        8AE56D2F4E33B015C3D73EB8,
                                        52A95B5754438C999343869A,
                                        C8A42EE493A1DF2E283C245E, ); name = "format_types"; sourceTree = "<group>"; };
                                        2DDE8684F3C5CB4A781D72A5,
                                        F58760A8EE18630F97C7B646,
                                        1D62103CFAB9245F2CF523EC,
+                                       EF18C494669488BEDFC25A5D,
+                                       FCE177D4FA4ABB9635AC9737,
+                                       2F78DE5144EBEAC697309BDC,
                                        1065FE461C00EABD9485BB93,
                                        2E093A5506319EC68DA184F4,
                                        53AA2F507FD9DE263E43B277,
                                        587D594CCB99791F4D724DB4,
                                        40D223F10936E34918B48639,
                                        F739D6D21483E3498985C7AF,
+                                       2BFF2E7E13527E2E764617AA,
                                        E4A67DD76D4D063F547F0844,
                                        257CBA785DEDAF53F4E9BF60,
                                        9C30D9613D76EEFDB1653F34,
index ecb6a582496b55344da1aff470a404123ba76b91..1751f27265dfba737807c251b7da830ecee06d3e 100644 (file)
     <ClCompile Include="..\..\Source\Demos\ComponentTransformsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\CryptographyDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp"/>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\GraphicsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\ImagesDemo.cpp"/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 2cfd39bab9d6a2ed9fa669fb153e0d01072632b6..fea3d46b65fb684fd8dbfbbf13428026da969490 100644 (file)
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp">\r
+      <Filter>JuceDemo\Source\Demos</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index dd4c315ca981bc06a8448420b0593e5133db92b0..6a6cf2966eb6591108a0097306e33ec2b64ae77c 100644 (file)
     <ClCompile Include="..\..\Source\Demos\ComponentTransformsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\CryptographyDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp"/>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\GraphicsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\ImagesDemo.cpp"/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 2cfd39bab9d6a2ed9fa669fb153e0d01072632b6..fea3d46b65fb684fd8dbfbbf13428026da969490 100644 (file)
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp">\r
+      <Filter>JuceDemo\Source\Demos</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 35823845239e0c61e9edbc28ab2893b35d671d2c..60c5c6ee6ff3f84ef167f176606fc635bf03e869 100644 (file)
     <ClCompile Include="..\..\Source\Demos\ComponentTransformsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\CryptographyDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp"/>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\GraphicsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\ImagesDemo.cpp"/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 71b50c0a222150371e2b95b4fb414fea544d4e74..836b4b6b3725ca0588fbe9872a817145f108113e 100644 (file)
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp">\r
+      <Filter>JuceDemo\Source\Demos</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index e5bce5664b2e2376f0d20a5bd914db1c56b466af..0ded1fac6774f230fc3ad5f8eb7d6312cdd11171 100644 (file)
     <ClCompile Include="..\..\Source\Demos\ComponentTransformsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\CryptographyDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp"/>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\GraphicsDemo.cpp"/>\r
     <ClCompile Include="..\..\Source\Demos\ImagesDemo.cpp"/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index c08383b9bcbcca20c7b991ae811abb3103f0ae5f..36d89751636e31620e195d8b8f824bfa67ef53d8 100644 (file)
     <ClCompile Include="..\..\Source\Demos\DialogsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\Source\Demos\FlexBoxDemo.cpp">\r
+      <Filter>JuceDemo\Source\Demos</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\Source\Demos\FontsDemo.cpp">\r
       <Filter>JuceDemo\Source\Demos</Filter>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 62a256943bd9b8279478bde29e374a32a685ce09..919b7169fa4542db4181babdbb708267f2b606ae 100644 (file)
@@ -37,6 +37,7 @@
                587D594CCB99791F4D724DB4 = {isa = PBXBuildFile; fileRef = 64E7D43C4F4037CFC2C5E2AC; };
                40D223F10936E34918B48639 = {isa = PBXBuildFile; fileRef = 49412C044B88516D9AF59FDD; };
                F739D6D21483E3498985C7AF = {isa = PBXBuildFile; fileRef = 55D08920D4992CD0721AA3E3; };
+               2BFF2E7E13527E2E764617AA = {isa = PBXBuildFile; fileRef = 7AEEF2EE40D3B8AE687C6618; };
                E4A67DD76D4D063F547F0844 = {isa = PBXBuildFile; fileRef = 4DB00B418C4F068BC5FC7314; };
                257CBA785DEDAF53F4E9BF60 = {isa = PBXBuildFile; fileRef = 4D569839066D92C393F58EB4; };
                9C30D9613D76EEFDB1653F34 = {isa = PBXBuildFile; fileRef = 7DBF83B26277D13CB3FC1479; };
                2F1324CBA29604BD3E2003B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; };
                2F19C814598FC304CA841242 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                2F66B42AF6C0B5ED381937C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; };
+               2F78DE5144EBEAC697309BDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                2F7F13C84464F8409BBDBEB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; };
                2F8041ECBF70D78604686D6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; };
                2F8D57F15D63118E33CB0639 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                417FED446C0B953AB2DDB633 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2ContactSolver.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.cpp"; sourceTree = "SOURCE_ROOT"; };
                4198EE3311A171C884A5FA9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; };
                41F65957FAEED268DBFFE925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; };
+               41F76FF32798054E741CB90B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                420516E3BCE114E11526E916 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = smallft.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c"; sourceTree = "SOURCE_ROOT"; };
                4212EA9CE0B9AA4986108D9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLShaderProgram.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp"; sourceTree = "SOURCE_ROOT"; };
                42386AD366F1AD43B6B29364 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; };
                7A2009F14F7AFEEF7F233EBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitmath.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c"; sourceTree = "SOURCE_ROOT"; };
                7AD412430D3AEB0468089AF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
                7AE34C0CF7EABE461F4FE5FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Body.h; path = "../../../../modules/juce_box2d/box2d/Dynamics/b2Body.h"; sourceTree = "SOURCE_ROOT"; };
+               7AEEF2EE40D3B8AE687C6618 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FlexBoxDemo.cpp; path = ../../Source/Demos/FlexBoxDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                7AF9EF500482C84F02849647 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPENote.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.h"; sourceTree = "SOURCE_ROOT"; };
                7B5560AEA0CB3E507C16140C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                7B81083FC4CCD2D096D93162 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; };
                EE7001BD5206A8D8EA2D125B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; };
                EEA020419EF58E90C10AAE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; };
                EEAA1BB6254EDE07A7ABAD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
+               EF18C494669488BEDFC25A5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                EF8055850F3DEA173761E3B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                EFD1BD42000EE640A17EE1ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                EFDA611057B66032D2F06E53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2Joint.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.cpp"; sourceTree = "SOURCE_ROOT"; };
                FC63A33CA2E025F5C4C22CD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; };
                FCA788F92D5BB1640CD2AC35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioSettingsDemo.cpp; path = ../../Source/Demos/AudioSettingsDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                FCAC296E92A219D70EB96AD5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; };
+               FCE177D4FA4ABB9635AC9737 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                FD22F7A808D3B534354FD7E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Distance.h; path = "../../../../modules/juce_box2d/box2d/Collision/b2Distance.h"; sourceTree = "SOURCE_ROOT"; };
                FD2A08CE74C6EBC90CD44A49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; };
                FD46383E356A5DDC1AD53380 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkingDemo.cpp; path = ../../Source/Demos/NetworkingDemo.cpp; sourceTree = "SOURCE_ROOT"; };
                                        64E7D43C4F4037CFC2C5E2AC,
                                        49412C044B88516D9AF59FDD,
                                        55D08920D4992CD0721AA3E3,
+                                       7AEEF2EE40D3B8AE687C6618,
                                        4DB00B418C4F068BC5FC7314,
                                        4D569839066D92C393F58EB4,
                                        7DBF83B26277D13CB3FC1479,
                                        9750423DB3DB6570382DA3C1,
                                        9B9E034C5761096ACB8A76C3,
                                        73267FE8DDE50FD1E6E31ED4,
+                                       41F76FF32798054E741CB90B,
                                        8AE56D2F4E33B015C3D73EB8,
                                        52A95B5754438C999343869A,
                                        C8A42EE493A1DF2E283C245E, ); name = "format_types"; sourceTree = "<group>"; };
                                        2DDE8684F3C5CB4A781D72A5,
                                        F58760A8EE18630F97C7B646,
                                        1D62103CFAB9245F2CF523EC,
+                                       EF18C494669488BEDFC25A5D,
+                                       FCE177D4FA4ABB9635AC9737,
+                                       2F78DE5144EBEAC697309BDC,
                                        1065FE461C00EABD9485BB93,
                                        2E093A5506319EC68DA184F4,
                                        53AA2F507FD9DE263E43B277,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "JuceDemo";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "JuceDemo";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                        587D594CCB99791F4D724DB4,
                                        40D223F10936E34918B48639,
                                        F739D6D21483E3498985C7AF,
+                                       2BFF2E7E13527E2E764617AA,
                                        E4A67DD76D4D063F547F0844,
                                        257CBA785DEDAF53F4E9BF60,
                                        9C30D9613D76EEFDB1653F34,
index f19a16234b0f094afb822876f47150712d805aa7..cc2e6c83977fbbef2e9d00635556658e5341c7a4 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="sBBIzr" name="JuceDemo" projectType="guiapp" version="3.0.0"\r
-              bundleIdentifier="com.yourcompany.JuceDemo" jucerVersion="4.2.3"\r
+              bundleIdentifier="com.yourcompany.JuceDemo" jucerVersion="4.2.4"\r
               defines="JUCE_UNIT_TESTS=1" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
         <FILE id="F4wkwd" name="CryptographyDemo.cpp" compile="1" resource="0"\r
               file="Source/Demos/CryptographyDemo.cpp"/>\r
         <FILE id="E17XEZ" name="DialogsDemo.cpp" compile="1" resource="0" file="Source/Demos/DialogsDemo.cpp"/>\r
+        <FILE id="mYE1dA" name="FlexBoxDemo.cpp" compile="1" resource="0" file="Source/Demos/FlexBoxDemo.cpp"/>\r
         <FILE id="oM20ll" name="FontsDemo.cpp" compile="1" resource="0" file="Source/Demos/FontsDemo.cpp"/>\r
         <FILE id="emYkSr" name="GraphicsDemo.cpp" compile="1" resource="0"\r
               file="Source/Demos/GraphicsDemo.cpp"/>\r
index 37e2bd9de22ff36fe55cc9413a9e4a7ea7ab549b..f4510cd8fc9d818e92c434f754fa51e8ad191020 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 80a8a279a3f19d39da0adfd6f7b3d2778cd78f85..1a41b03ab46e9c7d3aa5e3c46bcfc337ac5b398f 100644 (file)
@@ -260,7 +260,7 @@ public:
         audioSourcePlayer.setSource (&synthAudioSource);\r
 \r
         deviceManager.addAudioCallback (&audioSourcePlayer);\r
-        deviceManager.addMidiInputCallback (String::empty, &(synthAudioSource.midiCollector));\r
+        deviceManager.addMidiInputCallback (String(), &(synthAudioSource.midiCollector));\r
 \r
         setOpaque (true);\r
         setSize (640, 480);\r
@@ -269,7 +269,7 @@ public:
     ~AudioSynthesiserDemo()\r
     {\r
         audioSourcePlayer.setSource (nullptr);\r
-        deviceManager.removeMidiInputCallback (String::empty, &(synthAudioSource.midiCollector));\r
+        deviceManager.removeMidiInputCallback (String(), &(synthAudioSource.midiCollector));\r
         deviceManager.removeAudioCallback (&audioSourcePlayer);\r
         deviceManager.removeAudioCallback (&liveAudioDisplayComp);\r
     }\r
index 836f27feafe467521c0a7ccb8844b6b27beb310d..d37bce4e458b24e4f9c63a94941ce4dc48a5ac41 100644 (file)
@@ -31,7 +31,7 @@ class CodeEditorDemo  : public Component,
 {\r
 public:\r
     CodeEditorDemo()\r
-        : fileChooser ("File", File::nonexistent, true, false, false,\r
+        : fileChooser ("File", File(), true, false, false,\r
                        "*.cpp;*.h;*.hpp;*.c;*.mm;*.m", String(),\r
                        "Choose a C++ file to open it in the editor")\r
     {\r
diff --git a/examples/Demo/Source/Demos/FlexBoxDemo.cpp b/examples/Demo/Source/Demos/FlexBoxDemo.cpp
new file mode 100644 (file)
index 0000000..6d15e36
--- /dev/null
@@ -0,0 +1,354 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2015 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   ------------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+  ==============================================================================\r
+*/\r
+\r
+#include "../JuceDemoHeader.h"\r
+\r
+// these classes are C++11-only\r
+#if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS && JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS && JUCE_COMPILER_SUPPORTS_LAMBDAS\r
+\r
+struct DemoFlexPanel   : public juce::Component,\r
+                         private juce::TextEditor::Listener,\r
+                         private juce::ComboBox::Listener\r
+{\r
+    DemoFlexPanel (juce::Colour col, FlexItem& item)  : flexItem (item), colour (col)\r
+    {\r
+        int x = 70;\r
+        int y = 3;\r
+\r
+        setupTextEditor (flexOrderEditor, { x, y, 20, 18 }, "0");\r
+        addLabel ("order", flexOrderEditor);\r
+        y += 20;\r
+\r
+        setupTextEditor (flexGrowEditor, { x, y, 20, 18 }, "0");\r
+        addLabel ("flex-grow", flexGrowEditor);\r
+        y += 20;\r
+\r
+        setupTextEditor (flexShrinkEditor, { x, y, 20, 18 }, "1");\r
+        addLabel ("flex-shrink", flexShrinkEditor);\r
+        y += 20;\r
+\r
+        setupTextEditor (flexBasisEditor, { x, y, 33, 18 }, "100");\r
+        addLabel ("flex-basis", flexBasisEditor);\r
+        y += 20;\r
+\r
+        alignSelfCombo.addItem ("auto",       1);\r
+        alignSelfCombo.addItem ("flex-start", 2);\r
+        alignSelfCombo.addItem ("flex-end",   3);\r
+        alignSelfCombo.addItem ("center",     4);\r
+        alignSelfCombo.addItem ("stretch",    5);\r
+\r
+        alignSelfCombo.setBounds (x, y, 90, 18);\r
+        alignSelfCombo.addListener (this);\r
+        alignSelfCombo.setSelectedId (5);\r
+        alignSelfCombo.setColour (ComboBox::outlineColourId, Colours::transparentBlack);\r
+        addAndMakeVisible (alignSelfCombo);\r
+        addLabel ("align-self", alignSelfCombo);\r
+    }\r
+\r
+    void setupTextEditor (TextEditor& te, Rectangle<int> b, StringRef initialText)\r
+    {\r
+        te.setBounds (b);\r
+        te.setText (initialText);\r
+        te.addListener (this);\r
+\r
+        addAndMakeVisible (te);\r
+    }\r
+\r
+    void addLabel (const String& name, Component& target)\r
+    {\r
+        auto label = new Label (name, name);\r
+        label->attachToComponent (&target, true);\r
+        labels.add (label);\r
+        addAndMakeVisible (label);\r
+    }\r
+\r
+    void comboBoxChanged (ComboBox* cb) override\r
+    {\r
+        auto selectedID = cb->getSelectedId();\r
+\r
+        if (selectedID == 1)  flexItem.alignSelf = FlexItem::AlignSelf::autoAlign;\r
+        if (selectedID == 2)  flexItem.alignSelf = FlexItem::AlignSelf::flexStart;\r
+        if (selectedID == 3)  flexItem.alignSelf = FlexItem::AlignSelf::flexEnd;\r
+        if (selectedID == 4)  flexItem.alignSelf = FlexItem::AlignSelf::center;\r
+        if (selectedID == 5)  flexItem.alignSelf = FlexItem::AlignSelf::stretch;\r
+\r
+        if (auto parent = getParentComponent())\r
+            parent->resized();\r
+    }\r
+\r
+    void textEditorTextChanged (TextEditor& textEditor) override\r
+    {\r
+        auto textIntValue = textEditor.getText().getFloatValue();\r
+\r
+        if (&textEditor == &flexOrderEditor)   flexItem.order      = (int) textIntValue;\r
+        if (&textEditor == &flexGrowEditor)    flexItem.flexGrow   = textIntValue;\r
+        if (&textEditor == &flexBasisEditor)   flexItem.flexBasis  = textIntValue;\r
+        if (&textEditor == &flexShrinkEditor)  flexItem.flexShrink = textIntValue;\r
+\r
+        if (auto parent = getParentComponent())\r
+            parent->resized();\r
+    }\r
+\r
+    void paint (Graphics& g) override\r
+    {\r
+        auto r = getLocalBounds();\r
+\r
+        g.setColour (colour);\r
+        g.fillRect (r);\r
+\r
+        g.setColour (Colours::black);\r
+        g.drawFittedText ("w: " + String (r.getWidth()) + newLine + "h: " + String (r.getHeight()),\r
+                          r.reduced (4), Justification::bottomRight, 2);\r
+    }\r
+\r
+    FlexItem& flexItem;\r
+\r
+    TextEditor flexOrderEditor, flexGrowEditor, flexShrinkEditor, flexBasisEditor;\r
+    ComboBox alignSelfCombo;\r
+\r
+    juce::Colour colour;\r
+    OwnedArray<Label> labels;\r
+\r
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DemoFlexPanel)\r
+\r
+};\r
+\r
+//==============================================================================\r
+struct FlexBoxDemo   : public juce::Component,\r
+                       private juce::Button::Listener\r
+{\r
+    FlexBoxDemo()\r
+    {\r
+        setupPropertiesPanel();\r
+        setupFlexBoxItems();\r
+    }\r
+\r
+    void resized() override\r
+    {\r
+        flexBox.performLayout (getFlexBoxBounds());\r
+    }\r
+\r
+    Rectangle<float> getFlexBoxBounds() const\r
+    {\r
+        return getLocalBounds().withTrimmedLeft (300)\r
+                               .reduced (10)\r
+                               .toFloat();\r
+    }\r
+\r
+    void paint (Graphics& g) override\r
+    {\r
+        g.fillAll (Colours::lightgrey);\r
+\r
+        g.setColour (Colours::white);\r
+        g.fillRect (getFlexBoxBounds());\r
+    }\r
+\r
+    void setupPropertiesPanel()\r
+    {\r
+        auto directionGroup = addControl (new GroupComponent ("direction", "flex-direction"));\r
+        directionGroup->setBounds (10, 30, 140, 110);\r
+\r
+        int i = 0;\r
+        int groupID = 1234;\r
+        int leftMargin = 15;\r
+        int topMargin = 45;\r
+\r
+        setupToggleButton (flexDirectionRowButton,           "row",            groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (flexDirectionRowReverseButton,    "row-reverse",    groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (flexDirectionColumnButton,        "column",         groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (flexDirectionColumnReverseButton, "column-reverse", groupID, leftMargin, topMargin + i++ * 22);\r
+        flexDirectionRowButton.setToggleState (true, dontSendNotification);\r
+\r
+        auto wrapGroup = addControl (new GroupComponent ("wrap", "flex-wrap"));\r
+        wrapGroup->setBounds (160, 30, 140, 110);\r
+\r
+        i = 0;\r
+        ++groupID;\r
+        leftMargin = 165;\r
+\r
+        setupToggleButton (flexNoWrapButton,      "nowrap",       groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (flexWrapButton,        "wrap",         groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (flexWrapReverseButton, "wrap-reverse", groupID, leftMargin, topMargin + i++ * 22);\r
+        flexWrapButton.setToggleState (true, sendNotification);\r
+\r
+        auto justifyGroup = addControl (new GroupComponent ("justify", "justify-content"));\r
+        justifyGroup->setBounds (10, 150, 140, 140);\r
+\r
+        i = 0;\r
+        ++groupID;\r
+        leftMargin = 15;\r
+        topMargin = 165;\r
+\r
+        setupToggleButton (justifyFlexStartButton,    "flex-start",    groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (justifyFlexEndButton,      "flex-end",      groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (justifyCenterButton,       "center",        groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (justifySpaceBetweenButton, "space-between", groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (justifySpaceAroundButton,  "space-around",  groupID, leftMargin, topMargin + i++ * 22);\r
+        justifyFlexStartButton.setToggleState (true, sendNotification);\r
+\r
+        auto alignGroup = addControl (new GroupComponent ("align", "align-items"));\r
+        alignGroup->setBounds (160, 150, 140, 140);\r
+\r
+        i = 0;\r
+        ++groupID;\r
+        leftMargin = 165;\r
+        topMargin = 165;\r
+\r
+        setupToggleButton (alignStretchButton,   "stretch",    groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignFlexStartButton, "flex-start", groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignFlexEndButton,   "flex-end",   groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignCenterButton,    "center",     groupID, leftMargin, topMargin + i++ * 22);\r
+        alignStretchButton.setToggleState (true, sendNotification);\r
+\r
+        auto alignContentGroup = addControl (new GroupComponent ("content", "align-content"));\r
+        alignContentGroup->setBounds (10, 300, 140, 160);\r
+\r
+        i = 0;\r
+        ++groupID;\r
+        leftMargin = 15;\r
+        topMargin = 315;\r
+\r
+        setupToggleButton (alignContentStretchButton,      "stretch",       groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignContentFlexStartButton,    "flex-start",    groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignContentFlexEndButton,      "flex-end",      groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignContentCenterButton,       "center",        groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignContentSpaceBetweenButton, "space-between", groupID, leftMargin, topMargin + i++ * 22);\r
+        setupToggleButton (alignContentSpaceAroundButton,  "space-around",  groupID, leftMargin, topMargin + i++ * 22);\r
+        alignContentStretchButton.setToggleState (true, sendNotification);\r
+    }\r
+\r
+    void setupFlexBoxItems()\r
+    {\r
+        addItem (Colours::orange);\r
+        addItem (Colours::aqua);\r
+        addItem (Colours::lightcoral);\r
+        addItem (Colours::aquamarine);\r
+        addItem (Colours::forestgreen);\r
+    }\r
+\r
+    void addItem (Colour colour)\r
+    {\r
+        flexBox.items.add (FlexItem (100, 150)\r
+                             .withMargin (10)\r
+                             .withWidth (200));\r
+\r
+        auto& flexItem = flexBox.items.getReference (flexBox.items.size() - 1);\r
+\r
+        auto panel = new DemoFlexPanel (colour, flexItem);\r
+        panels.add (panel);\r
+        flexItem.associatedComponent = panel;\r
+        addAndMakeVisible (panel);\r
+    }\r
+\r
+    void setupToggleButton (ToggleButton& tb, StringRef text, int groupID, int x, int y)\r
+    {\r
+        tb.setButtonText (text);\r
+        tb.setRadioGroupId (groupID);\r
+        tb.setToggleState (false, dontSendNotification);\r
+        tb.addListener (this);\r
+        tb.setBounds (x, y, 130, 22);\r
+\r
+        addAndMakeVisible (tb);\r
+    }\r
+\r
+    template <typename ComponentType>\r
+    ComponentType* addControl (ComponentType* newControlComp)\r
+    {\r
+        controls.add (newControlComp);\r
+        addAndMakeVisible (newControlComp);\r
+        return newControlComp;\r
+    }\r
+\r
+    void buttonClicked (Button* b) override\r
+    {\r
+        if (b->getToggleState())\r
+        {\r
+            if (b == &flexDirectionRowButton)                   flexBox.flexDirection   = FlexBox::Direction::row;\r
+            else if (b == &flexDirectionRowReverseButton)       flexBox.flexDirection   = FlexBox::Direction::rowReverse;\r
+            else if (b == &flexDirectionColumnButton)           flexBox.flexDirection   = FlexBox::Direction::column;\r
+            else if (b == &flexDirectionColumnReverseButton)    flexBox.flexDirection   = FlexBox::Direction::columnReverse;\r
+            else if (b == &flexNoWrapButton)                    flexBox.flexWrap        = FlexBox::Wrap::noWrap;\r
+            else if (b == &flexWrapButton)                      flexBox.flexWrap        = FlexBox::Wrap::wrap;\r
+            else if (b == &flexWrapReverseButton)               flexBox.flexWrap        = FlexBox::Wrap::wrapReverse;\r
+            else if (b == &justifyFlexStartButton)              flexBox.justifyContent  = FlexBox::JustifyContent::flexStart;\r
+            else if (b == &justifyFlexEndButton)                flexBox.justifyContent  = FlexBox::JustifyContent::flexEnd;\r
+            else if (b == &justifyCenterButton)                 flexBox.justifyContent  = FlexBox::JustifyContent::center;\r
+            else if (b == &justifySpaceBetweenButton)           flexBox.justifyContent  = FlexBox::JustifyContent::spaceBetween;\r
+            else if (b == &justifySpaceAroundButton)            flexBox.justifyContent  = FlexBox::JustifyContent::spaceAround;\r
+            else if (b == &alignStretchButton)                  flexBox.alignItems      = FlexBox::AlignItems::stretch;\r
+            else if (b == &alignFlexStartButton)                flexBox.alignItems      = FlexBox::AlignItems::flexStart;\r
+            else if (b == &alignFlexEndButton)                  flexBox.alignItems      = FlexBox::AlignItems::flexEnd;\r
+            else if (b == &alignCenterButton)                   flexBox.alignItems      = FlexBox::AlignItems::center;\r
+            else if (b == &alignContentStretchButton)           flexBox.alignContent    = FlexBox::AlignContent::stretch;\r
+            else if (b == &alignContentFlexStartButton)         flexBox.alignContent    = FlexBox::AlignContent::flexStart;\r
+            else if (b == &alignContentFlexEndButton)           flexBox.alignContent    = FlexBox::AlignContent::flexEnd;\r
+            else if (b == &alignContentCenterButton)            flexBox.alignContent    = FlexBox::AlignContent::center;\r
+            else if (b == &alignContentSpaceBetweenButton)      flexBox.alignContent    = FlexBox::AlignContent::spaceBetween;\r
+            else if (b == &alignContentSpaceAroundButton)       flexBox.alignContent    = FlexBox::AlignContent::spaceAround;\r
+            else return;\r
+\r
+            resized();\r
+        }\r
+    }\r
+\r
+    FlexBox flexBox;\r
+\r
+    OwnedArray<DemoFlexPanel> panels;\r
+    OwnedArray<Component> controls;\r
+\r
+    ToggleButton flexDirectionRowButton,\r
+                 flexDirectionRowReverseButton,\r
+                 flexDirectionColumnButton,\r
+                 flexDirectionColumnReverseButton,\r
+\r
+                 flexNoWrapButton,\r
+                 flexWrapButton,\r
+                 flexWrapReverseButton,\r
+\r
+                 justifyFlexStartButton,\r
+                 justifyFlexEndButton,\r
+                 justifyCenterButton,\r
+                 justifySpaceBetweenButton,\r
+                 justifySpaceAroundButton,\r
+\r
+                 alignStretchButton,\r
+                 alignFlexStartButton,\r
+                 alignFlexEndButton,\r
+                 alignCenterButton,\r
+\r
+                 alignContentStretchButton,\r
+                 alignContentFlexStartButton,\r
+                 alignContentFlexEndButton,\r
+                 alignContentCenterButton,\r
+                 alignContentSpaceBetweenButton,\r
+                 alignContentSpaceAroundButton;\r
+\r
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FlexBoxDemo)\r
+};\r
+\r
+\r
+// This static object will register this demo type in a global list of demos..\r
+static JuceDemoType<FlexBoxDemo> demo ("10 Components: FlexBox");\r
+\r
+#endif\r
index 151dec2242fe6712d5605daf15f8683ca3ee0617..98ed1831a00e0b0d916ea5b6d36891b48581b6bf 100644 (file)
@@ -34,9 +34,9 @@ class FontsDemo  : public Component,
 {\r
 public:\r
     FontsDemo()\r
-        : heightLabel (String::empty, "Height:"),\r
-          kerningLabel (String::empty, "Kerning:"),\r
-          scaleLabel  (String::empty, "Scale:"),\r
+        : heightLabel (String(), "Height:"),\r
+          kerningLabel (String(), "Kerning:"),\r
+          scaleLabel  (String(), "Scale:"),\r
           styleLabel ("Style"),\r
           boldToggle ("Bold"),\r
           italicToggle ("Italic")\r
index 7ca7e6daff5ea7dace2554e7489f6102fe59275d..29224bf247b98b85bf6774b87abf3790389fc27a 100644 (file)
@@ -395,7 +395,7 @@ class ImagesRenderingDemo  : public GraphicsDemoBase
 {\r
 public:\r
     ImagesRenderingDemo (ControllersComponent& cc, bool argb_, bool tiled_)\r
-        : GraphicsDemoBase (cc, String ("Images") + (argb_ ? ": ARGB" : ": RGB") + (tiled_ ? " Tiled" : String::empty )),\r
+        : GraphicsDemoBase (cc, String ("Images") + (argb_ ? ": ARGB" : ": RGB") + (tiled_ ? " Tiled" : String() )),\r
           isArgb (argb_), isTiled (tiled_)\r
     {\r
         argbImage = ImageFileFormat::loadFrom (BinaryData::juce_icon_png, (size_t) BinaryData::juce_icon_pngSize);\r
index 1a6dcfa2996caa6e64ea056f058573ec1bd2fbe0..cc060ca381e7c95f04bf27e2aac43bf7940d1325 100644 (file)
@@ -86,7 +86,7 @@ public:
     File getLastDocumentOpened() override\r
     {\r
         // not interested in this for now\r
-        return File::nonexistent;\r
+        return File();\r
     }\r
 \r
     void setLastDocumentOpened (const File& /*file*/) override\r
index 71a9f00f8dc9ac1d7e148935d84c8d86e0ad8aa6..af16b3eb16dddfb693794fac528f9f0281b2d890 100644 (file)
@@ -836,8 +836,8 @@ struct OpenGLDemoClasses
                 controlsOverlay->statusLabel.setText (statusText, dontSendNotification);\r
 \r
 \r
-                newVertexShader = String::empty;\r
-                newFragmentShader = String::empty;\r
+                newVertexShader = String();\r
+                newFragmentShader = String();\r
             }\r
         }\r
 \r
index 0216195f05bbaab1763eccfb90504addb6936d1c..7be659ae800739e718d9c111d0e32cc2aea5d374 100644 (file)
@@ -97,7 +97,7 @@ public:
 \r
         if (shader != nullptr)\r
         {\r
-            statusLabel.setText (String::empty, dontSendNotification);\r
+            statusLabel.setText (String(), dontSendNotification);\r
 \r
             shader->fillRect (g.getInternalContext(), getLocalBounds());\r
         }\r
index f1fa50e639e4fc378e0d6a06e820e91f3268cae9..9810aa79457d15344e88d01dc5383d54e141ad2d 100644 (file)
@@ -119,7 +119,9 @@ static String getAllSystemInfo()
       << "User region:      " << SystemStats::getUserRegion() << newLine\r
       << "User language:    " << SystemStats::getUserLanguage() << newLine\r
       << "Display language: " << SystemStats::getDisplayLanguage() << newLine\r
-      << newLine\r
+      << newLine;\r
+\r
+    systemInfo\r
       << "Number of CPUs:  " << SystemStats::getNumCpus() << newLine\r
       << "Memory size:     " << SystemStats::getMemorySizeInMegabytes() << " MB" << newLine\r
       << "CPU vendor:      " << SystemStats::getCpuVendor() << newLine\r
@@ -134,12 +136,16 @@ static String getAllSystemInfo()
       << "CPU has 3DNOW:   " << (SystemStats::has3DNow()  ? "yes" : "no") << newLine\r
       << "CPU has AVX:     " << (SystemStats::hasAVX()    ? "yes" : "no") << newLine\r
       << "CPU has AVX2:    " << (SystemStats::hasAVX2()   ? "yes" : "no") << newLine\r
-      << newLine\r
+      << newLine;\r
+\r
+    systemInfo\r
       << "Current working directory:  " << File::getCurrentWorkingDirectory().getFullPathName() << newLine\r
       << "Current application file:   " << File::getSpecialLocation (File::currentApplicationFile).getFullPathName() << newLine\r
       << "Current executable file:    " << File::getSpecialLocation (File::currentExecutableFile) .getFullPathName() << newLine\r
       << "Invoked executable file:    " << File::getSpecialLocation (File::invokedExecutableFile) .getFullPathName() << newLine\r
-      << newLine\r
+      << newLine;\r
+\r
+    systemInfo\r
       << "User home folder:               " << File::getSpecialLocation (File::userHomeDirectory)             .getFullPathName() << newLine\r
       << "User desktop folder:            " << File::getSpecialLocation (File::userDesktopDirectory)          .getFullPathName() << newLine\r
       << "User documents folder:          " << File::getSpecialLocation (File::userDocumentsDirectory)        .getFullPathName() << newLine\r
@@ -150,7 +156,9 @@ static String getAllSystemInfo()
       << "Common application data folder: " << File::getSpecialLocation (File::commonApplicationDataDirectory).getFullPathName() << newLine\r
       << "Common documents folder:        " << File::getSpecialLocation (File::commonDocumentsDirectory)      .getFullPathName() << newLine\r
       << "Local temp folder:              " << File::getSpecialLocation (File::tempDirectory)                 .getFullPathName() << newLine\r
-      << newLine\r
+      << newLine;\r
+\r
+    systemInfo\r
       << "File System roots: "          << getFileSystemRoots() << newLine\r
       << "Free space in home folder: "  << File::descriptionOfSizeInBytes (File::getSpecialLocation (File::userHomeDirectory)\r
                                                                                 .getBytesFreeOnVolume()) << newLine\r
index 2d29227f076f73f1d6d51239bd701dd921073fc8..8ccc4a2c690371bc4f5be7ba0fe70e929852acde 100644 (file)
@@ -35,8 +35,8 @@ class MovieComponentWithFileBrowser  : public Component,
 public:\r
     MovieComponentWithFileBrowser()\r
         : isDragOver (false),\r
-          fileChooser ("movie", File::nonexistent, true, false, false,\r
-                       "*", String::empty, "(choose a video file to play)")\r
+          fileChooser ("movie", File(), true, false, false,\r
+                       "*", String(), "(choose a video file to play)")\r
     {\r
         addAndMakeVisible (videoComp);\r
 \r
index b6c425eca4578e7b7e36f5acc85bb40222c3a5ea..a90a9a1a2ae544c025a9312be4bb862830a77035 100644 (file)
@@ -242,7 +242,7 @@ private:
 \r
         static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept\r
         {\r
-            return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String::empty.getCharPointer());\r
+            return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer());\r
         }\r
     };\r
 \r
index 422f3bf5097de9611ffd5621328e933690c84c0d..f5886f88029827ea0f74708922b36fea9b3df4de 100644 (file)
 #include "../JuceDemoHeader.h"\r
 \r
 \r
-static void showBubbleMessage (Component* targetComponent, const String& textToShow)\r
+static void showBubbleMessage (Component* targetComponent, const String& textToShow,\r
+                               ScopedPointer<BubbleMessageComponent>& bmc)\r
 {\r
-    BubbleMessageComponent* bmc = new BubbleMessageComponent();\r
+    bmc = new BubbleMessageComponent();\r
 \r
     if (Desktop::canUseSemiTransparentWindows())\r
     {\r
@@ -42,7 +43,7 @@ static void showBubbleMessage (Component* targetComponent, const String& textToS
     AttributedString text (textToShow);\r
     text.setJustification (Justification::centred);\r
 \r
-    bmc->showAt (targetComponent, text, 2000, true, true);\r
+    bmc->showAt (targetComponent, text, 2000, true, false);\r
 }\r
 \r
 //==============================================================================\r
@@ -390,6 +391,7 @@ struct ButtonsPage   : public Component,
 \r
 private:\r
     OwnedArray<Component> components;\r
+    ScopedPointer<BubbleMessageComponent> bubbleMessage;\r
 \r
     // This little function avoids a bit of code-duplication by adding a component to\r
     // our list as well as calling addAndMakeVisible on it..\r
@@ -406,7 +408,8 @@ private:
         showBubbleMessage (button,\r
                            "This is a demo of the BubbleMessageComponent, which lets you pop up a message pointing "\r
                            "at a component or somewhere on the screen.\n\n"\r
-                           "The message bubbles will disappear after a timeout period, or when the mouse is clicked.");\r
+                           "The message bubbles will disappear after a timeout period, or when the mouse is clicked.",\r
+                           bubbleMessage);\r
     }\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ButtonsPage)\r
@@ -450,11 +453,11 @@ class ToolbarDemoComp   : public Component,
 {\r
 public:\r
     ToolbarDemoComp()\r
-        : depthLabel (String::empty, "Toolbar depth:"),\r
-          infoLabel (String::empty, "As well as showing off toolbars, this demo illustrates how to store "\r
-                                    "a set of SVG files in a Zip file, embed that in your application, and read "\r
-                                    "them back in at runtime.\n\nThe icon images here are taken from the open-source "\r
-                                    "Tango icon project."),\r
+        : depthLabel (String(), "Toolbar depth:"),\r
+          infoLabel (String(), "As well as showing off toolbars, this demo illustrates how to store "\r
+                               "a set of SVG files in a Zip file, embed that in your application, and read "\r
+                               "them back in at runtime.\n\nThe icon images here are taken from the open-source "\r
+                                "Tango icon project."),\r
           orientationButton ("Vertical/Horizontal"),\r
           customiseButton ("Customise...")\r
     {\r
@@ -1510,8 +1513,11 @@ public:
                                "This is a custom tab component\n"\r
                                "\n"\r
                                "You can use these to implement things like close-buttons "\r
-                               "or status displays for your tabs.");\r
+                               "or status displays for your tabs.",\r
+                               bubbleMessage);\r
         }\r
+    private:\r
+        ScopedPointer<BubbleMessageComponent> bubbleMessage;\r
     };\r
 };\r
 \r
index 0914e5823ea90a4b6d075e1ed8b4daed4e060ab2..b31a18244192c12b4101d2b71744c1b3264b1983 100644 (file)
@@ -356,9 +356,9 @@ private:
     {\r
         switch (type)\r
         {\r
-            case xml:   codeDocument.replaceAllContent (BinaryData::treedemo_xml);          break;\r
-            case json:  codeDocument.replaceAllContent (BinaryData::juce_module_info);      break;\r
-            default:    codeDocument.replaceAllContent (String::empty);                     break;\r
+            case xml:   codeDocument.replaceAllContent (BinaryData::treedemo_xml);      break;\r
+            case json:  codeDocument.replaceAllContent (BinaryData::juce_module_info);  break;\r
+            default:    codeDocument.replaceAllContent (String());                      break;\r
         }\r
     }\r
 \r
index ea2e6aa6382e325de476d882c7b253b15afe4372..0900af8c519d837b13d38e1e5bf5699315b32efc 100644 (file)
@@ -367,32 +367,32 @@ private:
             }\r
 \r
             case MainAppWindow::useLookAndFeelV1:\r
-                result.setInfo ("Use LookAndFeel_V1", String::empty, generalCategory, 0);\r
+                result.setInfo ("Use LookAndFeel_V1", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('i', ModifierKeys::commandModifier);\r
                 result.setTicked (isLookAndFeelSelected<LookAndFeel_V1>());\r
                 break;\r
 \r
             case MainAppWindow::useLookAndFeelV2:\r
-                result.setInfo ("Use LookAndFeel_V2", String::empty, generalCategory, 0);\r
+                result.setInfo ("Use LookAndFeel_V2", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('o', ModifierKeys::commandModifier);\r
                 result.setTicked (isLookAndFeelSelected<LookAndFeel_V2>());\r
                 break;\r
 \r
             case MainAppWindow::useLookAndFeelV3:\r
-                result.setInfo ("Use LookAndFeel_V3", String::empty, generalCategory, 0);\r
+                result.setInfo ("Use LookAndFeel_V3", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('p', ModifierKeys::commandModifier);\r
                 result.setTicked (isLookAndFeelSelected<LookAndFeel_V3>());\r
                 break;\r
 \r
             case MainAppWindow::toggleRepaintDebugging:\r
-                result.setInfo ("Toggle repaint display", String::empty, generalCategory, 0);\r
+                result.setInfo ("Toggle repaint display", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('r', ModifierKeys());\r
                 result.setTicked (juceDemoRepaintDebuggingActive);\r
                 break;\r
 \r
             case MainAppWindow::useNativeTitleBar:\r
             {\r
-                result.setInfo ("Use native window title bar", String::empty, generalCategory, 0);\r
+                result.setInfo ("Use native window title bar", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('n', ModifierKeys::commandModifier);\r
                 bool nativeTitlebar = false;\r
 \r
@@ -405,7 +405,7 @@ private:
 \r
            #if ! JUCE_LINUX\r
             case MainAppWindow::goToKioskMode:\r
-                result.setInfo ("Show full-screen kiosk mode", String::empty, generalCategory, 0);\r
+                result.setInfo ("Show full-screen kiosk mode", String(), generalCategory, 0);\r
                 result.addDefaultKeypress ('f', ModifierKeys::commandModifier);\r
                 result.setTicked (Desktop::getInstance().getKioskModeComponent() != 0);\r
                 break;\r
index da1622d58e82aa6eae933db3ffc918e35358a88d..9c09d22d56d8d2c54444f52f89138f70c3c1d29b 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := HelloWorld\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := HelloWorld\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/MainComponent_a6ffb4a5.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking HelloWorld\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning HelloWorld\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping HelloWorld\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MainComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 8a3180e4df25b062cca751de7c5209aa274dac53..f2dc85f398faf8d01ba846403a69da7de48a25ea 100644 (file)
@@ -88,6 +88,7 @@
                156FD1B428979C9E5D43DDC2 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
                158F40026FBDA4EE9F90CF02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; };
                15DBBA2C2CCC22B3488B48F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; };
+               161B3C280E9DEB1E0D76114C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                1657734A03E0F21166FAE9E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
                1667021AB391F5D9B82B186D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
                1679AB8658094A527E7A2811 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; };
                4E1058572E25FD04B7D60700 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
                4E2E741BA1779C70049641D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
                4F1B04D79D53E699BF00647E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedValue.h"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.h"; sourceTree = "SOURCE_ROOT"; };
+               4F828B853191F6F5D925E8C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                4FF67CE1DFACAFF545D8E9AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                5044BE1EA711B629563F70CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; };
                505E065430B4C61E119415FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; };
                659BEDAE6C17DD4FA6B74971 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
                65A7736ECC548A9FD10E4F42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; };
                65A88D5E8C1F0BE74F05C072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; };
+               65AA3DF3E027C33FFD7A9157 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                65B0A35F0ED651E60556A0E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
                65DBA30ACD7C6156850F1F4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; };
                65FC1A9B2D0CDCD2D0180A17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
                                        C22BEA19FDBE55F5AAFE9D36,
                                        FF06CDF5B9CF3DE2EA741D54,
                                        699E20F1575B18C3D909940A,
+                                       4F828B853191F6F5D925E8C6,
+                                       65AA3DF3E027C33FFD7A9157,
+                                       161B3C280E9DEB1E0D76114C,
                                        D5054A3D5EBDC47D51FC99F6,
                                        E143BF0720845D8A25BB16E6,
                                        B2C3D53237084A8C79EE8B16,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.jucehelloworld;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.jucehelloworld;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index c9b71640a6b8308b36624dc27adf4cbabc404de9..855b54a80e6d01ecd7d9eb0d658ba5f0f73da1c8 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 7be430dbc6949d4c2f36159bb841b5ed6a75d09a..4852be0571c91e688c09c8ffdc430f512d49fbe0 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index decbf83565e1a4852337a52bffdbe8eb11f8ed63..b6ae766cfcf9ff62683131aebc0ca952e260387e 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 30357f4146dbadbbfed338deb67669685a82968d..a0165016dba13a301ee89e3c4dda808d5300f7b1 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index bda199051745e7905a008f6c0a02eea0e6bedae1..eaa692335e5bc32c3d5624951b7e41b8a2aaa3eb 100644 (file)
@@ -88,6 +88,7 @@
                15569873F24C4157977C8D9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
                158F40026FBDA4EE9F90CF02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; };
                15DBBA2C2CCC22B3488B48F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; };
+               161B3C280E9DEB1E0D76114C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                1657734A03E0F21166FAE9E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
                1667021AB391F5D9B82B186D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
                1679AB8658094A527E7A2811 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; };
                4E1058572E25FD04B7D60700 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; };
                4E2E741BA1779C70049641D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
                4F1B04D79D53E699BF00647E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedValue.h"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.h"; sourceTree = "SOURCE_ROOT"; };
+               4F828B853191F6F5D925E8C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                4FF67CE1DFACAFF545D8E9AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                5044BE1EA711B629563F70CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; };
                505E065430B4C61E119415FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; };
                659BEDAE6C17DD4FA6B74971 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
                65A7736ECC548A9FD10E4F42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; };
                65A88D5E8C1F0BE74F05C072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; };
+               65AA3DF3E027C33FFD7A9157 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                65B0A35F0ED651E60556A0E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
                65DBA30ACD7C6156850F1F4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; };
                65FC1A9B2D0CDCD2D0180A17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
                                        C22BEA19FDBE55F5AAFE9D36,
                                        FF06CDF5B9CF3DE2EA741D54,
                                        699E20F1575B18C3D909940A,
+                                       4F828B853191F6F5D925E8C6,
+                                       65AA3DF3E027C33FFD7A9157,
+                                       161B3C280E9DEB1E0D76114C,
                                        D5054A3D5EBDC47D51FC99F6,
                                        E143BF0720845D8A25BB16E6,
                                        B2C3D53237084A8C79EE8B16,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "HelloWorld";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "HelloWorld";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index 1bff121183102312a2f34d4d9744c93e29f8076b..61b287a6c94bf0fa20d7a0bd1da0ecd23503f152 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="tTAKTK1s" name="HelloWorld" projectType="guiapp" juceFolder="../../../juce"\r
-              jucerVersion="4.2.3" version="1.0.0" bundleIdentifier="com.roli.jucehelloworld"\r
+              jucerVersion="4.2.4" version="1.0.0" bundleIdentifier="com.roli.jucehelloworld"\r
               companyName="ROLI Ltd." includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
index 458064bbc6266e2aec40eaf88c68f37a3986508f..212f7d97197a6468cafd3e911e13f0cfed7811ff 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 549c25af424ecc44db702a56dd24d1c3a72bbda2..31ead7e6de9a6cab7538835cabcb72288de72190 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := MPETest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := MPETest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking MPETest\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning MPETest\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping MPETest\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index ea8e61d55499eaceeb777dd3093c9e2f5b28a707..b3cdf779fbaba1e0f5e63463b7b6d4b6c33d93b5 100644 (file)
                70D59B63181ABCB009B6248D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                7120C1DA3DF4C3FE1E82AD0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
                715049CBFF51DD0B6C96C4AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; };
+               71965C65D88AAC1BCA7C1BCD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                71C76E49F379F9B05389C3CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; };
                72206F2F4B075CA4D6D95E31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; };
                7257482194FCB2E6510D816C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLGraphicsContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
                89F3F42BBF22E3DF54C63780 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitrate.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h"; sourceTree = "SOURCE_ROOT"; };
                8A00D34ABCC62F277B89FED1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; };
                8A339D25116C57AC5F0FFBCD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ZoneColourPicker.h; path = ../../Source/ZoneColourPicker.h; sourceTree = "SOURCE_ROOT"; };
+               8A394C912059AA20A66CA3A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                8B2483DC502CFB85054091C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
                8B4618262B4BB0A436C51B6C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp"; sourceTree = "SOURCE_ROOT"; };
                8B64303D4A4877BE3D9ECA23 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; };
                97C8203B745D9AFE10D00FDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
                97EE4852EA4CC6213A4DB03D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; };
                98249E2CE3DB75CC7E110B95 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; };
+               9845CA2D31B9A30F25D375FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                988A1AF75EB5E8F25AAD1632 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; };
                98A33952B59DC73987AB3F3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; };
                9915F52C7A0F1EB8A2C19B55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLFrameBuffer.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp"; sourceTree = "SOURCE_ROOT"; };
                D19E7811EB87D4AAB4FBF421 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Visualiser.h; path = ../../Source/Visualiser.h; sourceTree = "SOURCE_ROOT"; };
                D1A827BFF897A4EE4B56A385 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwise.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/bitwise.c"; sourceTree = "SOURCE_ROOT"; };
                D1E4737C60EBD969197A6FA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; };
+               D223BF17D638547189B03B14 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                D254890C63ADC9C6812BDF93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                D2A8BDAAD64FF5A5442F1C3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; };
                D2B89986858D8B327441661A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; };
                                        07B0233D286E466E20AC2887,
                                        8D9DDE982773DF3829A5D2EC,
                                        3BC401D5C6F376B3E8A98BE9,
+                                       9845CA2D31B9A30F25D375FC,
                                        6E9C575B96F65E6DDD4F62B8,
                                        AC3A1878FFA5E36CC67EF642,
                                        B5EA0961ABF5E581D4DA94C1, ); name = "format_types"; sourceTree = "<group>"; };
                                        B97AF825D9F4F24DF5751FB1,
                                        A6A60C3C36A7788E8226E80D,
                                        E42FD3B1912D5F551179D1DB,
+                                       D223BF17D638547189B03B14,
+                                       8A394C912059AA20A66CA3A5,
+                                       71965C65D88AAC1BCA7C1BCD,
                                        29565FA867CDE49665585AC3,
                                        E1EFD62896E03997AD0B77AF,
                                        DB130B7171062DA7585C54F9,
index 05493e54373339e8ae30049c8961791418ea8880..dd6894587edf031280b79c4eafc21ffaeb29acc2 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index ce169418be65f0831f5c84312228957bf7c4baa1..2f42a21d42af213a5859e4cf3e97d65053823a50 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 1cd1c1ccf0945b3944f8591fe7db3249f681e241..70572346eb6afb1deb992d209bda21d63d78f29f 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 656d8b110184d7584955c4baf929c707c12d11ae..ada16effa6165013a28f845f09399812c38f0beb 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IilE7R" name="MPETest" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.MPETest" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="VCQQcn" name="MPETest">\r
     <GROUP id="{D43238F0-992F-BC5A-F1AA-31BBBD3D17B0}" name="Source">\r
       <FILE id="uRxR7V" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 3f68caad821a389dacfe968fdc8ebdfb0fa838bd..951992975cf760fd369fcd6e4f1a9a0e741a8cd5 100644 (file)
@@ -50,18 +50,18 @@ public:
 \r
     //==============================================================================\r
     MPESetupComponent()\r
-        : masterChannelLabel (String::empty, "Master channel:"),\r
-          noteChannelsLabel (String::empty, "Nr. of note channels:"),\r
-          masterPitchbendRangeLabel (String::empty, "Master pitchbend range (semitones):"),\r
-          notePitchbendRangeLabel (String::empty, "Note pitchbend range (semitones):"),\r
+        : masterChannelLabel (String(), "Master channel:"),\r
+          noteChannelsLabel (String(), "Nr. of note channels:"),\r
+          masterPitchbendRangeLabel (String(), "Master pitchbend range (semitones):"),\r
+          notePitchbendRangeLabel (String(), "Note pitchbend range (semitones):"),\r
           addZoneButton ("Add this zone"),\r
           clearAllZonesButton ("Clear all zones"),\r
-          legacyStartChannelLabel (String::empty, "First channel:"),\r
-          legacyEndChannelLabel (String::empty, "Last channel:"),\r
-          legacyPitchbendRangeLabel (String::empty, "Pitchbend range (semitones):"),\r
+          legacyStartChannelLabel (String(), "First channel:"),\r
+          legacyEndChannelLabel (String(), "Last channel:"),\r
+          legacyPitchbendRangeLabel (String(), "Pitchbend range (semitones):"),\r
           legacyModeEnabledToggle ("Enable Legacy Mode"),\r
           voiceStealingEnabledToggle ("Enable synth voice stealing"),\r
-          numberOfVoicesLabel (String::empty, "Number of synth voices")\r
+          numberOfVoicesLabel (String(), "Number of synth voices")\r
     {\r
 \r
         initialiseComboBoxWithConsecutiveIntegers (masterChannel, masterChannelLabel, 1, 15, defaultMasterChannel);\r
index f1c35c00737e1421d9a13203520c806a001e8882..c22143dde2ee7a7bf55c907bca5335cf86e437c8 100644 (file)
@@ -41,8 +41,8 @@ public:
     {\r
         setLookAndFeel (&lookAndFeel);\r
         setSize (880, 720);\r
-        audioDeviceManager.initialise (0, 2, 0, true, String::empty, 0);\r
-        audioDeviceManager.addMidiInputCallback(String::empty, this);\r
+        audioDeviceManager.initialise (0, 2, 0, true, String(), 0);\r
+        audioDeviceManager.addMidiInputCallback (String(), this);\r
         audioDeviceManager.addAudioCallback (this);\r
 \r
         addAndMakeVisible (audioSetupComp);\r
@@ -65,7 +65,7 @@ public:
 \r
     ~MainComponent()\r
     {\r
-        audioDeviceManager.removeMidiInputCallback (String::empty, this);\r
+        audioDeviceManager.removeMidiInputCallback (String(), this);\r
     }\r
 \r
     //==============================================================================\r
index 12b7004609cf633dbb685a8774dece60e5e63c38..7e88d199f379561f05c1e8b6c2897d16a1e1e95a 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := MidiTest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := MidiTest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/MainComponent_a6ffb4a5.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking MidiTest\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning MidiTest\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping MidiTest\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MainComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index ab43971f4b9e5ef031a1db5199619bef27deb80a..d59fd6db19393c598e8472d6273f684a06de9b6a 100644 (file)
@@ -60,6 +60,7 @@
                06251F5E80644992958A3B61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; };
                06606DC924B7DAE58792628E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; };
                0671CDC6377ED9857C888231 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               0687135A9B0C2FEFF02D023F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                06A3571D29486CC63867E429 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; };
                06ABA2CB47AC9A1C9C3DB734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
                06B47D41CCEBB771274906E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; };
                15A9B402DFA75E656A407EC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                15ADA6032EE53D202CD50575 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                15C2EE8305EE8F0E0DA60E7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; };
+               15CD600731386519A6F59ABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                16AB60E71EEED710531B2E18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
                16B6619A5A552495ADC91C2E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                176690C8D73C46A2A44EE5F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; };
                9E5488FCBB203D6BFCC9626C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; };
                9E9C69519E06E38297AC8941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h"; sourceTree = "SOURCE_ROOT"; };
                9EC5AE6597C1E855A915B783 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jpeglib.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jpeglib.h"; sourceTree = "SOURCE_ROOT"; };
+               9F1A34ABA1498389A7C3F428 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                9FB590DB65B12105CB3331E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                A01EB1FCF6F4D00B58A8D111 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                A0318E5733F0BDA8D1001ACB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; };
                A4C1AC68972416D5A16E8FDD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; };
                A4C85C1FBBAEF5CD869B481A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; };
                A4E533840C379C5D511BBF40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; };
+               A517CFD584E52958DA2EC804 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A55D76D2DD846DF369A1B062 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; };
                A5B4B4ACFAFFCA55AA7DF0EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                A612D2AEB82CA6769747CFF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        68CAC12255032C9598B836DF,
                                        004A7D1BC57F2136FF31D767,
                                        3AC1657491C449D35317D152,
+                                       15CD600731386519A6F59ABF,
                                        0C7A1C47389DD6A1DE34D831,
                                        8781C749016774125396B268,
                                        B6F1399CBD41DC2FF546CA8C, ); name = "format_types"; sourceTree = "<group>"; };
                                        13DEF72933AAB505B1665123,
                                        0E98BF2DDB2F83B2BDC98BC2,
                                        E37124530592B42579281C17,
+                                       A517CFD584E52958DA2EC804,
+                                       9F1A34ABA1498389A7C3F428,
+                                       0687135A9B0C2FEFF02D023F,
                                        B42A973FBBF33F9386B9BB24,
                                        73F2C869E920D4AA0AE4EAB0,
                                        073A9B62DEBF52C846CC0618,
index 3038c547dec81032f167f996ec88b245c8803581..47352a3420d7f41ce8054272b117ea05d20b67c3 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index f38decd9a8013b2d8ad316f30619aa193b733b30..0e1037dca2f27494397451282535401abd2d9eb2 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 60017ab53ec5ab6a1af955c9203bfdae73e345f5..e281244e02bdb587af890258c9f5b5ee5878dfc5 100644 (file)
@@ -61,6 +61,7 @@
                06251F5E80644992958A3B61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; };
                06606DC924B7DAE58792628E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; };
                0671CDC6377ED9857C888231 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               0687135A9B0C2FEFF02D023F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                06A3571D29486CC63867E429 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; };
                06ABA2CB47AC9A1C9C3DB734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
                06B47D41CCEBB771274906E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; };
                15A9B402DFA75E656A407EC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                15ADA6032EE53D202CD50575 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                15C2EE8305EE8F0E0DA60E7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; };
+               15CD600731386519A6F59ABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                16AB60E71EEED710531B2E18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
                16B6619A5A552495ADC91C2E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                176690C8D73C46A2A44EE5F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; };
                9E5488FCBB203D6BFCC9626C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; };
                9E9C69519E06E38297AC8941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h"; sourceTree = "SOURCE_ROOT"; };
                9EC5AE6597C1E855A915B783 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jpeglib.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jpeglib.h"; sourceTree = "SOURCE_ROOT"; };
+               9F1A34ABA1498389A7C3F428 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                9FB590DB65B12105CB3331E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                9FBD6E11D5668E77AF50973E = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = MidiTest/Images.xcassets; sourceTree = "SOURCE_ROOT"; };
                A01EB1FCF6F4D00B58A8D111 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                A4C1AC68972416D5A16E8FDD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; };
                A4C85C1FBBAEF5CD869B481A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; };
                A4E533840C379C5D511BBF40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; };
+               A517CFD584E52958DA2EC804 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A55D76D2DD846DF369A1B062 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; };
                A5B4B4ACFAFFCA55AA7DF0EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                A612D2AEB82CA6769747CFF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        68CAC12255032C9598B836DF,
                                        004A7D1BC57F2136FF31D767,
                                        3AC1657491C449D35317D152,
+                                       15CD600731386519A6F59ABF,
                                        0C7A1C47389DD6A1DE34D831,
                                        8781C749016774125396B268,
                                        B6F1399CBD41DC2FF546CA8C, ); name = "format_types"; sourceTree = "<group>"; };
                                        13DEF72933AAB505B1665123,
                                        0E98BF2DDB2F83B2BDC98BC2,
                                        E37124530592B42579281C17,
+                                       A517CFD584E52958DA2EC804,
+                                       9F1A34ABA1498389A7C3F428,
+                                       0687135A9B0C2FEFF02D023F,
                                        B42A973FBBF33F9386B9BB24,
                                        73F2C869E920D4AA0AE4EAB0,
                                        073A9B62DEBF52C846CC0618,
index d0526bcbb646ac36ead0a1a3b1f33cd6fd237bc2..f39c303f15307bf5ddcee13e0d0d7ff6368bfeeb 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index c8d285f990690e5f269ae190ec70fe96b93591f1..6eb7477726d2b657b06566171a6ce07efde6f9dc 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="wHE0ay" name="MidiTest" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.MidiTest" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="s3xxCh" name="MidiTest">\r
     <GROUP id="{7D29F5BC-1B05-AE8F-9202-5CF152AB1103}" name="Source">\r
       <FILE id="kpmJ3T" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 5cd57040596a040492806f46c9fb076aa7e6ddba..881da46aa58756aa8b55345e0b091384732d0ca3 100644 (file)
@@ -167,7 +167,7 @@ MainContentComponent::MainContentComponent ()
     midiMonitor.setScrollbarsShown (true);\r
     midiMonitor.setCaretVisible (false);\r
     midiMonitor.setPopupMenuEnabled (false);\r
-    midiMonitor.setText (String::empty);\r
+    midiMonitor.setText (String());\r
     addAndMakeVisible (midiMonitor);\r
 \r
     if (! BluetoothMidiDevicePairingDialogue::isAvailable())\r
index e95df255ac770181e22c73410dfb2d7d2925d321..b113dbc324ccdf5d46f84fd82a34192632f26ece 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := JUCE\ Network\ Graphics\ Demo\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := JUCE\ Network\ Graphics\ Demo\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/BinaryData_ce4232d4.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_osc_be4cee16.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_osc_be4cee16.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking JUCE Network Graphics Demo\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning JUCE Network Graphics Demo\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping JUCE Network Graphics Demo\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling BinaryData.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_osc.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 05617006e8830af26a479c347dd85830db55d266..281bcbda2bf2c6bea0d0c2dd513606a48b52e798 100644 (file)
                51F0F2EB22A60569E24FB86E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPENote.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.cpp"; sourceTree = "SOURCE_ROOT"; };
                51FFA102D25322925C454ACD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; };
                52058B3A331BFA856932EEED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; };
+               53105889A1FAACE8908856FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                53AB900649E4156D953DB1CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; };
                53F664A2A3FE1983E183A431 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; };
                54358D8A9A8DE6AF4F781E8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; };
                757D712721E9C95EDB104FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jerror.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.h"; sourceTree = "SOURCE_ROOT"; };
                758A85BA2A15681252AAC852 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
                75CBB4C7E9CBA8B36FA40FB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; };
+               75ECF0F3EAC1B3152F2B3D91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                75F0E24A0BFFB573DA77B602 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../JuceLibraryCode/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; };
                7665A2E5A2E41373D6F4C734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_decoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h"; sourceTree = "SOURCE_ROOT"; };
                766D9EC18EA5CBA993EA7B34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; };
                A198E2290B15C62F68D21050 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; };
                A1AF1E8ADB16AE21785390F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1F1F469B33048DD0609E02E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; };
+               A21023D075AB6F6C0044338D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                A210326040D3F2A40B2B9D15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; };
                A23791E205B22F21521DF9F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; };
                A239DEE243F0D1FB1158A8B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jchuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jchuff.c"; sourceTree = "SOURCE_ROOT"; };
                FF43622B9AAF3751B65DD81B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
                FF7509FDC5B23104C7AF1665 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; };
                FF796B6850F1EE2F18668D06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
+               FF8735B28B4092D4526B4C7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                FFE74EF868B7D7FAA24DE742 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; };
                5A58AF0A052C539F0E342A88 = {isa = PBXGroup; children = (
                                        4FF648D72D6F1A78956CDA1B,
                                        7A41A9C37A8BA7EFB6D1F518,
                                        264B51063F7AA584D23B426E,
                                        545C5A5F29523968A387FD91,
+                                       53105889A1FAACE8908856FD,
                                        CE06CB9CD28DE31FA1528DE5,
                                        F906FBF064A716C5EADF5708,
                                        5B8CE8EC0CEDF800AD5B71E1, ); name = "format_types"; sourceTree = "<group>"; };
                                        A7198BFD9B0CC598BD50B587,
                                        E368DF5C372BB7CCE82DC763,
                                        58B4452DE10C4ABF8D8DC7EB,
+                                       FF8735B28B4092D4526B4C7A,
+                                       A21023D075AB6F6C0044338D,
+                                       75ECF0F3EAC1B3152F2B3D91,
                                        2ABA2A324D752641AD2EA84D,
                                        42203A96B0F67E68EDB0939E,
                                        864DAFF59D56AC67F7BE6F77,
index 0b94827da67cab489b84c36c951a179994b80440..f818015797392b2ac9687fec15cd42231c257385 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 2fdf104059ee2f8730359da16d7bc2edebb8c5af..599d78cf5804b56406bd051d0b8da99e73a44961 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 15d73e5bfabeefc16fc3dc1f905dd31387e9c363..7388f5e2984a18e2a556cc5420e0777a1e25e6de 100644 (file)
                51F0F2EB22A60569E24FB86E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPENote.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.cpp"; sourceTree = "SOURCE_ROOT"; };
                51FFA102D25322925C454ACD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; };
                52058B3A331BFA856932EEED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; };
+               53105889A1FAACE8908856FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                53AB900649E4156D953DB1CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; };
                53F664A2A3FE1983E183A431 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; };
                54358D8A9A8DE6AF4F781E8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; };
                757D712721E9C95EDB104FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jerror.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.h"; sourceTree = "SOURCE_ROOT"; };
                758A85BA2A15681252AAC852 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
                75CBB4C7E9CBA8B36FA40FB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; };
+               75ECF0F3EAC1B3152F2B3D91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                75F0E24A0BFFB573DA77B602 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../JuceLibraryCode/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; };
                7665A2E5A2E41373D6F4C734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_decoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h"; sourceTree = "SOURCE_ROOT"; };
                766D9EC18EA5CBA993EA7B34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; };
                A198E2290B15C62F68D21050 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; };
                A1AF1E8ADB16AE21785390F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1F1F469B33048DD0609E02E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; };
+               A21023D075AB6F6C0044338D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                A210326040D3F2A40B2B9D15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; };
                A23791E205B22F21521DF9F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; };
                A239DEE243F0D1FB1158A8B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jchuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jchuff.c"; sourceTree = "SOURCE_ROOT"; };
                FF43622B9AAF3751B65DD81B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
                FF7509FDC5B23104C7AF1665 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; };
                FF796B6850F1EE2F18668D06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; };
+               FF8735B28B4092D4526B4C7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                FFE74EF868B7D7FAA24DE742 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; };
                5A58AF0A052C539F0E342A88 = {isa = PBXGroup; children = (
                                        4FF648D72D6F1A78956CDA1B,
                                        7A41A9C37A8BA7EFB6D1F518,
                                        264B51063F7AA584D23B426E,
                                        545C5A5F29523968A387FD91,
+                                       53105889A1FAACE8908856FD,
                                        CE06CB9CD28DE31FA1528DE5,
                                        F906FBF064A716C5EADF5708,
                                        5B8CE8EC0CEDF800AD5B71E1, ); name = "format_types"; sourceTree = "<group>"; };
                                        A7198BFD9B0CC598BD50B587,
                                        E368DF5C372BB7CCE82DC763,
                                        58B4452DE10C4ABF8D8DC7EB,
+                                       FF8735B28B4092D4526B4C7A,
+                                       A21023D075AB6F6C0044338D,
+                                       75ECF0F3EAC1B3152F2B3D91,
                                        2ABA2A324D752641AD2EA84D,
                                        42203A96B0F67E68EDB0939E,
                                        864DAFF59D56AC67F7BE6F77,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "JUCE Network Graphics Demo";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "JUCE Network Graphics Demo";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index b632e23199b0af6ba1774c18d1eb2ead9bbe831c..dc91f87e7c897281fcc7d62df0d29d9638f63e22 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 9dc7e64812093ec78f13532c6bf54e7b2bfe6982..81b9380060186bd392799e9f3decf097f0059181 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="gWI5Ir" name="JUCE Network Graphics Demo" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.NetworkGraphicsDemo"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.4">\r
   <MAINGROUP id="OT9rJ2" name="JUCE Network Graphics Demo">\r
     <GROUP id="{48D54E6E-37F4-B20A-E038-C63E4EDFD4D9}" name="Source">\r
       <FILE id="BfclEZ" name="Demos.h" compile="0" resource="0" file="Source/Demos.h"/>\r
index 40905c5373f04db97c3fc6ecf9f6815aefe5abc0..dbca80add3b009fcb9982b43448f19c92f5816f9 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := OSCMonitor\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := OSCMonitor\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_osc_be4cee16.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_osc_be4cee16.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking OSCMonitor\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning OSCMonitor\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping OSCMonitor\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_osc.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index ef2da2a846cddc243278e0fdbb2d44307791c150..3f836c19c33c2ae568586c6635957680d6032c96 100644 (file)
@@ -56,6 +56,7 @@
                05BECDDA18EEDCC6026046A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "floor_all.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h"; sourceTree = "SOURCE_ROOT"; };
                0633D0C7EFAF3C2F1AAED8B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; };
                0635718F78505B87C8C45C5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               0743372F26489CD53C1BDB91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                077D14BDF440711227A88652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisfile.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h"; sourceTree = "SOURCE_ROOT"; };
                07D9756CD40A2257CE645AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; };
                07E22F69D1BD5DBC61EB6B57 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; };
                291605D143708CDD8FB77C6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fixed.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h"; sourceTree = "SOURCE_ROOT"; };
                29255870A697551C8FA98D7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Base64.cpp"; path = "../../../../modules/juce_core/text/juce_Base64.cpp"; sourceTree = "SOURCE_ROOT"; };
                29589E6D348361659DBFB01E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; };
+               298C6806412F4881663FBFE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                29DBE389E1B355F875D78678 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                2AA7FF1FB0D464A4E7B93360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; };
                2AE92F43F180A63B166DE38D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                63CD373EBD8C663E48EAB6B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Javascript.cpp"; path = "../../../../modules/juce_core/javascript/juce_Javascript.cpp"; sourceTree = "SOURCE_ROOT"; };
                63CF54631460F1BF4EA5A49A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcmaster.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcmaster.c"; sourceTree = "SOURCE_ROOT"; };
                63D2D0BAF12BD5F0A74CCCC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; };
+               64145B2DC92763E716E27FD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                642F05C6BA421FDC6725C57F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; };
                642F22B0ADEBA8CC1654EE2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; };
                64487A3372F2CFE88175C49F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
                7E75ED738B0C5B23921807B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; };
                7EB94A8A33CC592A2A77A907 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
                7F06AF9DADA9FA01C5BE542D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdsample.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdsample.c"; sourceTree = "SOURCE_ROOT"; };
+               7F3A7557CFF37C91CAC4E71C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                7F527095A51540B79804CD7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; };
                7F6D98AC02F8582F8923A6EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                7F97E4F4E4BF1A3D66A3B6AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; };
                                        6D88A3624F51E4B8C4386378,
                                        C629913291BE1608B58ABF38,
                                        88964E03F3F86CDCA280D3CC,
+                                       0743372F26489CD53C1BDB91,
                                        442D9B72ECE154D5D4E7C72F,
                                        1010FD77F32B1F7F525FC184,
                                        2F13071B3F288C3AA6842EF2, ); name = "format_types"; sourceTree = "<group>"; };
                                        899BA221B227C1BD5378A636,
                                        B694F3B120FE3A72D2BF95DA,
                                        17F88B6945BC396BBE2196A7,
+                                       298C6806412F4881663FBFE1,
+                                       64145B2DC92763E716E27FD0,
+                                       7F3A7557CFF37C91CAC4E71C,
                                        D835E304C64C3C8EBC3A3115,
                                        9444E056A9A5E4FD10664BA2,
                                        DD424F8EA63B33E90F19A137,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.rawmaterialsoftware.OSCMonitor;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.rawmaterialsoftware.OSCMonitor;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 4e3df73114415d15fccc371490405dd03a1074f3..46c2519b954ae7895536f007f26ccd623187388b 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 5c578f4f84e6716afbc27305616b340468d85c6e..e8144a4ed3e9c3a3f2da14ddc1583707b0ac0ccf 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index b48b2cb966ff8bec6dd7a8219898623cde9b16e6..f98cb9816f7f4991d9b24a6af6a90383275b9ad0 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 74a019412955e5421a1343d6f88e81fdc6798a55..aad8c300a386d37dab89820f35774671daa8b987 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IhmIkj" name="OSCMonitor" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.rawmaterialsoftware.OSCMonitor" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="N9NMMk" name="OSCMonitor">\r
     <GROUP id="{2B92546C-6B49-72D9-ACD0-0F2FCE9AD0D5}" name="Source">\r
       <FILE id="fqVB21" name="OSCLogListBox.h" compile="0" resource="0" file="Source/OSCLogListBox.h"/>\r
index ee6a4fc0e34bbc6cbb7d143757d1af6e0e320944..2c0117832e1f6c7963d482cc20a6c338b55781b3 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := OSCReceiver\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := OSCReceiver\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_osc_be4cee16.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_osc_be4cee16.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking OSCReceiver\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning OSCReceiver\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping OSCReceiver\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_osc.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index d04cf4446db83438578afc35c159ffcdf9fa5e45..30188d403df015c53fc7ec40f74b50992f8bead9 100644 (file)
                933071AE01A499C371BE3B91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; };
                949383C054E70759782F179A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcparam.c"; sourceTree = "SOURCE_ROOT"; };
                94A75685343FBB282A4844C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RuntimePermissions.h"; path = "../../../../modules/juce_core/misc/juce_RuntimePermissions.h"; sourceTree = "SOURCE_ROOT"; };
+               959B30B8082436C8168381DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                96054061FBB98C3E767D4844 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; };
                968B458915CBFDAC547707B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
                96E572E605BD2921A0C56843 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; };
                9F442098CC5C1F10406A0470 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
                9F6452874CE54BE04A310FEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; };
                9F73A3F60DAA10EFFBF931F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
+               9F840DC674D346195ADFB6B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A022F5153117EDD144C535EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; };
                A0F56E204C579B3092C93B94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
                A10BDD742143769FB54E7B04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; };
                F7FF860DC3ACED469A2BFEC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; };
                F8353823A3BAC4B973DCCD1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                F882169438543868B110E088 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Whirlpool.h"; path = "../../../../modules/juce_cryptography/hashing/juce_Whirlpool.h"; sourceTree = "SOURCE_ROOT"; };
+               F8C43D9DF701B2430990181D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                F91E4EDC09685B5D28610183 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; };
                F951A9EACDB1F9CAAF40F669 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; };
                F9DDF5ECEA898480B8C0682B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        89C20801FE087AA45091F8C8,
                                        733CB62BD606962B480FA06C,
                                        48F197EF4B1D7C387C4D4143,
+                                       9F840DC674D346195ADFB6B8,
+                                       959B30B8082436C8168381DD,
+                                       F8C43D9DF701B2430990181D,
                                        EEE5998A58C5A2F3F16446EF,
                                        78244B47E9D27361DD91FF4E,
                                        BADB77F2A3EEB2CC3D92A6FE,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OSCReceiver;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OSCReceiver;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index f2407455c1c3fc645ac383a317538cd4e303206b..449a9d1af4642687caeceaaa0cd0e3bac13d7a06 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index d7b5ab8c929ee80536d56ace589c6682deffe5b3..f940e367036da0bc346da014f60e2f6eabbf5985 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 34db5233ac039c79ff3f948ca90dfcad260cebd3..3157a13a4308be886126fffad2e4e8734e93cc63 100644 (file)
                933071AE01A499C371BE3B91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; };
                949383C054E70759782F179A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcparam.c"; sourceTree = "SOURCE_ROOT"; };
                94A75685343FBB282A4844C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RuntimePermissions.h"; path = "../../../../modules/juce_core/misc/juce_RuntimePermissions.h"; sourceTree = "SOURCE_ROOT"; };
+               959B30B8082436C8168381DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                968B458915CBFDAC547707B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
                96E572E605BD2921A0C56843 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; };
                97920C44ECF8B71BB55E10C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; };
                9F442098CC5C1F10406A0470 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
                9F6452874CE54BE04A310FEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; };
                9F73A3F60DAA10EFFBF931F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
+               9F840DC674D346195ADFB6B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A022F5153117EDD144C535EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; };
                A0F56E204C579B3092C93B94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
                A10BDD742143769FB54E7B04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; };
                F7FF860DC3ACED469A2BFEC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; };
                F8353823A3BAC4B973DCCD1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                F882169438543868B110E088 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Whirlpool.h"; path = "../../../../modules/juce_cryptography/hashing/juce_Whirlpool.h"; sourceTree = "SOURCE_ROOT"; };
+               F8C43D9DF701B2430990181D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                F91E4EDC09685B5D28610183 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; };
                F951A9EACDB1F9CAAF40F669 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; };
                F9DDF5ECEA898480B8C0682B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        89C20801FE087AA45091F8C8,
                                        733CB62BD606962B480FA06C,
                                        48F197EF4B1D7C387C4D4143,
+                                       9F840DC674D346195ADFB6B8,
+                                       959B30B8082436C8168381DD,
+                                       F8C43D9DF701B2430990181D,
                                        EEE5998A58C5A2F3F16446EF,
                                        78244B47E9D27361DD91FF4E,
                                        BADB77F2A3EEB2CC3D92A6FE,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "OSCReceiver";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "OSCReceiver";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index 9d4a6b197ae7c02e46d2613af3740a01d8c4096d..657f49f795fe70c5b07b835d251b4d2a50f4c6a2 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 3f14082dedfe71c0d08adbdd376ca52eef3507f2..89f2df4aeb19b2dbe601c1fc0f2ef33853e140c5 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="pdocPt" name="OSCReceiver" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OSCReceiver" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="Y6Q0O9" name="OSCReceiver">\r
     <GROUP id="{9F303ECD-83DE-CA91-97B4-C083DA897F49}" name="Source">\r
       <FILE id="HHuoMc" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>\r
index 7f0f27a3153419dbcc2c9bf0a3a521e8a305c9eb..1600076d3dfbc42fe9a75b89a2ca8b7d1ccfccb7 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := OSCSender\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := OSCSender\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_osc_be4cee16.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_osc_be4cee16.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking OSCSender\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning OSCSender\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping OSCSender\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_osc.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 13a64eadaa586729fce92a14cc485f6f800c05e0..35676cbc77af72c87d9f3fd567ca851c12659d01 100644 (file)
                1DDFBB0F225E4F95F635052C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; };
                1E02908C9637CF4C22BB58DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
                1EED7017C33745D0E23EFED7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; };
+               1F16C9C8F4AD25DEF565EA39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                1F38F916D630350DD8EC2FA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdct.h"; sourceTree = "SOURCE_ROOT"; };
                1F983F682C7C39739FF66DFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
                204825E69740E61C3BB37472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                B3E0874D711C4A66976E6C4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; };
                B437041269FE1ABCACE8FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; };
                B43D3771C0B8A99592E7F36B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B44295802853FE0B423E7743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                B48FEF193584C4735B8DAEA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
                B4C9EE22A48A894A442FDEF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
                B57A5299F1CC56B74310EEDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngrio.c"; sourceTree = "SOURCE_ROOT"; };
                D7D15CBB82F1C93719CCA56B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
                D800E473B1A6BF368C967B8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; };
                D85E5DDBCC12253BEE6B368D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; };
+               D8A3E2079688A7A7327E819A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                D8E4E84B18C9763EA6691DA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; };
                D9453DCB804821349686056F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
                D9E235F13969D41DE2334965 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; };
                                        BF32CCC7DACE9BFD99273809,
                                        E74939618FF51AB431812853,
                                        6467B818C4A8564579EB95A5,
+                                       D8A3E2079688A7A7327E819A,
+                                       1F16C9C8F4AD25DEF565EA39,
+                                       B44295802853FE0B423E7743,
                                        54D6721139580A36CE2D0A5E,
                                        C87AB2E5D49E6030C4A3AC69,
                                        F7123F50EA511941DE626E79,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OSCSender;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OSCSender;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index b738354bf974a4342301a40442f089cc33dd7337..87160c99724802536aaaf2dc05a96a1e091f9958 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index de062f4509e75070e3b0efe5bac7ed3c8b075ed8..f56b12033c470e40068a9c3a2a3b59b2bc1c3ef0 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 40364ec56d9433e06b7e83bc95d11b481c17d260..2f7cbc624f3e22aa29cdcc85b351873f2855432c 100644 (file)
                1DDFBB0F225E4F95F635052C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; };
                1E02908C9637CF4C22BB58DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
                1EED7017C33745D0E23EFED7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; };
+               1F16C9C8F4AD25DEF565EA39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                1F38F916D630350DD8EC2FA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdct.h"; sourceTree = "SOURCE_ROOT"; };
                1F983F682C7C39739FF66DFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
                204825E69740E61C3BB37472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                B3E0874D711C4A66976E6C4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; };
                B437041269FE1ABCACE8FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; };
                B43D3771C0B8A99592E7F36B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B44295802853FE0B423E7743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                B48FEF193584C4735B8DAEA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
                B4C9EE22A48A894A442FDEF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
                B57A5299F1CC56B74310EEDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngrio.c"; sourceTree = "SOURCE_ROOT"; };
                D7D15CBB82F1C93719CCA56B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
                D800E473B1A6BF368C967B8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; };
                D85E5DDBCC12253BEE6B368D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; };
+               D8A3E2079688A7A7327E819A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                D8E4E84B18C9763EA6691DA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; };
                D9453DCB804821349686056F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
                D9E235F13969D41DE2334965 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; };
                                        BF32CCC7DACE9BFD99273809,
                                        E74939618FF51AB431812853,
                                        6467B818C4A8564579EB95A5,
+                                       D8A3E2079688A7A7327E819A,
+                                       1F16C9C8F4AD25DEF565EA39,
+                                       B44295802853FE0B423E7743,
                                        54D6721139580A36CE2D0A5E,
                                        C87AB2E5D49E6030C4A3AC69,
                                        F7123F50EA511941DE626E79,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "OSCSender";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "OSCSender";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index 0a7d60ab4e1f37f67803b05f625fd744a379ad37..55cb2ee951fadb71a44a4968c1e5029b88919ff2 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 77c8d1551dcc8b012605733ac9105587e34d50bd..b66d1eb174ab856dfa6fa91abb600bb1b5bd9e62 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="rysVAr" name="OSCSender" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OSCSender" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="knnZZJ" name="OSCSender">\r
     <GROUP id="{F2A0007A-4D24-4DD6-DEC8-6428F36CE45D}" name="Source">\r
       <FILE id="ORaBHU" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>\r
index f95e28c654c5734e1abb55c28e126d17f6257b34..16af6bcd62315b607b40a26b7378b7ea47b83519 100644 (file)
@@ -39,6 +39,7 @@
                79F1A1735711D07C259AEF15 = {isa = PBXBuildFile; fileRef = 5A920C68F8B3292144B1BC95; };
                003AAB5BFC9435FA4823BA2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; };
                00A864993620E35F6951A372 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
+               012B5333962F8A00DCDC8EBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                015766ED6CD9D55279FC884A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
                0164AA0AC217A99CDA13191B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "stream_encoder.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c"; sourceTree = "SOURCE_ROOT"; };
                019CD85E295A7290855D0C24 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; };
                1BC364DFD3A975A0CBA0AC61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; };
                1C02F9D8BEBC13937D8D9BAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                1C196D0BC6B08623601273FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
+               1C348581C78AB36C14C3537F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                1C5E7A9B230FE6B962802C53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitwriter.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h"; sourceTree = "SOURCE_ROOT"; };
                1CC05551F14FFC0161D8E12A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; };
                1CEAFFE79A9E1A1E32C2BFD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XMLCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
                6B5BE388D982E05CD2C7BE10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; };
                6B5D185CB49DC6746B357183 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; };
                6BC5C181AD876196213378C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; };
+               6C32663096AA8DFE514E6F70 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                6C3B851F65AB406E5B6CAF7B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                6C4A5B3781D999AFA15F1016 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; };
                6C5F536D935CF788C07424CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                A06B0489395A029A4F04EBF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwtran.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwtran.c"; sourceTree = "SOURCE_ROOT"; };
                A07D0C5C60BE446FD41ADE51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; };
                A08204B26124FCFF92383BF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jutils.c"; sourceTree = "SOURCE_ROOT"; };
+               A11F69B55BAC8E430EEAC691 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1593C95C327810AC73A73F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPENote.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.cpp"; sourceTree = "SOURCE_ROOT"; };
                A19D3050F95BFD17129EA013 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; };
                A1C21D6CF6F456E34A0E7FBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        B7612EA3B34C6AC48079A447,
                                        58C9B8F93CF63036CA33A6C3,
                                        AD0DBF0531130EAD4DF2A8FA,
+                                       6C32663096AA8DFE514E6F70,
                                        8E0D42B79853ED7FC60F931B,
                                        D8F75466ADD0287144087C5B,
                                        794DEE7E5CC51940507F676F, ); name = "format_types"; sourceTree = "<group>"; };
                                        8D330180BEC5572287AB158A,
                                        39CD252C183BBF175E1C0602,
                                        33D5910744D9482DBA614144,
+                                       A11F69B55BAC8E430EEAC691,
+                                       012B5333962F8A00DCDC8EBE,
+                                       1C348581C78AB36C14C3537F,
                                        7D15374142A01E2760AC4818,
                                        D17F209C6915C948F90F1349,
                                        CBF3ED31F58A0874E0E9A64B,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OpenGLAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.OpenGLAppExample;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 9189dd8099e7df56115fbc754dd3dddff99479f8..ab8c56da747d4c1df0449644222b28985fa8edbd 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 7901b688669ebe96c1f356c5abe56c77bcca9883..11ee8fb6b4f30271e4b9afdae3127425ac6a0bb0 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 64f31410fc9b1f6dac38d23d955f6dc51309568d..06b313033191614c8c55fae8a3ce7a50b28863de 100644 (file)
@@ -37,6 +37,7 @@
                79F1A1735711D07C259AEF15 = {isa = PBXBuildFile; fileRef = 5A920C68F8B3292144B1BC95; };
                003AAB5BFC9435FA4823BA2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; };
                00A864993620E35F6951A372 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
+               012B5333962F8A00DCDC8EBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                015766ED6CD9D55279FC884A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
                0164AA0AC217A99CDA13191B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "stream_encoder.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c"; sourceTree = "SOURCE_ROOT"; };
                019CD85E295A7290855D0C24 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; };
                1BC364DFD3A975A0CBA0AC61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; };
                1C02F9D8BEBC13937D8D9BAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                1C196D0BC6B08623601273FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; };
+               1C348581C78AB36C14C3537F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                1C5E7A9B230FE6B962802C53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitwriter.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h"; sourceTree = "SOURCE_ROOT"; };
                1CC05551F14FFC0161D8E12A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; };
                1CEAFFE79A9E1A1E32C2BFD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XMLCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
                6B5BE388D982E05CD2C7BE10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; };
                6B5D185CB49DC6746B357183 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; };
                6BC5C181AD876196213378C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; };
+               6C32663096AA8DFE514E6F70 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                6C3B851F65AB406E5B6CAF7B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                6C4A5B3781D999AFA15F1016 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; };
                6C5F536D935CF788C07424CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                A06B0489395A029A4F04EBF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwtran.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwtran.c"; sourceTree = "SOURCE_ROOT"; };
                A07D0C5C60BE446FD41ADE51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; };
                A08204B26124FCFF92383BF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jutils.c"; sourceTree = "SOURCE_ROOT"; };
+               A11F69B55BAC8E430EEAC691 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                A1593C95C327810AC73A73F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPENote.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.cpp"; sourceTree = "SOURCE_ROOT"; };
                A19D3050F95BFD17129EA013 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; };
                A1C21D6CF6F456E34A0E7FBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        B7612EA3B34C6AC48079A447,
                                        58C9B8F93CF63036CA33A6C3,
                                        AD0DBF0531130EAD4DF2A8FA,
+                                       6C32663096AA8DFE514E6F70,
                                        8E0D42B79853ED7FC60F931B,
                                        D8F75466ADD0287144087C5B,
                                        794DEE7E5CC51940507F676F, ); name = "format_types"; sourceTree = "<group>"; };
                                        8D330180BEC5572287AB158A,
                                        39CD252C183BBF175E1C0602,
                                        33D5910744D9482DBA614144,
+                                       A11F69B55BAC8E430EEAC691,
+                                       012B5333962F8A00DCDC8EBE,
+                                       1C348581C78AB36C14C3537F,
                                        7D15374142A01E2760AC4818,
                                        D17F209C6915C948F90F1349,
                                        CBF3ED31F58A0874E0E9A64B,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "OpenGLAppExample";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "OpenGLAppExample";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index 3b3913824bff7453f7ec5b30dbcfbe955a93ab13..f3f652b8b321dd1ce481cc7e0cc94768b3c950b1 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 2c7024b411e85e242e49c01170ad60cd5ac22ad0..a2f78acd3f7a19de3778da6db6d971a8d64ac709 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="c3KrlE" name="OpenGLAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OpenGLAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="amjEXL" name="OpenGLAppExample">\r
     <GROUP id="{28FE2D12-A88D-07E2-72CF-CD04014CF225}" name="Source">\r
       <GROUP id="{666960E2-D311-806A-1FE7-A27057939840}" name="Resources">\r
index d9198b895f71f64c7e9f9c1137368c2e1613524c..f62126ec1a939def7f3f2039607de8c83ec9e6a1 100644 (file)
@@ -243,7 +243,7 @@ private:
 \r
         static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept\r
         {\r
-            return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String::empty.getCharPointer());\r
+            return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer());\r
         }\r
     };\r
 \r
index cf14b15acaf20e19889e612bab1a24bbaf0900f1..b2c1266b82f10aa746be3820fdc7a90e83d1739b 100644 (file)
@@ -82,6 +82,7 @@
                091FA27535E993FACA7E0FF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; };
                099CB39CA29E1ED5F689C082 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_22.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h"; sourceTree = "SOURCE_ROOT"; };
                09A2BC7290878D59D9991ED3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; };
+               09CF8D79F80BB15318B260CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                09D113F1ACE38E7FF87EC471 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../JuceLibraryCode/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; };
                09E1EB16E6EFFDCDD2B09892 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; };
                0AAE29186ED2AD6A0DACA056 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
                0D603AD75714B7CC474A45D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
                0D9BD2274AA6F9081E60A196 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
                0DA09911CF116E73799CA0B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; };
+               0DBF97D9FD71F7BDCAB7F7A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                0DD021F0FADE79B577913355 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; };
                0E27E32E44CDE4F786209EA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                0E2F963D8586DCC6CC882F04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
                6547E998448E6C4F13D52FA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcprepct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcprepct.c"; sourceTree = "SOURCE_ROOT"; };
                65523E6A2DCC99A71F894157 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h"; sourceTree = "SOURCE_ROOT"; };
                657610365F9F7708FFF7E906 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; };
+               65A4C94B572F41F4D4CFE064 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                65BB11618A9F97EE299B1864 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ordinals.h; path = "../../../../modules/juce_audio_formats/codecs/flac/ordinals.h"; sourceTree = "SOURCE_ROOT"; };
                65BBEFC85BFC6DAC542BFBF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcapistd.c"; sourceTree = "SOURCE_ROOT"; };
                65F3CDA0D0479E6FC42013FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; };
                860AB680399C2884FE9B0D19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; };
                8651D69ED86CAC13B4966053 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; };
                87231784C36FC88B589C2C92 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; };
+               87637051012A0728D4806B6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                87EF76FE467F0E1EF10B3E8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h"; sourceTree = "SOURCE_ROOT"; };
                880FD85A41F02F3748CFCAE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
                882CC37B469E0EEF75975B46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        54420A7FCB25BAEEEB0FEEA0,
                                        B3CD2EAF0DAB67CFA880BF8A,
                                        826E3E424F0A7BDF5FECE7F0,
+                                       09CF8D79F80BB15318B260CC,
                                        237404D7EAAD696962C85B05,
                                        92E9E50DCD5CC8113296C700,
                                        6B5E4C82FF829907B7AAD9E3, ); name = "format_types"; sourceTree = "<group>"; };
                                        DF743B3F7C5D4E39357B2ABD,
                                        A7CFEAB5213E21D1E53E98E2,
                                        EBB0CCB80A0162539892103D,
+                                       87637051012A0728D4806B6F,
+                                       0DBF97D9FD71F7BDCAB7F7A1,
+                                       65A4C94B572F41F4D4CFE064,
                                        CA7A3A2C10738D0ED143E698,
                                        3BEDA5F6F4D05A0A48EB40BC,
                                        9F51A8C806F771FD62CA1D19,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.timurdoumler.PluckedStringsDemo;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.timurdoumler.PluckedStringsDemo;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index be7736b68655bc70ec7c420fe6744454957e114e..7c89ef733095bdaf25c914d576e0451381b21078 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index aa8c0d057f149cda80f4e0c40629a3094282855e..a13c3ea2388dce58b3b2947b0a434dce4fa22ac8 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 9aa2034e721a47e3e7ede85079c2f4463a12a077..5ce3c2cad387bf202b8e34daed425d2e4fd149ca 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 5bf0782e2a810c61af4bf5788dd1ec8e61d1055c..df1252d7b738410962963315e8ca5eaff7f36a43 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="jKHEJM" name="PluckedStringsDemo" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.timurdoumler.PluckedStringsDemo" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="IWdVf7" name="PluckedStringsDemo">\r
     <GROUP id="{8800CD50-6741-8B75-0305-FAF13427EF5D}" name="Source">\r
       <FILE id="Z7hWe1" name="StringSynthesiser.h" compile="0" resource="0"\r
index 18d502e212c7bb56dc3264e4e0d98c7871c4ecbf..aa1eaf261785f68898bf95b5a725c606d606b746 100644 (file)
@@ -9,7 +9,7 @@
               pluginIsMidiEffectPlugin="1" pluginSilenceInIsSilenceOut="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="ArpeggiatorAU"\r
               pluginRTASCategory="" aaxIdentifier="com.ROLI.Arpeggiator" pluginAAXCategory="AAX_EPlugInCategory_Effect"\r
-              jucerVersion="4.2.3" companyName="ROLI Ltd." companyWebsite="www.juce.com"\r
+              jucerVersion="4.2.4" companyName="ROLI Ltd." companyWebsite="www.juce.com"\r
               companyEmail="info@juce.com" buildAUv3="0">\r
   <MAINGROUP id="l0H2am" name="Arpeggiator">\r
     <GROUP id="{E91162B3-479D-3630-4B5F-0E76EE995FB8}" name="Source">\r
index 695b477d403d6b674ff616d57361945315c6b4d8..32cede9219f63afe297d031386c64eb88e785981 100644 (file)
@@ -55,6 +55,7 @@
                009F880F1C927129D79457CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
                00B396B0FE706AA23B729E8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; };
                010F7CC679F518EB97C86552 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; };
+               01A03043BD956D0A30DC5B41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                01A591455BDD1113C23E09F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; };
                01ED8F522ABA76BF0E0D9249 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; };
                02197356D3685DBECD8CA4A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CADebugPrintf.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugPrintf.h"; sourceTree = "SOURCE_ROOT"; };
                2CFC098BABAF6F3A9DFA615A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAVectorUnit.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.cpp"; sourceTree = "SOURCE_ROOT"; };
                2DB885170C23EF6315B01E07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
                2DBEA9C65CE70C0A16C832F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Primes.cpp"; path = "../../../../../modules/juce_cryptography/encryption/juce_Primes.cpp"; sourceTree = "SOURCE_ROOT"; };
-               2DD523352F6EE4FCFCE9A6F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; };
                2DE0D81D1002AACD733312D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUScopeElement.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                2DF4931504468BD9E20AE3E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAMutex.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.cpp"; sourceTree = "SOURCE_ROOT"; };
                2E05B3795F27137B74532DCF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; };
                2E886B4634424C6F38673E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcapimin.c"; sourceTree = "SOURCE_ROOT"; };
                2E94A5BF0507304C7FBE7DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../JuceLibraryCode/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; };
                2EC53AB4DD0E835D9B23844C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; };
+               2F9B863B3208F7FDC2DFB5C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; };
                2FFF28CCC21983E2097F661E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; };
+               3076EC4F52A19CE9017D3F25 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; };
                315792D7850F26654F7F799A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; };
                316054DECCF2C8CA1375419C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h"; sourceTree = "SOURCE_ROOT"; };
                31C6340CFAED51F9297A247B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
-               31EA1DBEF38B6612DCF697ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; };
+               32A851BECAA8CB552DA0C92B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; };
                32AAD6851954F58C57AAF699 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; };
                33FA636BC069C12099595FF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
-               34E23BC027A8B05CC5F418FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
-               34F7EF8094F8E02C29C9851B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
                35A89273665F75DDA18CDC47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                35D50824AD807A721FA1ED0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; };
                3676883386C9710B77E2A882 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; };
                2B44B90F3CEDD45A731586AD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
                2C88000D1FD0FF38CE9A45DC = {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"; };
                2D0FF4338F332D5D2EF467BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; };
+               2DD523352F6EE4FCFCE9A6F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; };
                2F12CFEB1E95BC54E1CD3C7D = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; };
                2F4E8F666770D3FE1819841C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../JuceLibraryCode/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; };
-               2F9B863B3208F7FDC2DFB5C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; };
-               3076EC4F52A19CE9017D3F25 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; };
                30C6744AD7589406A556BB04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../../modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; };
+               31EA1DBEF38B6612DCF697ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; };
                326380A033B511A7D6C908B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; };
-               32A851BECAA8CB552DA0C92B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; };
                333B1B17AC6BBF4E5330BA2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                3393B8D4E413710805AAD1FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; };
                341FDAB807E3998D5B7D7293 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
                3447AC4248751CBF85190EAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
                34A5198B33BE63C226542043 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; };
                34D919EE29BFF65E7B058F7B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; };
+               34E23BC027A8B05CC5F418FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; };
+               34F7EF8094F8E02C29C9851B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
                35BC4E6396C07229A7B57058 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
                364C3095D20CCE47471C4DB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                36B5D78633D30EBA28D70796 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
                425CE8E9D6EE24F5E6D9FCC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                427916B14A13C9592134DE85 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
                42A4B8FE13CEA81021C02892 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctint.c"; sourceTree = "SOURCE_ROOT"; };
+               42B3AF98E940C8680326C0CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                42CC4A0B344E62ED93EC74D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../JuceLibraryCode/juce_events.mm"; sourceTree = "SOURCE_ROOT"; };
                433FE5AD20CFA2F2D6A1E037 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AU/AUResources.r"; sourceTree = "SOURCE_ROOT"; };
                437EBCEEE86D33C4B8E4659F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
                C0EDB3E56321B663CEA2E600 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../../../../modules/juce_audio_formats/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; };
                C10ABAA3BD59DAF94F6E8B19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
                C155AA1B4897630C869644E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; };
+               C17050197ECC3AD239C03654 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                C175608A57B2756CA559759E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; };
                C18684F220FB0814153BE4E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; };
                C18A26D290AB9B1B16DDF330 = {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"; };
                DF6B4903F41F115C8CB35F1F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitmath.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c"; sourceTree = "SOURCE_ROOT"; };
                DF9BC1627F11E58C4E294F04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; };
                DFB11A01A5F93DE884F33906 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; };
+               E00EB77F90408D1540628363 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                E02C32444D0AB4B491EAC31A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; };
                E06C44C9919D6BEA39ADD6DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
                E09104861140563DE73A0329 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; };
                                        984BE3EEB980581B9CF1BD1C,
                                        B4F21FE2C6382633783FF727,
                                        AEC2C3E4D6FD3687B337E2B2,
+                                       01A03043BD956D0A30DC5B41,
                                        9ECB42E31DD6B72D21BC4195,
                                        738D739A17DA063893459D74,
                                        59D1F379F1100BA563ABC14B, ); name = "format_types"; sourceTree = "<group>"; };
                                        4C88E0FDC3F83F0EF487620A,
                                        0724EE0AC211E89A6F7958A8,
                                        CDF60F2C42393AB69C766ACF,
+                                       C17050197ECC3AD239C03654,
+                                       42B3AF98E940C8680326C0CA,
+                                       E00EB77F90408D1540628363,
                                        0E488474E503D822F21E7ED1,
                                        0441B2D9E47EFCD7344DCA87,
                                        D57CBCE41DCFFF4B35AED051,
index f74744c8f6f142dfe827d76bb1f8ff6e918584b8..9cd28d49b1e630101e221dec7285cd4ced90eafa 100644 (file)
       <OutputFile>$(IntDir)\Arpeggiator.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
       <OutputFile>$(IntDir)\Arpeggiator.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 3e8e47ed718aca2d956efee7794f0b5f6519d859..629225c6a8b6cc0d0e05056e4c29b05b9da7a290 100644 (file)
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 84d9132be44aa9cd7a3521ab09bde2a8b0afa04a..264ce4e74926d74edf4eed2b853c094064cc7b8e 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index eeb4672060621cbb27ec5ba2c6e902cfc99459de..38c10cc8c7bf27510576ed16c0b3b9c15a74e3f4 100644 (file)
                167A331857E2C569DCD49503 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; };
                169146CE0C9730602B3D31BD = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.vst; sourceTree = "BUILT_PRODUCTS_DIR"; };
                16AA0774C9C905089427796B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; };
+               1708A4A271D6457F239F1981 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                17F8F5D68492B7AA9085C409 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                183AA5F36A47F440F056FD9A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; };
                18602F0B69EF7D2A12C1BD9A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; };
                45B7DA5829EC535A7358B483 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LagrangeInterpolator.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; };
                45BD34FB3E3E4040E4C8722E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_16.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h"; sourceTree = "SOURCE_ROOT"; };
                45CF9FC46ECEB2B97446A51C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLExtensions.h"; path = "../../../../../modules/juce_opengl/native/juce_OpenGLExtensions.h"; sourceTree = "SOURCE_ROOT"; };
+               460E860FEB29C741E8C15D49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                46ADA128BDAF3D249C4C2ADC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffixed.h; path = "../../../../../modules/juce_core/zip/zlib/inffixed.h"; sourceTree = "SOURCE_ROOT"; };
                46D387910B077A3AA7CB9C92 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; };
                471D92ACB8B31557BCA3B255 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; };
                B6C2B6E81E1DF9E8505A0801 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; };
                B6D1F711C549A6F9A3D94EC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.c"; sourceTree = "SOURCE_ROOT"; };
                B6D7D629C02602FF516F6C9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fixed.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h"; sourceTree = "SOURCE_ROOT"; };
+               B6DB6CCCC6ADB3EF8C91BA2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                B7272F573644C109E13069D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_cryptography.h"; path = "../../../../../modules/juce_cryptography/juce_cryptography.h"; sourceTree = "SOURCE_ROOT"; };
                B74737CDC16DD601904CD554 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
                B751AAE21DEEAB7B91615223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; };
                F3B8EEB02E5588D99021DD10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                F3BFC5ADFAD663890D658894 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                F3FC0F1212CEA1EE597AF0DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; };
+               F4D0076B169A0FEB870639F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                F507AE61AF55B2101383B1E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; };
                F527FEA0852AA21984AD9F47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; };
                F549ECCF4D91FC7A30105297 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; };
                                        3E750A56336FE91FE4190D0B,
                                        CE57E03FD67001AF17AE9348,
                                        115075E87FFDE3A0562DAB11,
+                                       1708A4A271D6457F239F1981,
                                        B480AA30CA4A3E925CD4D7BA,
                                        8BE1CAAB600CECDD6390B937,
                                        8C68CCB04F23709D332A85A3, ); name = "format_types"; sourceTree = "<group>"; };
                                        60C8E3455765A2BECDE78B9D,
                                        A361C360821B1E71E81F7CA8,
                                        ECF93FB75583FDA74259A503,
+                                       B6DB6CCCC6ADB3EF8C91BA2D,
+                                       460E860FEB29C741E8C15D49,
+                                       F4D0076B169A0FEB870639F1,
                                        52665D9607E534FE81707A6C,
                                        8791B975D75392F7B168AB66,
                                        476A4BF63FB8E65B39CDC05F,
index 3169ab027f3ed83cf2329bf9acf916d5c6b1fc23..ad711d51a62804f9b10712c13d4a093b6ddd841c 100644 (file)
       <OutputFile>$(IntDir)\GainPlugIn.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
       <OutputFile>$(IntDir)\GainPlugIn.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index d5c5414b6e79f24d3fd3741b2e6bef58d74fa8c9..1ebbd599603c1f64c588a8dc3a971ea891e6dc09 100644 (file)
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 623d778753649d851074e0570588a503f1be10dd..c104d91d82bd99958167e62b3ba9e61361934d1d 100644 (file)
@@ -8,7 +8,7 @@
               pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"\r
               pluginSilenceInIsSilenceOut="1" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="GainPlugInAU" pluginRTASCategory="" aaxIdentifier="com.ROLI.GainPlugIn"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.4"\r
               pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="sXaVAU" name="GainPlugIn">\r
     <GROUP id="{57500C1B-EA6F-4A79-EE51-1D02CA8A8350}" name="Source">\r
index f35830513da2b2512a0596c1ec010c6578e60666..5443f27110a235daff6f51fb81717508b614793d 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 9693cc3087fdacc3dd3a6204a5a8702241574bae..120b904156af5704c8f83158cadcb5ce107a46aa 100644 (file)
@@ -99,7 +99,12 @@ public:
     void sliderValueChanged (Slider* slider) override\r
     {\r
         if (AudioProcessorParameter* param = getParameterForSlider (slider))\r
-            param->setValueNotifyingHost ((float) slider->getValue());\r
+        {\r
+            if (slider->isMouseButtonDown())\r
+                param->setValueNotifyingHost ((float) slider->getValue());\r
+            else\r
+                param->setValue ((float) slider->getValue());\r
+        }\r
     }\r
 \r
     void sliderDragStarted (Slider* slider) override\r
index 905ef5316f4b59116fe4bcfd31564e0b94335c91..bf58fcb18dce9c61744161398032d871ef81f443 100644 (file)
                2FCF7727E41BF46E362269C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
                2FD06966FAB4136A6DD8D71D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; };
                2FEA20EE9A0CF8F731422AF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; };
+               2FFB8CCA588EF6FC1FC8ACED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                300E1AADBE7B17F677E862B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; };
                306F525D44514608FF8A10F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLAppComponent.h"; path = "../../../../../modules/juce_opengl/utils/juce_OpenGLAppComponent.h"; sourceTree = "SOURCE_ROOT"; };
                307DB099C9A79CBB7B475924 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; };
                8D8D6C4E9A3B9D7ECA7A8B6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../../modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; };
                8DFC4987C78D34B54C43F0F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwutil.c"; sourceTree = "SOURCE_ROOT"; };
                8EB72E0BBFF2C0E0BA3EDA96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; };
+               8F20F683BBA8F2FF5F05E341 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                8F5F65FD0D7B5E2A7029D68C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_22.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h"; sourceTree = "SOURCE_ROOT"; };
                8F6829961A0F50B8265BD9CB = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; };
                8F808F4330D4F791E62FC452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; };
                B398826F11A2F358C52DAA30 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; };
                B3ADCB0036F82A48201E3C26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
                B3C3709B0A46BA11D4EC036E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B46F461B4E60B0A372E22DC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                B48DD9BFC06C1234CE44C42B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; };
                B4967CB32848813A53D167FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; };
                B4A176C11E9F3D31501D175D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; };
                CD111D36AD8E9D73CE9739F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; };
                CD4A4B5DF38D0F6C1B5CA961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                CE1C954808FDA669FEEFDC2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
-               CE756CA0F5505BA8084D5CA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; };
                CF2A59FABE1AEC5251A7C9A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
+               D01619CC43F88EC81883B673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; };
                D5445BE1A8D52195956FD045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                D6889EB5ED8960BD2093A686 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; };
                DA5881053EBA06F96F1D1CF3 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; };
                CD2CEC703F63930859D26DBA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; };
                CD4CB495D75A2ABAA66A2951 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; };
                CDB15D2B8437758B0F7434B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; };
+               CE756CA0F5505BA8084D5CA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; };
                CE7AB9CEBC2AD27B236A69F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; };
                CEA5C634122F13B61BC06B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; };
                CEEC9947F99D7F39C77DE79B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; };
-               D01619CC43F88EC81883B673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; };
                D06DCC799C2F8567B19C2B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; };
                D08EBD01477B270E49ADD283 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwise.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/bitwise.c"; sourceTree = "SOURCE_ROOT"; };
                D18DE409087FFFDCA4187D4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; };
                D3A6E1B603DE41421B936020 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; };
                D44AA51289630AADC5B6790C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; };
                D494EAD9146C1223068494AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; };
+               D4EC0887DABB7D5A7E911549 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                D503329DCE178787E5B2D8C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
                D50539AB3F3030B5B6EE1E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; };
                D5BD3DE485D0F4E7C3BB6A0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; };
                                        60EBEDFDF4A6E7DED70B9185,
                                        AA59E230F960D32E4BF578AF,
                                        676CB38425FD7162414A9EBA,
+                                       8F20F683BBA8F2FF5F05E341,
                                        27B53FF2B2CA458D1BFF27DA,
                                        3F2F67CDD0CE06807A6EE36E,
                                        CD2CEC703F63930859D26DBA, ); name = "format_types"; sourceTree = "<group>"; };
                                        F4B3CEA81F88AEE7F2C0C3C5,
                                        FC42E14EA4604FB4C5548219,
                                        CAF48DE29336FD7E6BA83365,
+                                       D4EC0887DABB7D5A7E911549,
+                                       B46F461B4E60B0A372E22DC5,
+                                       2FFB8CCA588EF6FC1FC8ACED,
                                        ADB8C7586BC0F1A932F5F0BB,
                                        E124A8EDD335F18AEEE14AE1,
                                        2FCF7727E41BF46E362269C4,
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lMultiOutSynth";
                                INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/";
                                LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Debug\"");
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lAAXLibrary -lMultiOutSynth";
                                INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/";
                                LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Release\"");
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lAAXLibrary -lMultiOutSynth";
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.MultiOutSynth;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.MultiOutSynth;
index fbc1e08080bae1787f905a84541598dc6530c78b..65cd4209f37087dac1686b9ef5864c2c89e6d8fd 100644 (file)
       <OutputFile>$(IntDir)\MultiOutSynth.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
       <OutputFile>$(IntDir)\MultiOutSynth.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 71829f4230e12050b0e794ef3ea7ec23b30789d3..45fee19a60d6ac3c67bb9ee0248df58b4d0e5527 100644 (file)
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index f66afbd7acfb535f212221ba7e5c1210c2b31617..cef53be4f7de4aea2169f5fc486e88ac215d2c20 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 987b41fa743953609850ca5447aee12cd84575ba..5701fb6aa104fc7559016a64e9b9701526102a26 100644 (file)
@@ -9,7 +9,7 @@
               pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="MultiOutSynthAU" pluginRTASCategory=""\r
               aaxIdentifier="com.ROLI.MultiOutSynth" pluginAAXCategory="AAX_ePlugInCategory_SWGenerators"\r
-              jucerVersion="4.2.3" companyName="ROLI Ltd." companyWebsite="www.roli.com"\r
+              jucerVersion="4.2.4" companyName="ROLI Ltd." companyWebsite="www.roli.com"\r
               companyEmail="info@juce.com" pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="uGSDhi" name="MultiOutSynth">\r
     <GROUP id="{78464AFF-72EB-5BDD-4FD3-6C8C6CF5DFA3}" name="Source">\r
index 66055274a087e0bf25975ba0f9d784f05b94a169..7f808956edeaa98d9d74aca645760d90d238458e 100644 (file)
                3E9C541A14A9853BF59E72A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                3ED2CBBCD8CD636730F6771F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; };
                3EF69AC6D7A75BCF43A2FE91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; };
+               3F3CDD8265781AA6E58916D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                3FA212821034AFA68D277C94 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "libpng_readme.txt"; path = "../../../../../modules/juce_graphics/image_formats/pnglib/libpng_readme.txt"; sourceTree = "SOURCE_ROOT"; };
                3FC57131CE9EA206DBA5E7B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAStreamBasicDescription.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.h"; sourceTree = "SOURCE_ROOT"; };
                3FCAC060EB649E790C494124 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_core.cpp"; path = "../../../../../modules/juce_core/juce_core.cpp"; sourceTree = "SOURCE_ROOT"; };
                589790462BFA1ACD31F0042E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; };
                589F8F03BB18E494AEBD6101 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; };
                590829FC32E83F6CF32B0458 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               591E0EE3B809F18F79893C71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                59420A818BB57FA17DE533F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; };
                5947287DFB39DB274AFBA860 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h"; sourceTree = "SOURCE_ROOT"; };
                597386A458AC5E4D64C18066 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; };
                5EA2D7D4DD82CE7460EC70ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
                5EBDD3AD7A64FF54EDE0C5AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V1.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp"; sourceTree = "SOURCE_ROOT"; };
                5EF2F091583F20C8CE73F7A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               5EF6018102FB505CDA5E82FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                5F2B1BEE9EB87892E0FD44AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
                5F74A97551ACF53D3B0E8C64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; };
                5FF49741ABB5C8D6C11547BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; };
                BBC9BF6DCD11885CA9E119E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
                BC3AD0B0EAFB9202A4628D87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
                BC4D26F9883D8FE32DEDC298 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; };
+               BC92B8A2B7B3CEFA8B3F541D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                BCC02F39B2F24479D8F6DB50 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST3.plist"; path = "Info-VST3.plist"; sourceTree = "SOURCE_ROOT"; };
                BCCCB0F3D86B3F05A2FDC6BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; };
                BD1941870623E3B285EA0C3D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MissingGLDefinitions.h"; path = "../../../../../modules/juce_opengl/native/juce_MissingGLDefinitions.h"; sourceTree = "SOURCE_ROOT"; };
                                        15D9387120B61E7C407F2C76,
                                        05085296947E594C821B4B99,
                                        E59436CDDCF0D85D9D70069D,
+                                       3F3CDD8265781AA6E58916D5,
                                        FF8FFE608168896DE86209DD,
                                        380147C3BE63B15FFA951023,
                                        899CCE2491A041C70D8B77C7, ); name = "format_types"; sourceTree = "<group>"; };
                                        B7A9F5BE275B027C0B0C40C3,
                                        30B076BD20CDD8F27B6604CB,
                                        4B3AE7D751B71B85831E94D7,
+                                       591E0EE3B809F18F79893C71,
+                                       BC92B8A2B7B3CEFA8B3F541D,
+                                       5EF6018102FB505CDA5E82FE,
                                        626706DB11D4536E1FFD2239,
                                        590829FC32E83F6CF32B0458,
                                        226AECA874A1905BE3AF8359,
index 2205dff4ecbc47a86684a41c72b6d8462a0f644d..a370a4ef8c724e029ca7e0f487a38a5ca92651d6 100644 (file)
       <OutputFile>$(IntDir)\NoiseGate.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
       <OutputFile>$(IntDir)\NoiseGate.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\Win32&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 8621d761c3ff5065d6bb86f980be7f467bcaf641..25c27df72a514c9fdc57dc502516933ca3d07124 100644 (file)
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 4cefb869f8c0422c7975c3b5dbbfdd5b8b4ad6d4..87b20d2623564993e7d614fce44454a4c77aa4a7 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index ef3653ceaf9f49269f1a222c7af47303681328d4..e11dcadd25dc43ec22d30ef26038fb322a21fe6f 100644 (file)
@@ -8,7 +8,7 @@
               pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"\r
               pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="NoiseGateAU" pluginRTASCategory="" aaxIdentifier="com.roli.NoiseGate"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.4"\r
               pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="FVYuyg" name="NoiseGate">\r
     <GROUP id="{6EB662B0-ED81-2504-8B90-DCBFA5675DFC}" name="Source">\r
index f3d05d2d5bc715f5114237c0862b5d2837239eeb..43974e5496f29f8673af8ecba78a9f612ee29c12 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := Surround.so\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := Surround.so\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/SurroundProcessor_c7ed9c55.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \\r
-  $(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/SurroundProcessor_c7ed9c55.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \\r
+  $(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking Surround\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning Surround\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping Surround\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/SurroundProcessor_c7ed9c55.o: ../../Source/SurroundProcessor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/SurroundProcessor_c7ed9c55.o: ../../Source/SurroundProcessor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling SurroundProcessor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_plugin_client_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_plugin_client_VST2.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 3a84dead66f3ca6cec2784cf5dfaaacbc9727f9c..0a27b4fd62bd61be1231373b6271d46c57d7bb75 100644 (file)
                298205CEB528B1048E7572B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                29CDCCC7FB95D6C13A9CD0C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; };
                29ED8FCBD8C2266ADEB20562 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_2.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AU_2.mm"; sourceTree = "SOURCE_ROOT"; };
+               2A5DBFDAAA4270D64B38E5F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                2B3FB20F8237DB0C8618F18D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; };
                2B666A8D2E1E9F81D5139566 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MD5.cpp"; path = "../../../../../modules/juce_cryptography/hashing/juce_MD5.cpp"; sourceTree = "SOURCE_ROOT"; };
                2B71D20D7270815E421D2F9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; };
                412F2AF92D2B1087AC0FB2E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcparam.c"; sourceTree = "SOURCE_ROOT"; };
                416D78C0452B796EABB0E320 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; };
                41746FC663B6AAAADECE1425 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               418A9016C2A8196E6EC8D652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                41929CC1698D3B82A3898EA5 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "changes to libjpeg for JUCE.txt"; path = "../../../../../modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt"; sourceTree = "SOURCE_ROOT"; };
                41A64D81E976A07DB6741318 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; };
                41FF3F669144D70DC5279453 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcprepct.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcprepct.c"; sourceTree = "SOURCE_ROOT"; };
                831D6FCD81612A1649B0CF08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; };
                832774543B7277913460C41E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAutoDisposer.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h"; sourceTree = "SOURCE_ROOT"; };
                83E2EFC9133757FD09C67ABE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; };
+               84339DDD6E22F3870FA464D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                84361AF1AD46751899D33C5D = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; };
                854BE217C612C256BED72308 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
                857D93C46EF5F30B686666FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jctrans.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jctrans.c"; sourceTree = "SOURCE_ROOT"; };
                863578C8C35502444456B6EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; };
                86382EEFD2D874C080F395EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../JuceLibraryCode/juce_video.mm"; sourceTree = "SOURCE_ROOT"; };
                86422EC835DBE9E12ACAA844 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; };
-               86C60AB46BC50B750493C0C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
-               878E3A6EA611E5474CCCF740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
+               870B95887E00B482EC3BCBC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
                87CBFFF0A410C24D08C77B9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; };
                884753558BC1F3FA3CD36289 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; };
                889215816EC0BE292B4FC278 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                80EFB73C0DD18C003A15150B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; };
                83C89E3C13A5897E5A1A062E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEMessages.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEMessages.h"; sourceTree = "SOURCE_ROOT"; };
                85FAAFC7204659F3B375631F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; };
-               870B95887E00B482EC3BCBC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
+               86C60AB46BC50B750493C0C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
+               878E3A6EA611E5474CCCF740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; };
                8884CB197E61E62731D1A4B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; };
                89BE99C79A12FAA559AB0958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                8A0648AE319C0CEA55D7AD88 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; };
                E8B7C9D914F19F473EA46B12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; };
                E9146BA7D2CFDD5DE8C1A4EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZone.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZone.h"; sourceTree = "SOURCE_ROOT"; };
                E926027E5704282DD6F4AFEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = floor1.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c"; sourceTree = "SOURCE_ROOT"; };
+               E9501FE4D42D2C7F6A97EAA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                E953B89607509135D337044D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = analysis.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c"; sourceTree = "SOURCE_ROOT"; };
                E9826AAFDC691D5BDB7E7F53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                E9D99C7B57FBA78B15C7B7C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; };
                                        8B61BBC7490B7EB09164C24E,
                                        C3DA1C57A25DCB12F2DF99AB,
                                        97486545E0DEF7983FD5CA4A,
+                                       84339DDD6E22F3870FA464D5,
                                        0865F1C307283AE02E351740,
                                        6EA1D72172113F26FB6B928E,
                                        9BA022320B40176B7D34174A, ); name = "format_types"; sourceTree = "<group>"; };
                                        35FFFC72EB6015F79E23D471,
                                        625DB3E333234BCF2DC1352A,
                                        C34797F37266DB39D227210D,
+                                       E9501FE4D42D2C7F6A97EAA0,
+                                       2A5DBFDAAA4270D64B38E5F8,
+                                       418A9016C2A8196E6EC8D652,
                                        B3ECDD29979ACEC5B31C54BF,
                                        E44F53D99BB88A6D31DC5B66,
                                        22A3F345BE74DB54722E6246,
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lSurround";
                                INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/";
                                LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Debug\"");
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lAAXLibrary -lSurround";
                                INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/";
                                LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Release\"");
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                OTHER_LDFLAGS = "-bundle -lAAXLibrary -lSurround";
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.Surround;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion";
                                PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.Surround;
index c143d079d7db157e98de554bd7acbba6ec1392e2..db611ce1f6957ae77bf3f21cec6d43e6c875bd35 100644 (file)
       <OutputFile>$(IntDir)\Surround.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
       <OutputFile>$(IntDir)\Surround.bsc</OutputFile>\r
     </Bscmake>\r
     <PostBuildEvent>\r
-      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;</Command>\r
+      <Command>copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).vst3&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents&quot;\r
+mkdir &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64&quot;\r
+copy /Y &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64\$(TargetName).aaxplugin&quot;\r
+c:\SDKs\AAX\Utilities\CreatePackage.bat &quot;$(OutDir)\$(TargetName).aaxplugin\Contents\x64&quot; &quot;c:\SDKs\AAX\Utilities\PlugIn.ico&quot;</Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index d05b2cecea8890f4a1171c2cc82afdf825a7e327..7e31411e3ba261e53641fce9fe2bda7bd693a378 100644 (file)
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index ebad7119373b7234a6129f892a370f0b3ae826ab..ade5f97b97043b9d943d58d306c2afeef4dea837 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index af8e3fc1b8a646676e867f8c47b801d701574eb8..23871c0710f998b930fa6b064de94afeea8cacd0 100644 (file)
@@ -92,8 +92,8 @@ public:
 private:\r
     String getLayoutName() const\r
     {\r
-        if (AudioProcessor* processor = getAudioProcessor())\r
-            return processor->busArrangement.outputBuses.getReference (0).channels.getDescription();\r
+        if (AudioProcessor* p = getAudioProcessor())\r
+            return p->busArrangement.outputBuses.getReference (0).channels.getDescription();\r
 \r
         return "Unknown";\r
     }\r
index dda41901060e23b4e4245ff46b4c902206a26e45..60a07579968301c4491fe3029bf83683255dbf00 100644 (file)
@@ -109,7 +109,6 @@ public:
     const String getName() const override               { return "Surround PlugIn"; }\r
     bool acceptsMidi() const override                   { return false; }\r
     bool producesMidi() const override                  { return false; }\r
-    bool silenceInProducesSilenceOut() const override   { return true; }\r
     double getTailLengthSeconds() const override        { return 0; }\r
 \r
     //==============================================================================\r
index 8c5852ce95643613c393171460f159ccd28ec5e1..d87a65c2bd2583e5e7b10dd2ff206628a5758e2a 100644 (file)
@@ -9,7 +9,7 @@
               pluginIsMidiEffectPlugin="0" pluginSilenceInIsSilenceOut="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="SurroundAU"\r
               pluginRTASCategory="" aaxIdentifier="com.ROLI.Surround" pluginAAXCategory="AAX_ePlugInCategory_Dynamics"\r
-              jucerVersion="4.2.3" buildAUv3="0">\r
+              jucerVersion="4.2.4" buildAUv3="0">\r
   <MAINGROUP id="dEAH7t" name="Surround">\r
     <GROUP id="{1CB41212-BD0E-AC71-15E8-C40AD59BD2EE}" name="Source">\r
       <FILE id="sLk2ic" name="SurroundProcessor.cpp" compile="1" resource="0"\r
index 49402afa4e7776c68b6cd3cefd64edf13fbcb7d2..58da79d847b06d82bef1e8f98dccaf17af5266fc 100644 (file)
                2DCE8865F812F11BFE50B518 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
                2DD3B8CC10CDFA57C4BBE959 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; };
                2E2137ACDED8F7FDA402AFE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; };
+               2E52CEE653E4B3BCCFA261C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                2E96F44C68311A1EB839275A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; };
                2EE66D27896775F0F1395C55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                2F6E53E6746610E44FA47EF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../../modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; };
                7BB91094F378EBD92A6B33E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                7BEA6729CA4E2FBF16CA8FAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; };
                7BEA6A8588384F48F8174455 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; };
+               7C0FE9A770AE17EB86105E79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                7C48CCF9E4A6441E4ECA086B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; };
                7C9B9B7D98173CF92521CD90 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
                7CA385641AE9AAACA3AF4785 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
                9E7307F339FCE45305069039 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; };
                9E89D9AFB083F08BAE9E1BDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                9F13FED7A58E73C196A8DA35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "codec_internal.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h"; sourceTree = "SOURCE_ROOT"; };
+               9F771CD14B117446FB2BF9E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                9FC7AF41406FF52C02227F0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsMediaAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
                A03711E4C934AC0C97ED2CC7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; };
                A072D286681A3B8E148C34E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; };
                FA02B4707CCF843EB45C40EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; };
                FA7F7EEFA3508900448C659C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
                FB0ED32BF7C5FD14B5B33711 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; };
+               FB8A0B12249D1B586E0DE190 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                FB8DEDDB025CD1B3599DBFDA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "stream_decoder.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c"; sourceTree = "SOURCE_ROOT"; };
                FBF8014D8811B9B5AAC175E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
                FC0F6A6E9D190A0C51C88471 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; };
                                        B7AE0149FF49C6EE294D03EE,
                                        47DF39DDF6085A33F2282CF1,
                                        E8D30B5E295B1C331EA24873,
+                                       9F771CD14B117446FB2BF9E9,
                                        4940BC726C0DA4D4F4EB403C,
                                        8FE177F5571307A339832F6E,
                                        97346F3788D1AAC32D47D4D4, ); name = "format_types"; sourceTree = "<group>"; };
                                        C08BE05BAF052D2C26B0A4F5,
                                        75DA1BE4F0FB5A3879B05847,
                                        73496E7F458E957E4BE0D388,
+                                       FB8A0B12249D1B586E0DE190,
+                                       7C0FE9A770AE17EB86105E79,
+                                       2E52CEE653E4B3BCCFA261C7,
                                        56B09AC75A152B6AE8C18DB8,
                                        230582C40A7D03F6691C7612,
                                        0351B5860D662C1B46594126,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.SimpleFFTExample;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.SimpleFFTExample;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 7ee34a248916a4bfd23cc32528f227777b4f949a..bdc47035fde58568cffeacdfceb8e680b51bb55d 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index d727467f0b6170b92cffde7f4ac1adaf9dafa39c..26eead2037e9399f070b014bc21b263c908852fc 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 8becdc58233fa5e6d5ab458356460d2b7c49bfc5..e8e45017eddffbb329ea662657d510a7a81b218d 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 18d927fd4a257a94fcdda7082d3c9fcf8dbd7e33..e7b40bb46b68c592dbb8c88845a15ec2808d68b3 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="cgcxPd" name="SimpleFFTExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.SimpleFFTExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3">\r
+              jucerVersion="4.2.4">\r
   <MAINGROUP id="rZCHr8" name="SimpleFFTExample">\r
     <GROUP id="{8DC23B3F-98AC-AB1C-B26A-E693AF2DF0D2}" name="Source">\r
       <FILE id="B1L62H" name="SpectrogramComponent.h" compile="0" resource="0"\r
index fa163ac65772351f551499c992e5cf147188fe03..6096e87a8d1431e5507d7546c3d9045653f4beed 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := JuceDemoPlugin.so\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -fPIC -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := JuceDemoPlugin.so\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/PluginEditor_94d4fb09.o \\r
-  $(OBJDIR)/PluginProcessor_a059e380.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \\r
-  $(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/PluginEditor_94d4fb09.o \\r
+  $(JUCE_OBJDIR)/PluginProcessor_a059e380.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \\r
+  $(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking JuceDemoPlugin\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning JuceDemoPlugin\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping JuceDemoPlugin\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling PluginEditor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling PluginProcessor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_plugin_client_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_plugin_client_VST2.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 09ea0decdba8669ebf5b859bea3887925831926c..04d2b56b5455e095ea6cc79382affc8814993617 100644 (file)
                35AFE1E124E99572CBA1F46D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; };
                35F57A1FB7A15A5374251F97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; };
                366D4ADE01A2B4B6E0047A34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "lpc_flac.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c"; sourceTree = "SOURCE_ROOT"; };
+               36793CB90360BAF15C6C94D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                36CB6C4D85EFD5015D667E96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEInstrument.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp"; sourceTree = "SOURCE_ROOT"; };
                36EDB9DCF2D5260319028905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; };
                371CABFCE28A273E9150F537 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; };
                704A1428992F4CA4A606E2B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
                705AC662E310AC822FDEA734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
                70833A7D4499DDCFA183E14B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctred.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctred.c"; sourceTree = "SOURCE_ROOT"; };
+               70964D7E4EC5D988A2B2E460 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                709C82A5435B2B3933ED5343 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; };
                70BA280499987A1D14FCB1A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; };
                70D113696646BD43B4D0C3A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; };
                A31CE7177BF947DB60F72D94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                A3F95510DCE3352156FE67E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; };
                A3FF50EFE17D8634A9A0A6EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; };
+               A4DAEB5C0621C1C04EA93AEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                A52038A2E61AB03CF55A3B0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; };
                A5479787577EB56F20ECF48F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAReferenceCounted.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAReferenceCounted.h"; sourceTree = "SOURCE_ROOT"; };
                A59A08DCC76EE0FC7EBE1203 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
                EECBEDF7C26CF9597CC601D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
                EED2AEDB27E7562C4DCFA637 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; };
                EFD8E22899758751230A8590 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
+               F00B6472C8811E341D954036 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                F04CF5D4410243EF3DEDBEB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; };
                F0DC1A84185952857B3DCAE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LagrangeInterpolator.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; };
                F0E927F230180C28CFB91C99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = misc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h"; sourceTree = "SOURCE_ROOT"; };
                                        6A72E46DBDCFAD6F7039E739,
                                        F6AE333028FC864D4653A7B5,
                                        070E3EFE91BE8407EE1EBD8C,
+                                       A4DAEB5C0621C1C04EA93AEC,
                                        A9C466FBA4FCF6484BCF86A2,
                                        6501BB1AAFD5B3DC4A783F85,
                                        CC04A3CE3003C0A0AB35A7AF, ); name = "format_types"; sourceTree = "<group>"; };
                                        D18B1676A7BB2890B81717FD,
                                        D7FE483198CE40495DE72435,
                                        5647736926AE116B8C392630,
+                                       70964D7E4EC5D988A2B2E460,
+                                       F00B6472C8811E341D954036,
+                                       36793CB90360BAF15C6C94D3,
                                        4AB9AA07703E3BAE99B586C3,
                                        6A3C840E1B6CD34CA8C8DB4B,
                                        C859B01B55EAB67BC10ED803,
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                INFOPLIST_FILE = Info-VST.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                INFOPLIST_FILE = Info-VST3.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                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\"";
                                INFOPLIST_FILE = Info-AU.plist;
                                INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
                                LIBRARY_STYLE = Bundle;
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                OTHER_LDFLAGS = "-bundle -lJuceDemoPlugin";
                                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\"";
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "@executable_path/../Frameworks";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.JuceDemoPlugin;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 734d9f99afd7037a7a11b9dbeecf7ffe38f116a0..5de4fcd3b301f0d73d3dce7b0b44957042bd5ad0 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 0c2e50c0ee5f4f82e7c327d489053807ba4e349b..743e1474fe27ba3cf7d04233af01bb7f35eed4bd 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index a2dce7b745fea1f3ff5d60749cb5bb411a975b0f..a2237d6e7a316ae5ea334a1c1752053151fc2dde 100644 (file)
@@ -8,7 +8,7 @@
               pluginWantsMidiIn="1" pluginProducesMidiOut="1" pluginSilenceInIsSilenceOut="0"\r
               pluginTailLength="0" pluginEditorRequiresKeys="1" pluginAUExportPrefix="JuceDemoProjectAU"\r
               pluginAUViewClass="JuceDemoProjectAU_V1" pluginRTASCategory=""\r
-              bundleIdentifier="com.juce.JuceDemoPlugin" jucerVersion="4.2.3"\r
+              bundleIdentifier="com.juce.JuceDemoPlugin" jucerVersion="4.2.4"\r
               companyName="ROLI Ltd." aaxIdentifier="com.yourcompany.JuceDemoPlugin"\r
               buildAAX="0" pluginAAXCategory="AAX_ePlugInCategory_Dynamics"\r
               includeBinaryInAppConfig="1" buildVST3="1" pluginManufacturerEmail="support@yourcompany.com"\r
index 08cf3a60792a8950f7306f5816904249ecc58f51..77267349b395b23efe98afcf6c6a8ebea6080dc9 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 463a603b7856a8090dbadc273bd6b244be024d5a..8639737b6431a8a65db79419c7fb20ed6b50d1e9 100644 (file)
@@ -28,7 +28,10 @@ public:
 \r
     void valueChanged() override\r
     {\r
-        param.setValueNotifyingHost ((float) Slider::getValue());\r
+        if (isMouseButtonDown())\r
+            param.setValueNotifyingHost ((float) Slider::getValue());\r
+        else\r
+            param.setValue ((float) Slider::getValue());\r
     }\r
 \r
     void timerCallback() override       { updateSliderPos(); }\r
@@ -56,9 +59,9 @@ public:
 JuceDemoPluginAudioProcessorEditor::JuceDemoPluginAudioProcessorEditor (JuceDemoPluginAudioProcessor& owner)\r
     : AudioProcessorEditor (owner),\r
       midiKeyboard (owner.keyboardState, MidiKeyboardComponent::horizontalKeyboard),\r
-      timecodeDisplayLabel (String::empty),\r
-      gainLabel (String::empty, "Throughput level:"),\r
-      delayLabel (String::empty, "Delay:")\r
+      timecodeDisplayLabel (String()),\r
+      gainLabel (String(), "Throughput level:"),\r
+      delayLabel (String(), "Delay:")\r
 {\r
     // add some sliders..\r
     addAndMakeVisible (gainSlider = new ParameterSlider (*owner.gainParam));\r
index 4a4bc315a332e9f4905335c5f47e34607556ecde..3e9030c6cfec15119bb4238c2befee5a82bf6b6b 100644 (file)
@@ -56,10 +56,10 @@ public:
     double getTailLengthSeconds() const override                                { return 0.0; }\r
 \r
     //==============================================================================\r
-    int getNumPrograms() override                                               { return 1; }\r
+    int getNumPrograms() override                                               { return 0; }\r
     int getCurrentProgram() override                                            { return 0; }\r
     void setCurrentProgram (int /*index*/) override                             {}\r
-    const String getProgramName (int /*index*/) override                        { return "Default"; }\r
+    const String getProgramName (int /*index*/) override                        { return String(); }\r
     void changeProgramName (int /*index*/, const String& /*name*/) override     {}\r
 \r
     //==============================================================================\r
index 2257e6f5579dfef19f63106fbb3ade13cee86583..baf2d4a0530da06107ed6f071387fd69146f3e01 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := Plugin\ Host\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := Plugin\ Host\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/FilterGraph_62e9c017.o \\r
-  $(OBJDIR)/GraphEditorPanel_3dbd4872.o \\r
-  $(OBJDIR)/HostStartup_5ce96f96.o \\r
-  $(OBJDIR)/InternalFilters_beb54bdf.o \\r
-  $(OBJDIR)/MainHostWindow_e920295a.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/FilterGraph_62e9c017.o \\r
+  $(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o \\r
+  $(JUCE_OBJDIR)/HostStartup_5ce96f96.o \\r
+  $(JUCE_OBJDIR)/InternalFilters_beb54bdf.o \\r
+  $(JUCE_OBJDIR)/MainHostWindow_e920295a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking Plugin Host\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning Plugin Host\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping Plugin Host\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/FilterGraph_62e9c017.o: ../../Source/FilterGraph.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/FilterGraph_62e9c017.o: ../../Source/FilterGraph.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling FilterGraph.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/GraphEditorPanel_3dbd4872.o: ../../Source/GraphEditorPanel.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o: ../../Source/GraphEditorPanel.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling GraphEditorPanel.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/HostStartup_5ce96f96.o: ../../Source/HostStartup.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/HostStartup_5ce96f96.o: ../../Source/HostStartup.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling HostStartup.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/InternalFilters_beb54bdf.o: ../../Source/InternalFilters.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/InternalFilters_beb54bdf.o: ../../Source/InternalFilters.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling InternalFilters.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/MainHostWindow_e920295a.o: ../../Source/MainHostWindow.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/MainHostWindow_e920295a.o: ../../Source/MainHostWindow.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling MainHostWindow.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 1a1f551525cdc7b020514fd786b87deb7b003224..08ccc36934079b35c83acea9cd6d3466031d127f 100644 (file)
@@ -71,6 +71,7 @@
                05B20BD978297F87BD60E6EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; };
                05F4EC3408F31D59EF961555 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LagrangeInterpolator.h"; path = "../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h"; sourceTree = "SOURCE_ROOT"; };
                0647115F688F4B35C22C0A56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+               069AD628740BD9731986CDFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                06C1447B9CBC6813BB7BEA53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; };
                06EB1158FAA7044D25A1B836 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; };
                072056D37C68FC94B080506C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; };
                5C24DE268797C1C7AC932837 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; };
                5CAD4033015519DB9995E82C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; };
                5CD825D3FEC4CA9FEE05D4D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; };
+               5D4FF9B8DDE175EF5807AA2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                5D6AF55EDB77231E95C23086 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; };
                5DF1460C31CD1BF8FADF56D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; };
                5E0882CA277CB65EBD9292BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; };
                BFC98B56313D64177AE6B385 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; };
                BFCA358DEECC78ABB7B6E8A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
                BFE7688FBFC63D7180BC9D6A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; };
+               C01972C590DF60155C0DEB02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                C0866AEADD1BEEDB904EE8A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; };
                C08CEA80C09A398668B42CF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; };
                C0EAB8DB78CC1330EBFB1BB4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
                D5952905FC386C19D0818398 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
                D5C074653417ED69A2B570AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; };
                D5CCBF553F4EDCB7D7063619 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = backends.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h"; sourceTree = "SOURCE_ROOT"; };
+               D6D2E69C959FC3BD17220770 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                D6F2511A04A72954F91F6761 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitrate.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c"; sourceTree = "SOURCE_ROOT"; };
                D7433453EBB3700D2805FF42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; };
                D773325946ED4F2F2A1285A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jfdctfst.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jfdctfst.c"; sourceTree = "SOURCE_ROOT"; };
                                        D99B064D47C6B0FDDBC66B02,
                                        ACE3FF969AC408A50E9A6A4C,
                                        B1CA1F3AE7555C4FB4CE52D2,
+                                       069AD628740BD9731986CDFC,
                                        10EE0138720A51EBAD46FFCC,
                                        A53F1F6AAA9F18823C239E6C,
                                        C270737E2B85C6D98E145525, ); name = "format_types"; sourceTree = "<group>"; };
                                        6493E8C53EE6361EEA57D243,
                                        96E7B79CFB1B3EC9EC2505CD,
                                        5B6A592439B2BEA9C6B14720,
+                                       D6D2E69C959FC3BD17220770,
+                                       C01972C590DF60155C0DEB02,
+                                       5D4FF9B8DDE175EF5807AA2F,
                                        E218E66CE4F1DDA0B9BED814,
                                        559A2F8A7A121471D8026D81,
                                        F3FCF5C0D92A2991A513B0D3,
                                HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.roli.pluginhost;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
index d8c546c8f5429ae0d869187ca39673e93f48145f..213946f638dc6bdb391a2da0f0af79e34f2c2a74 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index dee059ddb87ed32805a14ffb4cee446474f86d5c..2cbb0cb3e02bb0eda110062c0463b83cf4b1333f 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 2ae74a68ca968b2b3f1bd20a582ef68eecbff3f3..8b8b85c96ce02743bb08d5c69ad97a8ff2be708b 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 525682c172ea39a09bdb64342dc502b74d83dbf3..aefc8b1968e462e794b14e6c022791d009ed3fc6 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 9bf9d7fc25ae9688b34e4fdb52c20defd843263d..5d19191e87fcd056e56a26ff574c260bf9fa132b 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 174835e6bda25c795c536d9641be834545acce5b..53c77fbbf25feeec422f50b93e8b1cdc2c85ef78 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 4800c39b5215885b68d2cfafdd21dbe5045129e2..5a6a6e8e2d57585b1651d061fdb7e8b6137857c2 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index c30688234118bc416093bcfdbb86dbecfef91f37..be48a6b9ca2e0bbd54f0b739a6fc60e712bc6838 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="NTe0XB0ij" name="Plugin Host" projectType="guiapp" version="1.0.0"\r
               juceFolder="../../../juce" vstFolderMac="~/SDKs/vstsdk2.4" vstFolderPC="c:\SDKs\vstsdk2.4"\r
-              bundleIdentifier="com.roli.pluginhost" jucerVersion="4.2.3" companyName="ROLI Ltd."\r
+              bundleIdentifier="com.roli.pluginhost" jucerVersion="4.2.4" companyName="ROLI Ltd."\r
               includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="" rtasFolder="~/SDKs/PT_80_SDK"\r
index b79c2ad400ee1dc443de32f839bfa48850a3cf60..6c5f058b1aee4e6bc140b3d363ed4121837bc46e 100644 (file)
@@ -256,7 +256,7 @@ Result FilterGraph::saveDocument (const File& file)
 {\r
     ScopedPointer<XmlElement> xml (createXml());\r
 \r
-    if (! xml->writeToFile (file, String::empty))\r
+    if (! xml->writeToFile (file, String()))\r
         return Result::fail ("Couldn't write to the file");\r
 \r
     return Result::ok();\r
index 1824551fe512ca78e03d3e65c9f473a3f5cbbaf7..7394488768783a27f41065c7e7224ba54e3657f3 100644 (file)
@@ -969,7 +969,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e)
 \r
     if (draggingConnector != nullptr)\r
     {\r
-        draggingConnector->setTooltip (String::empty);\r
+        draggingConnector->setTooltip (String());\r
 \r
         int x = e2.x;\r
         int y = e2.y;\r
@@ -1013,7 +1013,7 @@ void GraphEditorPanel::endDraggingConnector (const MouseEvent& e)
     if (draggingConnector == nullptr)\r
         return;\r
 \r
-    draggingConnector->setTooltip (String::empty);\r
+    draggingConnector->setTooltip (String());\r
 \r
     const MouseEvent e2 (e.getEventRelativeTo (this));\r
 \r
@@ -1091,14 +1091,14 @@ private:
 //==============================================================================\r
 GraphDocumentComponent::GraphDocumentComponent (AudioPluginFormatManager& formatManager,\r
                                                 AudioDeviceManager* deviceManager_)\r
-    : graph (formatManager), deviceManager (deviceManager_),\r
+    : graph (new FilterGraph (formatManager)), deviceManager (deviceManager_),\r
       graphPlayer (getAppProperties().getUserSettings()->getBoolValue ("doublePrecisionProcessing", false))\r
 {\r
-    addAndMakeVisible (graphPanel = new GraphEditorPanel (graph));\r
+    addAndMakeVisible (graphPanel = new GraphEditorPanel (*graph));\r
 \r
     deviceManager->addChangeListener (graphPanel);\r
 \r
-    graphPlayer.setProcessor (&graph.getGraph());\r
+    graphPlayer.setProcessor (&graph->getGraph());\r
 \r
     keyState.addListener (&graphPlayer.getMidiMessageCollector());\r
 \r
@@ -1108,23 +1108,16 @@ GraphDocumentComponent::GraphDocumentComponent (AudioPluginFormatManager& format
     addAndMakeVisible (statusBar = new TooltipBar());\r
 \r
     deviceManager->addAudioCallback (&graphPlayer);\r
-    deviceManager->addMidiInputCallback (String::empty, &graphPlayer.getMidiMessageCollector());\r
+    deviceManager->addMidiInputCallback (String(), &graphPlayer.getMidiMessageCollector());\r
 \r
     graphPanel->updateComponents();\r
 }\r
 \r
 GraphDocumentComponent::~GraphDocumentComponent()\r
 {\r
-    deviceManager->removeAudioCallback (&graphPlayer);\r
-    deviceManager->removeMidiInputCallback (String::empty, &graphPlayer.getMidiMessageCollector());\r
-    deviceManager->removeChangeListener (graphPanel);\r
+    releaseGraph();\r
 \r
-    deleteAllChildren();\r
-\r
-    graphPlayer.setProcessor (nullptr);\r
     keyState.removeListener (&graphPlayer.getMidiMessageCollector());\r
-\r
-    graph.clear();\r
 }\r
 \r
 void GraphDocumentComponent::resized()\r
@@ -1141,3 +1134,20 @@ void GraphDocumentComponent::createNewPlugin (const PluginDescription* desc, int
 {\r
     graphPanel->createNewPlugin (desc, x, y);\r
 }\r
+\r
+void GraphDocumentComponent::unfocusKeyboardComponent()\r
+{\r
+    keyboardComp->unfocusAllComponents();\r
+}\r
+\r
+void GraphDocumentComponent::releaseGraph()\r
+{\r
+    deviceManager->removeAudioCallback (&graphPlayer);\r
+    deviceManager->removeMidiInputCallback (String(), &graphPlayer.getMidiMessageCollector());\r
+    deviceManager->removeChangeListener (graphPanel);\r
+\r
+    deleteAllChildren();\r
+\r
+    graphPlayer.setProcessor (nullptr);\r
+    graph = nullptr;\r
+}\r
index dde5654e2b9d24d362363cf07efd54589a2c022e..9c3ee5285a6fe31066861d97ed1f02b4f2c973a7 100644 (file)
@@ -91,11 +91,17 @@ public:
     inline void setDoublePrecision (bool doublePrecision) { graphPlayer.setDoublePrecisionProcessing (doublePrecision); }\r
 \r
     //==============================================================================\r
-    FilterGraph graph;\r
+    ScopedPointer<FilterGraph> graph;\r
 \r
     //==============================================================================\r
     void resized();\r
 \r
+    //==============================================================================\r
+    void unfocusKeyboardComponent();\r
+\r
+    //==============================================================================\r
+    void releaseGraph();\r
+\r
 private:\r
     //==============================================================================\r
     AudioDeviceManager* deviceManager;\r
index 52184579d3321df9b631701f61c85dd5d8dc47f9..30a489b0680c2c9034375c4359c189bd4895a49b 100644 (file)
@@ -94,7 +94,8 @@ public:
 \r
         if (fileToOpen.existsAsFile())\r
             if (GraphDocumentComponent* graph = mainWindow->getGraphEditor())\r
-                graph->graph.loadFrom (fileToOpen, true);\r
+                if (FilterGraph* ioGraph = graph->graph.get())\r
+                    ioGraph->loadFrom (fileToOpen, true);\r
     }\r
 \r
     void shutdown() override\r
index 8b24be859f384c8a371652b6cf42d87a23fa8635..63cbe225c66f6bb9ec9bf30bbfc7f1d486fe5414 100644 (file)
@@ -105,7 +105,9 @@ MainHostWindow::MainHostWindow()
                             ->getIntValue ("pluginSortMethod", KnownPluginList::sortByManufacturer);\r
 \r
     knownPluginList.addChangeListener (this);\r
-    getGraphEditor()->graph.addChangeListener (this);\r
+\r
+    if (FilterGraph* filterGraph = getGraphEditor()->graph.get())\r
+        filterGraph->addChangeListener (this);\r
 \r
     addKeyListener (getCommandManager().getKeyMappings());\r
 \r
@@ -123,18 +125,19 @@ MainHostWindow::MainHostWindow()
 MainHostWindow::~MainHostWindow()\r
 {\r
     pluginListWindow = nullptr;\r
+    knownPluginList.removeChangeListener (this);\r
+\r
+    if (FilterGraph* filterGraph = getGraphEditor()->graph.get())\r
+        filterGraph->removeChangeListener (this);\r
+\r
+    getAppProperties().getUserSettings()->setValue ("mainWindowPos", getWindowStateAsString());\r
+    clearContentComponent();\r
 \r
    #if JUCE_MAC\r
     setMacMainMenu (nullptr);\r
    #else\r
     setMenuBar (nullptr);\r
    #endif\r
-\r
-    knownPluginList.removeChangeListener (this);\r
-    getGraphEditor()->graph.removeChangeListener (this);\r
-\r
-    getAppProperties().getUserSettings()->setValue ("mainWindowPos", getWindowStateAsString());\r
-    clearContentComponent();\r
 }\r
 \r
 void MainHostWindow::closeButtonPressed()\r
@@ -147,8 +150,12 @@ bool MainHostWindow::tryToQuitApplication()
     PluginWindow::closeAllCurrentlyOpenWindows();\r
 \r
     if (getGraphEditor() == nullptr\r
-         || getGraphEditor()->graph.saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
+         || getGraphEditor()->graph->saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
     {\r
+        // Some plug-ins do not want [NSApp stop] to be called\r
+        // before the plug-ins are not deallocated.\r
+        getGraphEditor()->releaseGraph();\r
+\r
         JUCEApplication::quit();\r
         return true;\r
     }\r
@@ -172,11 +179,11 @@ void MainHostWindow::changeListenerCallback (ChangeBroadcaster* changed)
             getAppProperties().saveIfNeeded();\r
         }\r
     }\r
-    else if (changed == &getGraphEditor()->graph)\r
+    else if (changed == getGraphEditor()->graph)\r
     {\r
         String title = JUCEApplication::getInstance()->getApplicationName();\r
 \r
-        File f = getGraphEditor()->graph.getFile();\r
+        File f = getGraphEditor()->graph->getFile();\r
 \r
         if (f.existsAsFile())\r
             title = f.getFileName() + " - " + title;\r
@@ -260,7 +267,8 @@ void MainHostWindow::menuItemSelected (int menuItemID, int /*topLevelMenuIndex*/
     if (menuItemID == 250)\r
     {\r
         if (graphEditor != nullptr)\r
-            graphEditor->graph.clear();\r
+            if (FilterGraph* filterGraph = getGraphEditor()->graph.get())\r
+                filterGraph->clear();\r
     }\r
     else if (menuItemID >= 100 && menuItemID < 200)\r
     {\r
@@ -268,8 +276,10 @@ void MainHostWindow::menuItemSelected (int menuItemID, int /*topLevelMenuIndex*/
         recentFiles.restoreFromString (getAppProperties().getUserSettings()\r
                                             ->getValue ("recentFilterGraphFiles"));\r
 \r
-        if (graphEditor != nullptr && graphEditor->graph.saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
-            graphEditor->graph.loadFrom (recentFiles.getFile (menuItemID - 100), true);\r
+        if (graphEditor != nullptr\r
+              && getGraphEditor()->graph != nullptr\r
+              && graphEditor->graph->saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
+            graphEditor->graph->loadFrom (recentFiles.getFile (menuItemID - 100), true);\r
     }\r
     else if (menuItemID >= 200 && menuItemID < 210)\r
     {\r
@@ -291,6 +301,14 @@ void MainHostWindow::menuItemSelected (int menuItemID, int /*topLevelMenuIndex*/
     }\r
 }\r
 \r
+void MainHostWindow::menuBarActivated (bool isActivated)\r
+{\r
+    GraphDocumentComponent* const graphEditor = getGraphEditor();\r
+\r
+    if (graphEditor != nullptr && isActivated)\r
+        graphEditor->unfocusKeyboardComponent();\r
+}\r
+\r
 void MainHostWindow::createPlugin (const PluginDescription* desc, int x, int y)\r
 {\r
     GraphDocumentComponent* const graphEditor = getGraphEditor();\r
@@ -369,12 +387,12 @@ void MainHostWindow::getCommandInfo (const CommandID commandID, ApplicationComma
         break;\r
 \r
     case CommandIDs::showPluginListEditor:\r
-        result.setInfo ("Edit the list of available plug-Ins...", String::empty, category, 0);\r
+        result.setInfo ("Edit the list of available plug-Ins...", String(), category, 0);\r
         result.addDefaultKeypress ('p', ModifierKeys::commandModifier);\r
         break;\r
 \r
     case CommandIDs::showAudioSettings:\r
-        result.setInfo ("Change the audio device settings", String::empty, category, 0);\r
+        result.setInfo ("Change the audio device settings", String(), category, 0);\r
         result.addDefaultKeypress ('a', ModifierKeys::commandModifier);\r
         break;\r
 \r
@@ -383,7 +401,7 @@ void MainHostWindow::getCommandInfo (const CommandID commandID, ApplicationComma
         break;\r
 \r
     case CommandIDs::aboutBox:\r
-        result.setInfo ("About...", String::empty, category, 0);\r
+        result.setInfo ("About...", String(), category, 0);\r
         break;\r
 \r
     case CommandIDs::allWindowsForward:\r
@@ -403,23 +421,23 @@ bool MainHostWindow::perform (const InvocationInfo& info)
     switch (info.commandID)\r
     {\r
     case CommandIDs::newFile:\r
-        if (graphEditor != nullptr && graphEditor->graph.saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
-            graphEditor->graph.newDocument();\r
+        if (graphEditor != nullptr && graphEditor->graph != nullptr && graphEditor->graph->saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
+            graphEditor->graph->newDocument();\r
         break;\r
 \r
     case CommandIDs::open:\r
-        if (graphEditor != nullptr && graphEditor->graph.saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
-            graphEditor->graph.loadFromUserSpecifiedFile (true);\r
+        if (graphEditor != nullptr && graphEditor->graph != nullptr && graphEditor->graph->saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
+            graphEditor->graph->loadFromUserSpecifiedFile (true);\r
         break;\r
 \r
     case CommandIDs::save:\r
-        if (graphEditor != nullptr)\r
-            graphEditor->graph.save (true, true);\r
+        if (graphEditor != nullptr && graphEditor->graph != nullptr)\r
+            graphEditor->graph->save (true, true);\r
         break;\r
 \r
     case CommandIDs::saveAs:\r
-        if (graphEditor != nullptr)\r
-            graphEditor->graph.saveAs (File::nonexistent, true, true, true);\r
+        if (graphEditor != nullptr && graphEditor->graph != nullptr)\r
+            graphEditor->graph->saveAs (File(), true, true, true);\r
         break;\r
 \r
     case CommandIDs::showPluginListEditor:\r
@@ -498,8 +516,8 @@ void MainHostWindow::showAudioSettings()
 \r
     GraphDocumentComponent* const graphEditor = getGraphEditor();\r
 \r
-    if (graphEditor != nullptr)\r
-        graphEditor->graph.removeIllegalConnections();\r
+    if (graphEditor != nullptr && graphEditor->graph != nullptr)\r
+        graphEditor->graph->removeIllegalConnections();\r
 }\r
 \r
 bool MainHostWindow::isInterestedInFileDrag (const StringArray&)\r
@@ -527,8 +545,9 @@ void MainHostWindow::filesDropped (const StringArray& files, int x, int y)
     {\r
         if (files.size() == 1 && File (files[0]).hasFileExtension (filenameSuffix))\r
         {\r
-            if (graphEditor->graph.saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
-                graphEditor->graph.loadFrom (File (files[0]), true);\r
+            if (FilterGraph* filterGraph = graphEditor->graph.get())\r
+            if (filterGraph->saveIfNeededAndUserAgrees() == FileBasedDocument::savedOk)\r
+                filterGraph->loadFrom (File (files[0]), true);\r
         }\r
         else\r
         {\r
@@ -558,6 +577,6 @@ bool MainHostWindow::isDoublePrecisionProcessing()
 \r
 void MainHostWindow::updatePrecisionMenuItem (ApplicationCommandInfo& info)\r
 {\r
-    info.setInfo ("Double floating point precision rendering", String::empty, "General", 0);\r
+    info.setInfo ("Double floating point precision rendering", String(), "General", 0);\r
     info.setTicked (isDoublePrecisionProcessing());\r
 }\r
index ccde2ad8b89f03421dd8f657e43146cc07fad4c7..fe4fda2b8db1e7fc70e0a8ad41f6a8a33c87866f 100644 (file)
@@ -70,6 +70,8 @@ public:
     void fileDragExit (const StringArray& files);\r
     void filesDropped (const StringArray& files, int, int);\r
 \r
+    void menuBarActivated (bool isActive);\r
+\r
     StringArray getMenuBarNames();\r
     PopupMenu getMenuForIndex (int topLevelMenuIndex, const String& menuName);\r
     void menuItemSelected (int menuItemID, int topLevelMenuIndex);\r
index c2df6eeda288552f17bcd99aa6000732b4359d4a..a32fd6f834210ac000b8f5536fce109b5a3fe653 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="AKfc5m" name="AudioPerformanceTest" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.AudioPerformanceTest"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.4">\r
   <MAINGROUP id="b1eVTe" name="AudioPerformanceTest">\r
     <GROUP id="{AB66118C-9D88-1C3A-D95C-42892D828E4B}" name="Source">\r
       <FILE id="SqGU9p" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index adb768928ee285dfdaee507a7a33c6d04277dc77..86ac13bd2a34ee1ba6a8d0ecc9b21987fdbf2952 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := AudioPerformanceTest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := AudioPerformanceTest\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_audio_utils_c7eb679f.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking AudioPerformanceTest\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning AudioPerformanceTest\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping AudioPerformanceTest\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_utils.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 5802e70aef4d68421eea2b39ae302e39153d023f..f1b5d51bc1e71d4fcb3251764d34767ad31ef84e 100644 (file)
                90BCC51EEB48DE909139B357 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; };
                914D99CE5915E7B68BB47EEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BluetoothMidiDevicePairingDialogue.h"; path = "../../../../modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h"; sourceTree = "SOURCE_ROOT"; };
                9156CF6C64EE06DB55B57572 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               915E7E2F19B34D7C2817FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                9163D3EF55AD0B2B197493EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; };
                917260F53ED8BE9007BBD18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; };
                91EA75E4BBE8A87A9618D202 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                958486C51C2FDFD3734B281C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; };
                95999D007040ED6D71F707F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; };
                96465102CA605250058AC064 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
+               964FF8CC7674C99B3BDA19C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                965C305E056C8DE917F22585 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; };
                975F037FB7CE738278E88884 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = export.h; path = "../../../../modules/juce_audio_formats/codecs/flac/export.h"; sourceTree = "SOURCE_ROOT"; };
                97C2FBD16505F28651574ED4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                BFED281053143D5D8C5218DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; };
                BFFBF9E6ED32BDB7AF3DAA06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffast.h; path = "../../../../modules/juce_core/zip/zlib/inffast.h"; sourceTree = "SOURCE_ROOT"; };
                C03BC1AFDCE495377D00ECBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
+               C06642951FB2BCAC1BFFC1DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                C0BEF915D866FC6F9D28B4B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
                C0C5B5C34349FD6B152E5B3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                C0EE1D9B98C8AD2A1D605827 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioAppComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.h"; sourceTree = "SOURCE_ROOT"; };
                C1DE13DF18998D7583EB6C05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; };
                C2386580F272DD8DA717AC5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
                C28CB68C6B675F148A21EB5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XMLCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
+               C2C33484B546D89717341A07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                C2C6FDE8DDAFD2F83CB01949 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "../../../../modules/juce_core/zip/zlib/uncompr.c"; sourceTree = "SOURCE_ROOT"; };
                C320A90C1F0F7C133C0C6C1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; };
                C34F15FED2D289A1AC6D85A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; };
                                        3DC079D7D7EFDF308DC44D4F,
                                        A5EF5FDF979BC1FF68D3EA33,
                                        8F9FE852D4F12052C098EECE,
+                                       915E7E2F19B34D7C2817FC67,
                                        45333ACAF454F661FC30924E,
                                        123831F52D2C1E9A68B75613,
                                        B8B0992FEC384EAE2FC83B39, ); name = "format_types"; sourceTree = "<group>"; };
                                        07FFF8B1683CC2595613F38C,
                                        83205FE6737B51491CAF017F,
                                        89021205A4D054ED8FB19640,
+                                       C2C33484B546D89717341A07,
+                                       C06642951FB2BCAC1BFFC1DF,
+                                       964FF8CC7674C99B3BDA19C3,
                                        7DE749651A85480E34E2D909,
                                        2B7BFB3838421DA82147C48E,
                                        F5330B527A064EF5B090EBF5,
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 770d6b1873859386e63339fe4abe0f5357377078..5be869eb67d9e8bf1c6bc78a08c8f9dd929687f7 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 50904dd1d5f63f13b0e38420fdb1116735d527eb..e39f1ba592582ae98e89545f0fb964680d60e16e 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index f972dfdc834c9cdf97abbca53f82aa2e899f696c..5c3a3592ab0771be9a1cde6b3da5c0934afb86af 100644 (file)
                90BCC51EEB48DE909139B357 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; };
                914D99CE5915E7B68BB47EEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BluetoothMidiDevicePairingDialogue.h"; path = "../../../../modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h"; sourceTree = "SOURCE_ROOT"; };
                9156CF6C64EE06DB55B57572 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; };
+               915E7E2F19B34D7C2817FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                9163D3EF55AD0B2B197493EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; };
                917260F53ED8BE9007BBD18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; };
                91EA75E4BBE8A87A9618D202 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                958486C51C2FDFD3734B281C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; };
                95999D007040ED6D71F707F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; };
                96465102CA605250058AC064 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
+               964FF8CC7674C99B3BDA19C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                965C305E056C8DE917F22585 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; };
                975F037FB7CE738278E88884 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = export.h; path = "../../../../modules/juce_audio_formats/codecs/flac/export.h"; sourceTree = "SOURCE_ROOT"; };
                97C2FBD16505F28651574ED4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                BFED281053143D5D8C5218DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; };
                BFFBF9E6ED32BDB7AF3DAA06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffast.h; path = "../../../../modules/juce_core/zip/zlib/inffast.h"; sourceTree = "SOURCE_ROOT"; };
                C03BC1AFDCE495377D00ECBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
+               C06642951FB2BCAC1BFFC1DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                C0BEF915D866FC6F9D28B4B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
                C0C5B5C34349FD6B152E5B3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                C0EE1D9B98C8AD2A1D605827 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioAppComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.h"; sourceTree = "SOURCE_ROOT"; };
                C1DE13DF18998D7583EB6C05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; };
                C2386580F272DD8DA717AC5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
                C28CB68C6B675F148A21EB5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XMLCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; };
+               C2C33484B546D89717341A07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                C2C6FDE8DDAFD2F83CB01949 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "../../../../modules/juce_core/zip/zlib/uncompr.c"; sourceTree = "SOURCE_ROOT"; };
                C320A90C1F0F7C133C0C6C1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; };
                C34F15FED2D289A1AC6D85A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; };
                                        3DC079D7D7EFDF308DC44D4F,
                                        A5EF5FDF979BC1FF68D3EA33,
                                        8F9FE852D4F12052C098EECE,
+                                       915E7E2F19B34D7C2817FC67,
                                        45333ACAF454F661FC30924E,
                                        123831F52D2C1E9A68B75613,
                                        B8B0992FEC384EAE2FC83B39, ); name = "format_types"; sourceTree = "<group>"; };
                                        07FFF8B1683CC2595613F38C,
                                        83205FE6737B51491CAF017F,
                                        89021205A4D054ED8FB19640,
+                                       C2C33484B546D89717341A07,
+                                       C06642951FB2BCAC1BFFC1DF,
+                                       964FF8CC7674C99B3BDA19C3,
                                        7DE749651A85480E34E2D909,
                                        2B7BFB3838421DA82147C48E,
                                        F5330B527A064EF5B090EBF5,
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "AudioPerformanceTest";
                                SDKROOT = iphoneos;
                                GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.3;
                                PRODUCT_NAME = "AudioPerformanceTest";
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
index bd436ee49a080ec2f45b95f9a60786f305864a1f..978cf634ab00c882075fc1ed73feca54fd22b818 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index dd33a82640a4a24ff1841d729046a0af81672685..c084a0b2b88c8c2c68ca49a2b41db4922dd5aeed 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.4 -DJUCE_APP_VERSION_HEX=0x40204 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := Projucer\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.4 -DJUCE_APP_VERSION_HEX=0x40204 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt \r
 \r
   TARGET := Projucer\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/jucer_AppearanceSettings_788d9889.o \\r
-  $(OBJDIR)/jucer_AutoUpdater_ca658dc2.o \\r
-  $(OBJDIR)/jucer_CommandLine_f35de107.o \\r
-  $(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o \\r
-  $(OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o \\r
-  $(OBJDIR)/jucer_Main_f8488f5b.o \\r
-  $(OBJDIR)/jucer_MainWindow_1e163aeb.o \\r
-  $(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \\r
-  $(OBJDIR)/projucer_CompileEngineClient_542e6b2d.o \\r
-  $(OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o \\r
-  $(OBJDIR)/jucer_SourceCodeEditor_461f5487.o \\r
-  $(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o \\r
-  $(OBJDIR)/jucer_ButtonDocument_56c341cc.o \\r
-  $(OBJDIR)/jucer_ComponentDocument_92868083.o \\r
-  $(OBJDIR)/jucer_ColouredElement_70cbc839.o \\r
-  $(OBJDIR)/jucer_PaintElement_653460.o \\r
-  $(OBJDIR)/jucer_PaintElementPath_908894a5.o \\r
-  $(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o \\r
-  $(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o \\r
-  $(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o \\r
-  $(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o \\r
-  $(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o \\r
-  $(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o \\r
-  $(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o \\r
-  $(OBJDIR)/jucer_TestComponent_db757dc4.o \\r
-  $(OBJDIR)/jucer_BinaryResources_e0f99b46.o \\r
-  $(OBJDIR)/jucer_ComponentLayout_6ea00129.o \\r
-  $(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o \\r
-  $(OBJDIR)/jucer_JucerDocument_ff8afcc2.o \\r
-  $(OBJDIR)/jucer_ObjectTypes_4406f01c.o \\r
-  $(OBJDIR)/jucer_PaintRoutine_e1e891ee.o \\r
-  $(OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o \\r
-  $(OBJDIR)/jucer_Module_3f7666a5.o \\r
-  $(OBJDIR)/jucer_Project_c131864a.o \\r
-  $(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \\r
-  $(OBJDIR)/jucer_ProjectSaver_38b16c25.o \\r
-  $(OBJDIR)/jucer_ResourceFile_6af120d3.o \\r
-  $(OBJDIR)/jucer_CodeHelpers_c317179c.o \\r
-  $(OBJDIR)/jucer_FileHelpers_f98ed0ad.o \\r
-  $(OBJDIR)/jucer_Icons_9db2f51e.o \\r
-  $(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o \\r
-  $(OBJDIR)/jucer_MiscUtilities_25b68c82.o \\r
-  $(OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o \\r
-  $(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o \\r
-  $(OBJDIR)/jucer_StoredSettings_26078d2c.o \\r
-  $(OBJDIR)/jucer_NewFileWizard_fac97f47.o \\r
-  $(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \\r
-  $(OBJDIR)/BinaryData_ce4232d4.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/jucer_AppearanceSettings_788d9889.o \\r
+  $(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o \\r
+  $(JUCE_OBJDIR)/jucer_CommandLine_f35de107.o \\r
+  $(JUCE_OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o \\r
+  $(JUCE_OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o \\r
+  $(JUCE_OBJDIR)/jucer_Main_f8488f5b.o \\r
+  $(JUCE_OBJDIR)/jucer_MainWindow_1e163aeb.o \\r
+  $(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \\r
+  $(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o \\r
+  $(JUCE_OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o \\r
+  $(JUCE_OBJDIR)/jucer_SourceCodeEditor_461f5487.o \\r
+  $(JUCE_OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o \\r
+  $(JUCE_OBJDIR)/jucer_ButtonDocument_56c341cc.o \\r
+  $(JUCE_OBJDIR)/jucer_ComponentDocument_92868083.o \\r
+  $(JUCE_OBJDIR)/jucer_ColouredElement_70cbc839.o \\r
+  $(JUCE_OBJDIR)/jucer_PaintElement_653460.o \\r
+  $(JUCE_OBJDIR)/jucer_PaintElementPath_908894a5.o \\r
+  $(JUCE_OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o \\r
+  $(JUCE_OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o \\r
+  $(JUCE_OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o \\r
+  $(JUCE_OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o \\r
+  $(JUCE_OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o \\r
+  $(JUCE_OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o \\r
+  $(JUCE_OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o \\r
+  $(JUCE_OBJDIR)/jucer_TestComponent_db757dc4.o \\r
+  $(JUCE_OBJDIR)/jucer_BinaryResources_e0f99b46.o \\r
+  $(JUCE_OBJDIR)/jucer_ComponentLayout_6ea00129.o \\r
+  $(JUCE_OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o \\r
+  $(JUCE_OBJDIR)/jucer_JucerDocument_ff8afcc2.o \\r
+  $(JUCE_OBJDIR)/jucer_ObjectTypes_4406f01c.o \\r
+  $(JUCE_OBJDIR)/jucer_PaintRoutine_e1e891ee.o \\r
+  $(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o \\r
+  $(JUCE_OBJDIR)/jucer_Module_3f7666a5.o \\r
+  $(JUCE_OBJDIR)/jucer_Project_c131864a.o \\r
+  $(JUCE_OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \\r
+  $(JUCE_OBJDIR)/jucer_ProjectSaver_38b16c25.o \\r
+  $(JUCE_OBJDIR)/jucer_ResourceFile_6af120d3.o \\r
+  $(JUCE_OBJDIR)/jucer_CodeHelpers_c317179c.o \\r
+  $(JUCE_OBJDIR)/jucer_FileHelpers_f98ed0ad.o \\r
+  $(JUCE_OBJDIR)/jucer_Icons_9db2f51e.o \\r
+  $(JUCE_OBJDIR)/jucer_JucerTreeViewBase_d043309d.o \\r
+  $(JUCE_OBJDIR)/jucer_MiscUtilities_25b68c82.o \\r
+  $(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o \\r
+  $(JUCE_OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o \\r
+  $(JUCE_OBJDIR)/jucer_StoredSettings_26078d2c.o \\r
+  $(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o \\r
+  $(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \\r
+  $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking Projucer\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning Projucer\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping Projucer\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/jucer_AppearanceSettings_788d9889.o: ../../Source/Application/jucer_AppearanceSettings.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_AppearanceSettings_788d9889.o: ../../Source/Application/jucer_AppearanceSettings.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_AppearanceSettings.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_AutoUpdater_ca658dc2.o: ../../Source/Application/jucer_AutoUpdater.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o: ../../Source/Application/jucer_AutoUpdater.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_AutoUpdater.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_CommandLine_f35de107.o: ../../Source/Application/jucer_CommandLine.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_CommandLine_f35de107.o: ../../Source/Application/jucer_CommandLine.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_CommandLine.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o: ../../Source/Application/jucer_DocumentEditorComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o: ../../Source/Application/jucer_DocumentEditorComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_DocumentEditorComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o: ../../Source/Application/jucer_GlobalPreferences.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o: ../../Source/Application/jucer_GlobalPreferences.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_GlobalPreferences.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_Main_f8488f5b.o: ../../Source/Application/jucer_Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_Main_f8488f5b.o: ../../Source/Application/jucer_Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_MainWindow_1e163aeb.o: ../../Source/Application/jucer_MainWindow.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_MainWindow_1e163aeb.o: ../../Source/Application/jucer_MainWindow.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_MainWindow.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_OpenDocumentManager.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_OpenDocumentManager.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_OpenDocumentManager.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/projucer_CompileEngineClient_542e6b2d.o: ../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o: ../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling projucer_CompileEngineClient.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o: ../../Source/LiveBuildEngine/projucer_CompileEngineServer.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o: ../../Source/LiveBuildEngine/projucer_CompileEngineServer.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling projucer_CompileEngineServer.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_SourceCodeEditor_461f5487.o: ../../Source/Code\ Editor/jucer_SourceCodeEditor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_SourceCodeEditor_461f5487.o: ../../Source/Code\ Editor/jucer_SourceCodeEditor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_SourceCodeEditor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o: ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o: ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ComponentTypeHandler.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ButtonDocument_56c341cc.o: ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ButtonDocument_56c341cc.o: ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ButtonDocument.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ComponentDocument_92868083.o: ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ComponentDocument_92868083.o: ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ComponentDocument.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ColouredElement_70cbc839.o: ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ColouredElement_70cbc839.o: ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ColouredElement.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_PaintElement_653460.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_PaintElement_653460.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_PaintElement.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_PaintElementPath_908894a5.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_PaintElementPath_908894a5.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_PaintElementPath.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o: ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o: ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ComponentLayoutEditor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o: ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o: ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ComponentOverlayComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o: ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o: ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_EditingPanelBase.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o: ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o: ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_JucerDocumentEditor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_PaintRoutineEditor.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_PaintRoutinePanel.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o: ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o: ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ResourceEditorPanel.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_TestComponent_db757dc4.o: ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_TestComponent_db757dc4.o: ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_TestComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_BinaryResources_e0f99b46.o: ../../Source/ComponentEditor/jucer_BinaryResources.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_BinaryResources_e0f99b46.o: ../../Source/ComponentEditor/jucer_BinaryResources.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_BinaryResources.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ComponentLayout_6ea00129.o: ../../Source/ComponentEditor/jucer_ComponentLayout.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ComponentLayout_6ea00129.o: ../../Source/ComponentEditor/jucer_ComponentLayout.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ComponentLayout.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o: ../../Source/ComponentEditor/jucer_GeneratedCode.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o: ../../Source/ComponentEditor/jucer_GeneratedCode.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_GeneratedCode.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_JucerDocument_ff8afcc2.o: ../../Source/ComponentEditor/jucer_JucerDocument.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_JucerDocument_ff8afcc2.o: ../../Source/ComponentEditor/jucer_JucerDocument.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_JucerDocument.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ObjectTypes_4406f01c.o: ../../Source/ComponentEditor/jucer_ObjectTypes.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ObjectTypes_4406f01c.o: ../../Source/ComponentEditor/jucer_ObjectTypes.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ObjectTypes.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_PaintRoutine_e1e891ee.o: ../../Source/ComponentEditor/jucer_PaintRoutine.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_PaintRoutine_e1e891ee.o: ../../Source/ComponentEditor/jucer_PaintRoutine.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_PaintRoutine.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o: ../../Source/Project/jucer_DependencyPathPropertyComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o: ../../Source/Project/jucer_DependencyPathPropertyComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_DependencyPathPropertyComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_Module.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_Project_c131864a.o: ../../Source/Project/jucer_Project.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_Project_c131864a.o: ../../Source/Project/jucer_Project.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_Project.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ProjectExporter.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ProjectSaver_38b16c25.o: ../../Source/Project\ Saving/jucer_ProjectSaver.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ProjectSaver_38b16c25.o: ../../Source/Project\ Saving/jucer_ProjectSaver.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ProjectSaver.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ResourceFile_6af120d3.o: ../../Source/Project\ Saving/jucer_ResourceFile.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ResourceFile_6af120d3.o: ../../Source/Project\ Saving/jucer_ResourceFile.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ResourceFile.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_CodeHelpers_c317179c.o: ../../Source/Utility/jucer_CodeHelpers.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_CodeHelpers_c317179c.o: ../../Source/Utility/jucer_CodeHelpers.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_CodeHelpers.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_FileHelpers_f98ed0ad.o: ../../Source/Utility/jucer_FileHelpers.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_FileHelpers_f98ed0ad.o: ../../Source/Utility/jucer_FileHelpers.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_FileHelpers.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_Icons_9db2f51e.o: ../../Source/Utility/jucer_Icons.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_Icons_9db2f51e.o: ../../Source/Utility/jucer_Icons.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_Icons.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o: ../../Source/Utility/jucer_JucerTreeViewBase.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_JucerTreeViewBase_d043309d.o: ../../Source/Utility/jucer_JucerTreeViewBase.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_JucerTreeViewBase.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_MiscUtilities_25b68c82.o: ../../Source/Utility/jucer_MiscUtilities.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_MiscUtilities_25b68c82.o: ../../Source/Utility/jucer_MiscUtilities.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_MiscUtilities.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o: ../../Source/Utility/jucer_ProjucerLookAndFeel.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o: ../../Source/Utility/jucer_ProjucerLookAndFeel.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_ProjucerLookAndFeel.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o: ../../Source/Utility/jucer_SlidingPanelComponent.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o: ../../Source/Utility/jucer_SlidingPanelComponent.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_SlidingPanelComponent.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_StoredSettings_26078d2c.o: ../../Source/Utility/jucer_StoredSettings.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_StoredSettings_26078d2c.o: ../../Source/Utility/jucer_StoredSettings.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_StoredSettings.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_NewFileWizard.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling jucer_NewProjectWizardClasses.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling BinaryData.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 86a8b55fb7eef125858d6755ba04c44371a35aeb..ba12f1b8631af00c4be92b23c7c3fa578455ff39 100644 (file)
@@ -33,9 +33,9 @@
     <key>CFBundleSignature</key>\r
     <string>????</string>\r
     <key>CFBundleShortVersionString</key>\r
-    <string>4.2.3</string>\r
+    <string>4.2.4</string>\r
     <key>CFBundleVersion</key>\r
-    <string>4.2.3</string>\r
+    <string>4.2.4</string>\r
     <key>NSHumanReadableCopyright</key>\r
     <string></string>\r
     <key>NSHighResolutionCapable</key>\r
index ce66ba69abebaa06540b7fc42ff9a4d2c191c4c7..22a8050bab4f55c202c0c5f37e274019b3cf9813 100644 (file)
                202591AAB1ABCFE458F33F7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                203CF0F8F72A516BB1CC5422 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; };
                206D399250A42034706E5434 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; };
+               2096FFC554268580C39D036D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                20FAAE9F3A7B96C2D8C75BB2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SlidingPanelComponent.cpp"; path = "../../Source/Utility/jucer_SlidingPanelComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                20FC504E8FB8D30E890A9837 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
                2107C02B684C7F5B75662333 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; };
                7519822C13AE752FE0E71999 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdphuff.c"; sourceTree = "SOURCE_ROOT"; };
                75EB08697D38632CCBE734D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; };
                76439EAACE53C774CE07BD9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; };
+               76AC916858C8F84550167257 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                7723BAE1917C8A0418F2D23B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; };
                77B05CF7C9BB9778EC06C396 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; };
                77CA70448B5AB9C0EF12D2BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.c"; sourceTree = "SOURCE_ROOT"; };
                BDEBB0AC32DDA8C16FFE6011 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; };
                BE97579323E97AF084D41476 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; };
                BF171B0762D5550B797869F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; };
+               BF1FA6FFE4F540CF723B31B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                BF3CEF080FA013E2778DCE90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Project.h"; path = "../../Source/Project/jucer_Project.h"; sourceTree = "SOURCE_ROOT"; };
                BF92CA3FD8F9A61AE358D151 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
                BFD1891DABC7B4BD3C681A2E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngrio.c"; sourceTree = "SOURCE_ROOT"; };
                                        AE3E427DBCC8D50E3F356402,
                                        3DBB6D91397AE61D59C90510,
                                        A9FA71357C5B2A46A75D9230,
+                                       2096FFC554268580C39D036D,
+                                       76AC916858C8F84550167257,
+                                       BF1FA6FFE4F540CF723B31B4,
                                        6EE91491434D058606460AFB,
                                        A8DB614600D348C730AC3930,
                                        EA0D43AB5F47506D5CDA81BB,
                                        "_DEBUG=1",
                                        "DEBUG=1",
                                        "JUCER_XCODE_MAC_F6D2F4CF=1",
-                                       "JUCE_APP_VERSION=4.2.3",
-                                       "JUCE_APP_VERSION_HEX=0x40203", );
+                                       "JUCE_APP_VERSION=4.2.4",
+                                       "JUCE_APP_VERSION_HEX=0x40204", );
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INFOPLIST_FILE = Info-App.plist;
                                        "_NDEBUG=1",
                                        "NDEBUG=1",
                                        "JUCER_XCODE_MAC_F6D2F4CF=1",
-                                       "JUCE_APP_VERSION=4.2.3",
-                                       "JUCE_APP_VERSION_HEX=0x40203", );
+                                       "JUCE_APP_VERSION=4.2.4",
+                                       "JUCE_APP_VERSION_HEX=0x40204", );
                                GCC_SYMBOLS_PRIVATE_EXTERN = YES;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
index de6498d038293aff0c8736f14a15af3fd9b3c8a5..e94fdf1dae0cff2ebd994f2f0be1476b4de98fda 100644 (file)
@@ -58,7 +58,7 @@
       <Optimization>Disabled</Optimization>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.4;JUCE_APP_VERSION_HEX=0x40204;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
@@ -97,7 +97,7 @@
     <ClCompile>\r
       <Optimization>Full</Optimization>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.4;JUCE_APP_VERSION_HEX=0x40204;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 64f35bece3a303374a4a1287cb5ceb865376d982..f13c305315e3d93279f2659c3e1e7f638d5d0160 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 21778ece55917dc0d3c6db5a7c2ef64ba0239a3c..fe0989e3c628816c71af5a844d78108fc853e747 100644 (file)
@@ -7,16 +7,16 @@
 #include <windows.h>\r
 \r
 VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION  4,2,3,0\r
+FILEVERSION  4,2,4,0\r
 BEGIN\r
   BLOCK "StringFileInfo"\r
   BEGIN\r
     BLOCK "040904E4"\r
     BEGIN\r
       VALUE "FileDescription",  "Projucer\0"\r
-      VALUE "FileVersion",  "4.2.3\0"\r
+      VALUE "FileVersion",  "4.2.4\0"\r
       VALUE "ProductName",  "Projucer\0"\r
-      VALUE "ProductVersion",  "4.2.3\0"\r
+      VALUE "ProductVersion",  "4.2.4\0"\r
     END\r
   END\r
 \r
index 59dc2eabbe109b99e31d7bc1594e8eec5c158c12..e4468cf7c854a627b04bdd3a121ee7cb9dee4406 100644 (file)
@@ -58,7 +58,7 @@
       <Optimization>Disabled</Optimization>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.4;JUCE_APP_VERSION_HEX=0x40204;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
@@ -97,7 +97,7 @@
     <ClCompile>\r
       <Optimization>Full</Optimization>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.4;JUCE_APP_VERSION_HEX=0x40204;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 5835d984e4d179db2d50dc1f0c986706c604218f..431d56d545dc5012665cefb8e1da96b9a8e90548 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 21778ece55917dc0d3c6db5a7c2ef64ba0239a3c..fe0989e3c628816c71af5a844d78108fc853e747 100644 (file)
@@ -7,16 +7,16 @@
 #include <windows.h>\r
 \r
 VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION  4,2,3,0\r
+FILEVERSION  4,2,4,0\r
 BEGIN\r
   BLOCK "StringFileInfo"\r
   BEGIN\r
     BLOCK "040904E4"\r
     BEGIN\r
       VALUE "FileDescription",  "Projucer\0"\r
-      VALUE "FileVersion",  "4.2.3\0"\r
+      VALUE "FileVersion",  "4.2.4\0"\r
       VALUE "ProductName",  "Projucer\0"\r
-      VALUE "ProductVersion",  "4.2.3\0"\r
+      VALUE "ProductVersion",  "4.2.4\0"\r
     END\r
   END\r
 \r
index e7eb6c007341e2452fcfd31c94f5410a3697c49d..f48f6cdf9fc1f6c84df3a04976cf244b328cf0f1 100644 (file)
  #define   JUCE_USE_CURL 1\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 8db2f1c3a56f561208304f6c54f34b151666b296..e65f304f929ea586b8a45de44f44ecd63546cb24 100644 (file)
@@ -35,8 +35,8 @@
 namespace ProjectInfo\r
 {\r
     const char* const  projectName    = "Projucer";\r
-    const char* const  versionString  = "4.2.3";\r
-    const int          versionNumber  = 0x40203;\r
+    const char* const  versionString  = "4.2.4";\r
+    const int          versionNumber  = 0x40204;\r
 }\r
 #endif\r
 \r
index 5fc7dd25ad9b36206df02a4be359e9237b7eefb3..672aed625f765f8f6bf42d2c436936c9e5ae183e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"\r
-              jucerVersion="4.2.3" version="4.2.3" bundleIdentifier="com.juce.theprojucer"\r
+              jucerVersion="4.2.4" version="4.2.4" bundleIdentifier="com.juce.theprojucer"\r
               defines="" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
     <LINUX_MAKE targetFolder="Builds/LinuxMakefile" extraCompilerFlags="-std=c++11"\r
                 extraLinkerFlags="" bigIcon="OCyr5F" smallIcon="" vstFolder="">\r
       <CONFIGURATIONS>\r
-        <CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/&#10;" isDebug="1" optimisation="1"\r
-                       targetName="Projucer" headerPath=""/>\r
-        <CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/&#10;" isDebug="0"\r
-                       optimisation="3" targetName="Projucer" headerPath=""/>\r
+        <CONFIGURATION name="Debug" libraryPath="" isDebug="1" optimisation="1" targetName="Projucer"\r
+                       headerPath=""/>\r
+        <CONFIGURATION name="Release" libraryPath="" isDebug="0" optimisation="3" targetName="Projucer"\r
+                       headerPath=""/>\r
       </CONFIGURATIONS>\r
       <MODULEPATHS>\r
         <MODULEPATH id="juce_gui_extra" path="../../modules"/>\r
     <OSX headerPath="~/SDKs/llvm/include&#10;~/SDKs/llvm/tools/clang/include"\r
          enableCxx11="1" systemHeaderPath="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1&#10;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/include"/>\r
     <WINDOWS enableCxx11="1"/>\r
+    <LINUX/>\r
   </LIVE_SETTINGS>\r
 </JUCERPROJECT>\r
index 3366b4d3b7e5614030c395a4b14f087ae3289ef4..1bf933611ff4377db176638a18f20487f16083fb 100644 (file)
@@ -170,7 +170,7 @@ bool AppearanceSettings::readFromFile (const File& file)
 bool AppearanceSettings::writeToFile (const File& file) const\r
 {\r
     const ScopedPointer<XmlElement> xml (settings.createXml());\r
-    return xml != nullptr && xml->writeToFile (file, String::empty);\r
+    return xml != nullptr && xml->writeToFile (file, String());\r
 }\r
 \r
 Font AppearanceSettings::getDefaultCodeFont()\r
index 455efdfa2a3f74e88193173c3763b503b4e41418..72d4270e379fc814b32f8224aea4f11768b33e0e 100644 (file)
@@ -642,7 +642,7 @@ void LatestVersionChecker::checkForNewVersion()
         startTimer (100);\r
 }\r
 \r
void LatestVersionChecker::processResult (var reply, const String& downloadPath)\r
bool LatestVersionChecker::processResult (var reply, const String& downloadPath)\r
  {\r
      if (statusCode == 303)\r
      {\r
@@ -657,7 +657,7 @@ void LatestVersionChecker::checkForNewVersion()
                  String extraHeaders;\r
 \r
                  URL newVersionToDownload = getLatestVersionURL (extraHeaders, downloadPath);\r
-                 askUserAboutNewVersion (version, releaseNotes, newVersionToDownload, extraHeaders);\r
+                 return askUserAboutNewVersion (version, releaseNotes, newVersionToDownload, extraHeaders);\r
              }\r
          }\r
      }\r
@@ -677,12 +677,17 @@ void LatestVersionChecker::checkForNewVersion()
                  AlertWindow::showMessageBox (AlertWindow::WarningIcon,\r
                                               TRANS("JUCE Updater"),\r
                                               message);\r
+\r
+                 return false;\r
              }\r
          }\r
      }\r
+\r
+     // try again\r
+     return true;\r
 }\r
 \r
-void LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::JuceVersionTriple& version,\r
+bool LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::JuceVersionTriple& version,\r
                                                    const String& releaseNotes,\r
                                                    URL& newVersionToDownload,\r
                                                    const String& extraHeaders)\r
@@ -715,7 +720,11 @@ void LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::J
             if (ModalComponentManager* mm = ModalComponentManager::getInstance())\r
                 mm->attachCallback (modalDialog, callback);\r
         }\r
+\r
+        return false;\r
     }\r
+\r
+    return true;\r
 }\r
 \r
 void LatestVersionChecker::modalStateFinished (int result,\r
@@ -723,6 +732,7 @@ void LatestVersionChecker::modalStateFinished (int result,
                                                const String& extraHeaders,\r
                                                File appParentFolder)\r
 {\r
+\r
     if (result == 1 || result == 2)\r
     {\r
         if (result == 1 || ! allowCustomLocation())\r
@@ -800,11 +810,14 @@ void LatestVersionChecker::timerCallback()
 \r
     if (hasAttemptedToReadWebsite)\r
     {\r
+        bool restartTimer = true;\r
         if (jsonReply.isObject())\r
-            processResult (jsonReply, newRelativeDownloadPath);\r
+            restartTimer = processResult (jsonReply, newRelativeDownloadPath);\r
 \r
         hasAttemptedToReadWebsite = false;\r
-        startTimer (7200000);\r
+\r
+        if (restartTimer)\r
+            startTimer (7200000);\r
     }\r
     else\r
     {\r
index cdc4ef27b8eef86c797365c83247ebffada3998a..47426b428d0a75741b565dba919662725d20d3e5 100644 (file)
@@ -65,9 +65,9 @@ public:
     URL getLatestVersionURL (String& headers) const;\r
 \r
     void checkForNewVersion();\r
-    void processResult (var reply, const String& downloadPath);\r
+    bool processResult (var reply, const String& downloadPath);\r
 \r
-    void askUserAboutNewVersion (const JuceVersionTriple& version,\r
+    bool askUserAboutNewVersion (const JuceVersionTriple& version,\r
                                  const String& releaseNotes,\r
                                  URL& newVersionToDownload,\r
                                  const String& extraHeaders);\r
index ad54227755349e489e38100161b4b65e0278c22a..c113c598f1bb31f1928910ea50fe89cd48ee0dd3 100644 (file)
@@ -34,7 +34,6 @@ PathSettingsTab::PathSettingsTab (DependencyPathOS os)
 \r
     StoredSettings& settings = getAppSettings();\r
 \r
-    vst2PathComponent       = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::vst2Path, os), "VST SDK",  maxChars, false));\r
     vst3PathComponent       = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::vst3Path, os), "VST3 SDK", maxChars, false));\r
 \r
    #if ! JUCE_LINUX\r
@@ -70,7 +69,6 @@ void PathSettingsTab::textPropertyComponentChanged (TextPropertyComponent* textP
 \r
 Identifier PathSettingsTab::getKeyForPropertyComponent (TextPropertyComponent* component) const\r
 {\r
-    if (component == vst2PathComponent)       return Ids::vst2Path;\r
     if (component == vst3PathComponent)       return Ids::vst3Path;\r
     if (component == rtasPathComponent)       return Ids::rtasPath;\r
     if (component == aaxPathComponent)        return Ids::aaxPath;\r
@@ -79,7 +77,7 @@ Identifier PathSettingsTab::getKeyForPropertyComponent (TextPropertyComponent* c
 \r
     // this property component does not have a key associated to it!\r
     jassertfalse;\r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 Component* PathSettingsTab::getContent()\r
@@ -288,7 +286,7 @@ struct AppearanceEditor
 \r
             StringArray names;\r
             names.add ("<Default Monospaced>");\r
-            names.add (String::empty);\r
+            names.add (String());\r
             names.addArray (getAppSettings().monospacedFontNames);\r
 \r
             return new ChoicePropertyComponent (Value (new FontNameValueSource (value)),\r
index c1720fac291fdcbe53b5eb95cc122241a6806946..e9fcc14f221e2e8cbda47c14987c0ffd79cc4b43 100644 (file)
@@ -64,7 +64,6 @@ private:
 \r
     OwnedArray<TextPropertyComponent> pathComponents;\r
 \r
-    TextPropertyComponent* vst2PathComponent;\r
     TextPropertyComponent* vst3PathComponent;\r
     TextPropertyComponent* rtasPathComponent;\r
     TextPropertyComponent* aaxPathComponent;\r
index 1fe39637d23a538597d6bd9d94fbd1b8ba69dceb..7ac45ec6477e8046d385071def3fde3831faa260 100644 (file)
@@ -276,6 +276,29 @@ void MainWindow::activeWindowStatusChanged()
         pcc->updateMissingFileStatuses();\r
 \r
     ProjucerApplication::getApp().openDocumentManager.reloadModifiedFiles();\r
+\r
+    if (Project* p = getProject())\r
+    {\r
+        if (p->hasProjectBeenModified())\r
+        {\r
+            const int r = AlertWindow::showOkCancelBox (AlertWindow::QuestionIcon,\r
+                                                           TRANS ("The .jucer file has been modified since the last save."),\r
+                                                           TRANS ("Do you want to keep the current project or re-load from disk?"),\r
+                                                           TRANS ("Keep"),\r
+                                                           TRANS ("Re-load from disk"));\r
+\r
+            if (r == 0)\r
+            {\r
+                File projectFile = p->getFile();\r
+                setProject (nullptr);\r
+                openFile (projectFile);\r
+            }\r
+            else if (r == 1)\r
+            {\r
+                ProjucerApplication::getApp().getCommandManager().invokeDirectly (CommandIDs::saveProject, true);\r
+            }\r
+        }\r
+    }\r
 }\r
 \r
 void MainWindow::updateTitle (const String& documentName)\r
index 81b55af4f374e02775bffb612c824997abe24c81..bbc46d09dc0ca65055b0ae064ceabe8ce9d0d468 100644 (file)
@@ -62,7 +62,7 @@ public:
     Component* createEditor() override                       { return new ItemPreviewComponent (file); }\r
     Component* createViewer() override                       { return createEditor(); }\r
     void fileHasBeenRenamed (const File& newFile) override   { file = newFile; }\r
-    String getState() const override                         { return String::empty; }\r
+    String getState() const override                         { return String(); }\r
     void restoreState (const String&) override               {}\r
 \r
     String getType() const override\r
@@ -333,7 +333,7 @@ OpenDocumentManager::Document* RecentDocumentList::getPrevious()
     if (! canGoToPrevious())\r
         return nullptr;\r
 \r
-    nextDocs.insert (0, previousDocs.remove (previousDocs.size() - 1));\r
+    nextDocs.insert (0, previousDocs.removeAndReturn (previousDocs.size() - 1));\r
     return previousDocs.getLast();\r
 }\r
 \r
@@ -342,7 +342,7 @@ OpenDocumentManager::Document* RecentDocumentList::getNext()
     if (! canGoToNext())\r
         return nullptr;\r
 \r
-    OpenDocumentManager::Document* d = nextDocs.remove (0);\r
+    OpenDocumentManager::Document* d = nextDocs.removeAndReturn (0);\r
     previousDocs.add (d);\r
     return d;\r
 }\r
index 43a34e98bbf554168bd456fee1fc48b6c0499b42..b5f8a19a493bbec0af24e9f9dc53be0e43577aa7 100644 (file)
@@ -62,7 +62,7 @@ public:
         virtual void fileHasBeenRenamed (const File& newFile) = 0;\r
         virtual String getState() const = 0;\r
         virtual void restoreState (const String& state) = 0;\r
-        virtual File getCounterpartFile() const   { return File::nonexistent; }\r
+        virtual File getCounterpartFile() const   { return File(); }\r
     };\r
 \r
     //==============================================================================\r
index 32367158fdfca8934615fe72d4651dda27183374..1afb136797452fede8de7a6f8fbca86d9d26b98a 100644 (file)
@@ -639,7 +639,7 @@ void CppCodeEditorComponent::insertComponentClass()
 \r
     const char* classNameField = "Class Name";\r
 \r
-    aw.addTextEditor (classNameField, String::empty, String::empty, false);\r
+    aw.addTextEditor (classNameField, String(), String(), false);\r
     aw.addButton (TRANS ("Insert Code"),  1, KeyPress (KeyPress::returnKey));\r
     aw.addButton (TRANS ("Cancel"),       0, KeyPress (KeyPress::escapeKey));\r
 \r
index 5106004b7981754378da0959caf30650fc5b0bca..62cb112b7bb986fd0fafe39c5fa0a50f18fba668 100644 (file)
@@ -46,7 +46,7 @@ public:
     bool needsSaving() const override                        { return codeDoc != nullptr && codeDoc->hasChangedSinceSavePoint(); }\r
     bool hasFileBeenModifiedExternally() override            { return modDetector.hasBeenModified(); }\r
     void fileHasBeenRenamed (const File& newFile) override   { modDetector.fileHasBeenRenamed (newFile); }\r
-    String getState() const override                         { return lastState != nullptr ? lastState->toString() : String::empty; }\r
+    String getState() const override                         { return lastState != nullptr ? lastState->toString() : String(); }\r
     void restoreState (const String& state) override         { lastState = new CodeEditorComponent::State (state); }\r
 \r
     File getCounterpartFile() const override\r
index e328d9af55750b97d2c4e52c498f256311dd5525..288406eb4fe2b7d13841cdd1eacc5e1f3bcbc6bb 100644 (file)
@@ -55,14 +55,14 @@ public:
         if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout))\r
             return false;\r
 \r
-        ComboBox defaultBox (String::empty);\r
+        ComboBox defaultBox;\r
 \r
         ComboBox* const c = dynamic_cast<ComboBox*> (comp);\r
         jassert (c != nullptr);\r
 \r
         c->setEditableText (xml.getBoolAttribute ("editable", defaultBox.isTextEditable()));\r
         c->setJustificationType (Justification (xml.getIntAttribute ("layout", defaultBox.getJustificationType().getFlags())));\r
-        c->getProperties().set ("items", xml.getStringAttribute ("items", String::empty));\r
+        c->getProperties().set ("items", xml.getStringAttribute ("items", String()));\r
         c->setTextWhenNothingSelected (xml.getStringAttribute ("textWhenNonSelected", defaultBox.getTextWhenNothingSelected()));\r
         c->setTextWhenNoChoicesAvailable (xml.getStringAttribute ("textWhenNoItems", defaultBox.getTextWhenNoChoicesAvailable()));\r
 \r
index f9687e789e246e129cd581a378ec6879bef476f3..16bdedeebe98e522e77122d2d52d0a7307e2be71 100644 (file)
@@ -196,7 +196,7 @@ bool ComponentTypeHandler::restoreFromXml (const XmlElement& xml,
 \r
     for (int i = 0; i < colours.size(); ++i)\r
     {\r
-        const String col (xml.getStringAttribute (colours[i]->xmlTagName, String::empty));\r
+        const String col (xml.getStringAttribute (colours[i]->xmlTagName, String()));\r
 \r
         if (col.isNotEmpty())\r
             comp->setColour (colours[i]->colourId, Colour::fromString (col));\r
@@ -518,12 +518,12 @@ void ComponentTypeHandler::fillInResizeCode (GeneratedCode& code, Component* com
     if (pos.rect.isPositionAbsolute())\r
         code.constructorCode += r + "\n";\r
     else\r
-        code.getCallbackCode (String::empty, "void", "resized()", false) += r;\r
+        code.getCallbackCode (String(), "void", "resized()", false) += r;\r
 }\r
 \r
 String ComponentTypeHandler::getCreationParameters (GeneratedCode&, Component*)\r
 {\r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 void ComponentTypeHandler::fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName)\r
index 6d4e9940c0dd3ba32f0e8fca313c0adf697afe63..3e3301d8a2b4e635dc99a7032edcf04c403f3f0a 100644 (file)
@@ -93,7 +93,7 @@ public:
             return false;\r
 \r
         ((GenericComponent*) comp)->actualClassName = xml.getStringAttribute ("class", "Component");\r
-        ((GenericComponent*) comp)->constructorParams = xml.getStringAttribute ("params", String::empty);\r
+        ((GenericComponent*) comp)->constructorParams = xml.getStringAttribute ("params", String());\r
         return true;\r
     }\r
 \r
index 45bea8ee10fdfdd3d343a76f6c40071f16ac8a1b..4e9e4c36aa80cdeae9435672e151ce64c471ca94 100644 (file)
@@ -44,7 +44,7 @@ public:
         XmlElement* e = ComponentTypeHandler::createXmlFor (comp, layout);\r
         e->setAttribute ("title", g->getText());\r
 \r
-        GroupComponent defaultComp (String::empty, String::empty);\r
+        GroupComponent defaultComp;\r
 \r
         if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags())\r
             e->setAttribute ("textpos", g->getTextLabelPosition().getFlags());\r
@@ -82,7 +82,7 @@ public:
 \r
         String s;\r
 \r
-        GroupComponent defaultComp (String::empty, String::empty);\r
+        GroupComponent defaultComp;\r
 \r
         if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags())\r
         {\r
index a7d17d925c88228f24421ce308273cccce2f6f96..e6e8419e55a8fdc901cd114fdd6d526f924215a4 100644 (file)
@@ -101,15 +101,15 @@ public:
 \r
         setImageKeepProportions (l, ib, xml.getBoolAttribute ("keepProportions", true), false);\r
 \r
-        setImageResource (l, ib, normalImage, xml.getStringAttribute ("resourceNormal", String::empty), false);\r
+        setImageResource (l, ib, normalImage, xml.getStringAttribute ("resourceNormal", String()), false);\r
         setImageOpacity (l, ib, normalImage, (float) xml.getDoubleAttribute ("opacityNormal", 1.0f), false);\r
         setImageColour (l, ib, normalImage, Colour::fromString (xml.getStringAttribute ("colourNormal", "0")), false);\r
 \r
-        setImageResource (l, ib, overImage, xml.getStringAttribute ("resourceOver", String::empty), false);\r
+        setImageResource (l, ib, overImage, xml.getStringAttribute ("resourceOver", String()), false);\r
         setImageOpacity (l, ib, overImage, (float) xml.getDoubleAttribute ("opacityOver", 1.0f), false);\r
         setImageColour (l, ib, overImage, Colour::fromString (xml.getStringAttribute ("colourOver", "0")), false);\r
 \r
-        setImageResource (l, ib, downImage, xml.getStringAttribute ("resourceDown", String::empty), false);\r
+        setImageResource (l, ib, downImage, xml.getStringAttribute ("resourceDown", String()), false);\r
         setImageOpacity (l, ib, downImage, (float) xml.getDoubleAttribute ("opacityDown", 1.0f), false);\r
         setImageColour (l, ib, downImage, Colour::fromString (xml.getStringAttribute ("colourDown", "0")), false);\r
 \r
index c71fce659c1b6786473e58c3a43a36902a909fad..bbfa309908de6ffd7baa3ac4a42c9ed6c16dfbd3 100644 (file)
@@ -68,7 +68,7 @@ public:
         if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout))\r
             return false;\r
 \r
-        Label defaultLabel (String::empty, String::empty);\r
+        Label defaultLabel;\r
 \r
         Font font;\r
         font.setHeight ((float) xml.getDoubleAttribute ("fontsize", 15.0));\r
index 37933ca70933c89cd7d0cdfba466c079bcfd1b76..399a35890c4e1c97846a3331cb79dadd6864ceb5 100644 (file)
@@ -147,7 +147,7 @@ public:
             default:                                jassertfalse; break;\r
         }\r
 \r
-        return String::empty;\r
+        return String();\r
     }\r
 \r
     void fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName)\r
@@ -275,7 +275,7 @@ public:
         TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex));\r
         jassert (tdc != nullptr);\r
 \r
-        return tdc != 0 ? tdc->contentClassName : String::empty;\r
+        return tdc != 0 ? tdc->contentClassName : String();\r
     }\r
 \r
     static void setTabClassName (TabbedComponent* tc, int tabIndex, const String& newName)\r
@@ -295,7 +295,7 @@ public:
         TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex));\r
         jassert (tdc != nullptr);\r
 \r
-        return tdc != 0 ? tdc->constructorParams : String::empty;\r
+        return tdc != 0 ? tdc->constructorParams : String();\r
     }\r
 \r
     static void setTabConstructorParams (TabbedComponent* tc, int tabIndex, const String& newParams)\r
@@ -315,7 +315,7 @@ public:
         TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex));\r
         jassert (tdc != nullptr);\r
 \r
-        return tdc != 0 ? tdc->jucerComponentFile : String::empty;\r
+        return tdc != 0 ? tdc->jucerComponentFile : String();\r
     }\r
 \r
     static void setTabJucerFile (TabbedComponent* tc, int tabIndex, const String& newFile)\r
index 308734339fca82a43da8ee73fa45752f9253fab2..4afacc958591822ff3b9c9c07fbb584dc017927c 100644 (file)
@@ -66,7 +66,7 @@ public:
 \r
         v->setScrollBarThickness (xml.getIntAttribute ("scrollbarThickness", defaultViewport.getScrollBarThickness()));\r
 \r
-        setViewportJucerComponentFile (v, xml.getStringAttribute ("jucerFile", String::empty));\r
+        setViewportJucerComponentFile (v, xml.getStringAttribute ("jucerFile", String()));\r
         setViewportGenericComponentClass (v, xml.getStringAttribute ("contentClass"));\r
         setViewportContentType (v, xml.getIntAttribute ("contentType", 0));\r
         setViewportConstructorParams (v, xml.getStringAttribute ("constructorParams"));\r
@@ -150,7 +150,7 @@ public:
                 }\r
                 else\r
                 {\r
-                    classNm = String::empty;\r
+                    classNm = String();\r
                 }\r
             }\r
 \r
@@ -505,7 +505,7 @@ private:
             const String filename (getViewportJucerComponentFile (component));\r
 \r
             if (filename.isEmpty())\r
-                return File::nonexistent;\r
+                return File();\r
 \r
             return document.getCppFile().getSiblingFile (filename);\r
         }\r
index db6fe13956646487f166f1287a5fdb37f92213bd..597a3a2579a9d97c0b4a6407f1db05c8054441a8 100644 (file)
@@ -275,7 +275,7 @@ class ButtonTestComponent   : public Button
 {\r
 public:\r
     ButtonTestComponent (ButtonDocument* const doc, const bool fillBackground)\r
-        : Button (String::empty),\r
+        : Button (String()),\r
           document (doc),\r
           alwaysFillBackground (fillBackground)\r
     {\r
index 84d19c1ab3a98773fe80081df662fc5f714df94f..d085e29e02f07d01edbc8848e475dcbe65f6cf27 100644 (file)
@@ -158,7 +158,7 @@ String BinaryResources::browseForResource (const String& title,
         return name;\r
     }\r
 \r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 String BinaryResources::findUniqueName (const String& rootName) const\r
index 95a35178415b3371653696a8bc0a44deec5daabd..77d349caf9b1d6308045ac8c0632ed45fe18ef4e 100644 (file)
@@ -715,7 +715,7 @@ void ComponentLayout::fillInGeneratedCode (GeneratedCode& code) const
 String ComponentLayout::getComponentMemberVariableName (Component* comp) const\r
 {\r
     if (comp == nullptr)\r
-        return String::empty;\r
+        return String();\r
 \r
     String name (comp->getProperties() ["memberName"].toString());\r
 \r
@@ -730,7 +730,7 @@ void ComponentLayout::setComponentMemberVariableName (Component* comp, const Str
     jassert (comp != nullptr);\r
     const String oldName (getComponentMemberVariableName (comp));\r
 \r
-    comp->getProperties().set ("memberName", String::empty);\r
+    comp->getProperties().set ("memberName", String());\r
 \r
     const String n (getUnusedMemberName (CodeHelpers::makeValidIdentifier (newName, false, true, false), comp));\r
     comp->getProperties().set ("memberName", n);\r
@@ -775,7 +775,7 @@ String ComponentLayout::getUnusedMemberName (String nameRoot, Component* comp) c
 String ComponentLayout::getComponentVirtualClassName (Component* comp) const\r
 {\r
     if (comp == nullptr)\r
-        return String::empty;\r
+        return String();\r
 \r
     return comp->getProperties() ["virtualName"];\r
 }\r
index d3f95499b2821753b01acf767d576c6de713982c..29767fbec2822fa57c677f5115db5f14edc00843 100644 (file)
@@ -173,7 +173,7 @@ void JucerDocument::setParentClasses (const String& classes)
                 s = s.fromFirstOccurrenceOf (" ", false, false);\r
 \r
                 if (s.trim().isEmpty())\r
-                    type = s = String::empty;\r
+                    type = s = String();\r
             }\r
 \r
             s = type + CodeHelpers::makeValidIdentifier (s.trim(), false, false, true);\r
@@ -378,11 +378,11 @@ bool JucerDocument::loadFromXml (const XmlElement& xml)
          && getTypeName().equalsIgnoreCase (xml.getStringAttribute ("documentType")))\r
     {\r
         className = xml.getStringAttribute ("className", defaultClassName);\r
-        templateFile = xml.getStringAttribute ("template", String::empty);\r
-        componentName = xml.getStringAttribute ("componentName", String::empty);\r
+        templateFile = xml.getStringAttribute ("template", String());\r
+        componentName = xml.getStringAttribute ("componentName", String());\r
         parentClasses = xml.getStringAttribute ("parentClasses", defaultParentClasses);\r
-        constructorParams = xml.getStringAttribute ("constructorParams", String::empty);\r
-        variableInitialisers = xml.getStringAttribute ("variableInitialisers", String::empty);\r
+        constructorParams = xml.getStringAttribute ("constructorParams", String());\r
+        variableInitialisers = xml.getStringAttribute ("variableInitialisers", String());\r
 \r
         fixedSize = xml.getBoolAttribute ("fixedSize", false);\r
         initialWidth = xml.getIntAttribute ("initialWidth", 300);\r
@@ -425,10 +425,10 @@ void JucerDocument::fillInGeneratedCode (GeneratedCode& code) const
         code.constructorCode << "setName (" + quotedString (componentName, false) + ");\n";\r
 \r
     // call these now, just to make sure they're the first two methods in the list.\r
-    code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false)\r
+    code.getCallbackCode (String(), "void", "paint (Graphics& g)", false)\r
         << "//[UserPrePaint] Add your own custom painting code here..\n//[/UserPrePaint]\n\n";\r
 \r
-    code.getCallbackCode (String::empty, "void", "resized()", false)\r
+    code.getCallbackCode (String(), "void", "resized()", false)\r
         << "//[UserPreResize] Add your own custom resize code here..\n//[/UserPreResize]\n\n";\r
 \r
     if (ComponentLayout* l = getComponentLayout())\r
@@ -449,10 +449,10 @@ void JucerDocument::fillInGeneratedCode (GeneratedCode& code) const
     if (initialWidth > 0 || initialHeight > 0)\r
         code.constructorCode << "\nsetSize (" << initialWidth << ", " << initialHeight << ");\n";\r
 \r
-    code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false)\r
+    code.getCallbackCode (String(), "void", "paint (Graphics& g)", false)\r
         << "//[UserPaint] Add your own custom painting code here..\n//[/UserPaint]";\r
 \r
-    code.getCallbackCode (String::empty, "void", "resized()", false)\r
+    code.getCallbackCode (String(), "void", "resized()", false)\r
         << "//[UserResized] Add your own custom resize handling here..\n//[/UserResized]";\r
 \r
     // add optional methods\r
@@ -491,7 +491,7 @@ void JucerDocument::fillInPaintCode (GeneratedCode& code) const
 {\r
     for (int i = 0; i < getNumPaintRoutines(); ++i)\r
         getPaintRoutine (i)\r
-            ->fillInGeneratedCode (code, code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false));\r
+            ->fillInGeneratedCode (code, code.getCallbackCode (String(), "void", "paint (Graphics& g)", false));\r
 }\r
 \r
 void JucerDocument::setTemplateFile (const String& newFile)\r
index 6171f8a0e22ec38876509c7b48b066147555d800..0e65f2cd10323710f64962f54657932944a7192f 100644 (file)
@@ -377,7 +377,7 @@ public:
     String getResource() const\r
     {\r
         if (element == nullptr)\r
-            return String::empty;\r
+            return String();\r
 \r
         if (isForStroke)\r
             return element->getStrokeType().fill.imageResourceName;\r
@@ -893,12 +893,12 @@ void ColouredElement::addColourAttributes (XmlElement* const e) const
 \r
 bool ColouredElement::loadColourAttributes (const XmlElement& xml)\r
 {\r
-    fillType.restoreFromString (xml.getStringAttribute ("fill", String::empty));\r
+    fillType.restoreFromString (xml.getStringAttribute ("fill", String()));\r
 \r
     isStrokePresent = showOutline && xml.getBoolAttribute ("hasStroke", false);\r
 \r
-    strokeType.restoreFromString (xml.getStringAttribute ("stroke", String::empty));\r
-    strokeType.fill.restoreFromString (xml.getStringAttribute ("strokeColour", String::empty));\r
+    strokeType.restoreFromString (xml.getStringAttribute ("stroke", String()));\r
+    strokeType.fill.restoreFromString (xml.getStringAttribute ("strokeColour", String()));\r
 \r
     return true;\r
 }\r
index 9d8e75e49f039c9655cfc35c17240cd59332af86..1db4560512d8b5b5ed77d38663a49905994c0887 100644 (file)
@@ -202,7 +202,7 @@ public:
             break;\r
         }\r
 \r
-        return String::empty;\r
+        return String();\r
     }\r
 \r
     void restoreFromString (const String& s)\r
index 23e2fe08a4e538563197184e00c3494481d4a36d..40203105f45b30ea854a6c73c16b4fa24793a318 100644 (file)
@@ -77,8 +77,8 @@ public:
             String resource (document.getResources()\r
                      .browseForResource ("Select an image file to add as a resource",\r
                                          "*.jpg;*.jpeg;*.png;*.gif;*.svg",\r
-                                         File::nonexistent,\r
-                                         String::empty));\r
+                                         File(),\r
+                                         String()));\r
 \r
             if (resource.isNotEmpty())\r
                 setResource (resource);\r
@@ -86,7 +86,7 @@ public:
         else\r
         {\r
             if (choices[newIndex] == getNoneText() && allowChoiceOfNoResource)\r
-                setResource (String::empty);\r
+                setResource (String());\r
             else\r
                 setResource (choices [newIndex]);\r
         }\r
@@ -110,7 +110,7 @@ public:
         choices.clear();\r
 \r
         choices.add ("-- create a new image resource -- ");\r
-        choices.add (String::empty);\r
+        choices.add (String());\r
 \r
         if (allowChoiceOfNoResource)\r
             choices.add (getNoneText());\r
index ac7a9b98eb8776b40ebf306c21a3c6a89906bd5d..1f6240aa4b43fa514f7ce8c2be659895cfb650bf 100644 (file)
@@ -368,7 +368,7 @@ public:
         if (xml.hasTagName (getTagName()))\r
         {\r
             position.restoreFromXml (xml, position);\r
-            resourceName = xml.getStringAttribute ("resource", String::empty);\r
+            resourceName = xml.getStringAttribute ("resource", String());\r
             opacity = xml.getDoubleAttribute ("opacity", 1.0);\r
             mode = (StretchMode) xml.getIntAttribute ("mode", (int) stretched);\r
 \r
@@ -405,7 +405,7 @@ private:
             if (element != nullptr)\r
                 return element->getResource();\r
 \r
-            return String::empty;\r
+            return String();\r
         }\r
     };\r
 \r
index 75d08f1576ef1ceeae3f1a30022fb80996c73868..69fa3a317e2deb6eac165c2f4e843544b4f59bc5 100644 (file)
@@ -425,7 +425,7 @@ void PaintElementPath::fillInGeneratedCode (GeneratedCode& code, String& paintMe
     r << '\n';\r
 \r
     if (somePointsAreRelative)\r
-        code.getCallbackCode (String::empty, "void", "resized()", false)\r
+        code.getCallbackCode (String(), "void", "resized()", false)\r
             << pathVariable << ".clear();\n" << r;\r
     else\r
         code.constructorCode << r;\r
index 902e924447374137e0e63a1f71baa95c019bbf9b..7a4d867e00277daafd8277e4d6e0c6a3c8662d40 100644 (file)
@@ -35,9 +35,9 @@ public:
                            const bool allowEditingOfFilename,\r
                            const String& fileBrowserWildcard = "*")\r
         : PropertyComponent (name),\r
-          filenameComp (name, File::nonexistent, allowEditingOfFilename,\r
+          filenameComp (name, File(), allowEditingOfFilename,\r
                         isDirectory, false, fileBrowserWildcard,\r
-                        String::empty, String::empty)\r
+                        String(), String())\r
     {\r
         addAndMakeVisible (filenameComp);\r
         filenameComp.addListener (this);\r
index 27fdda76643bc6b6a623acd95d88a0dabdcbc23f..43519c4fbc393e86e7ac676c9b325beec0e68698 100644 (file)
@@ -36,7 +36,7 @@ public:
         choices.add (getDefaultSans());\r
         choices.add (getDefaultSerif());\r
         choices.add (getDefaultMono());\r
-        choices.add (String::empty);\r
+        choices.add (String());\r
 \r
         static StringArray fontNames;\r
 \r
@@ -90,7 +90,7 @@ public:
 \r
     static String getTypefaceNameCode (const String& typefaceName)\r
     {\r
-        if (typefaceName == getDefaultFont())   return String::empty;\r
+        if (typefaceName == getDefaultFont())   return String();\r
         if (typefaceName == getDefaultSans())   return "Font::getDefaultSansSerifFontName(), ";\r
         if (typefaceName == getDefaultSerif())  return "Font::getDefaultSerifFontName(), ";\r
         if (typefaceName == getDefaultMono())   return "Font::getDefaultMonospacedFontName(), ";\r
index c02dad83ed24a2b54c3c39b2e1f681a3bdf9342b..9051c3146badfdcb407f807485ef680e1a269f8d 100644 (file)
@@ -414,7 +414,7 @@ protected:
 \r
     public:\r
         PositionPropLabel (PositionPropertyBase& owner_)\r
-            : Label (String::empty, String::empty),\r
+            : Label (String(), String()),\r
               owner (owner_)\r
         {\r
             setEditable (true, true, false);\r
index c4753bd34a9552bf57e0d34d7bfdb3d5e5804fff..5b175d085f997a43da58b47a1485270715e144e7 100644 (file)
@@ -47,7 +47,7 @@ public:
         : PropertyComponent ("extra callbacks", 250),\r
           document (doc)\r
     {\r
-        addAndMakeVisible (listBox = new ListBox (String::empty, this));\r
+        addAndMakeVisible (listBox = new ListBox (String(), this));\r
         listBox->setRowHeight (22);\r
 \r
         document.addChangeListener (this);\r
@@ -817,20 +817,20 @@ void JucerDocumentEditor::getCommandInfo (const CommandID commandID, Application
         break;\r
 \r
     case StandardApplicationCommandIDs::cut:\r
-        result.setInfo (TRANS ("Cut"), String::empty, "Editing", 0);\r
+        result.setInfo (TRANS ("Cut"), String(), "Editing", 0);\r
         result.setActive (isSomethingSelected());\r
         result.defaultKeypresses.add (KeyPress ('x', cmd, 0));\r
         break;\r
 \r
     case StandardApplicationCommandIDs::copy:\r
-        result.setInfo (TRANS ("Copy"), String::empty, "Editing", 0);\r
+        result.setInfo (TRANS ("Copy"), String(), "Editing", 0);\r
         result.setActive (isSomethingSelected());\r
         result.defaultKeypresses.add (KeyPress ('c', cmd, 0));\r
         break;\r
 \r
     case StandardApplicationCommandIDs::paste:\r
         {\r
-            result.setInfo (TRANS ("Paste"), String::empty, "Editing", 0);\r
+            result.setInfo (TRANS ("Paste"), String(), "Editing", 0);\r
             result.defaultKeypresses.add (KeyPress ('v', cmd, 0));\r
 \r
             bool canPaste = false;\r
@@ -851,18 +851,18 @@ void JucerDocumentEditor::getCommandInfo (const CommandID commandID, Application
         break;\r
 \r
     case StandardApplicationCommandIDs::del:\r
-        result.setInfo (TRANS ("Delete"), String::empty, "Editing", 0);\r
+        result.setInfo (TRANS ("Delete"), String(), "Editing", 0);\r
         result.setActive (isSomethingSelected());\r
         break;\r
 \r
     case StandardApplicationCommandIDs::selectAll:\r
-        result.setInfo (TRANS ("Select All"), String::empty, "Editing", 0);\r
+        result.setInfo (TRANS ("Select All"), String(), "Editing", 0);\r
         result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr);\r
         result.defaultKeypresses.add (KeyPress ('a', cmd, 0));\r
         break;\r
 \r
     case StandardApplicationCommandIDs::deselectAll:\r
-        result.setInfo (TRANS ("Deselect All"), String::empty, "Editing", 0);\r
+        result.setInfo (TRANS ("Deselect All"), String(), "Editing", 0);\r
         result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr);\r
         result.defaultKeypresses.add (KeyPress ('d', cmd, 0));\r
         break;\r
index 897c134e6dc07d65d044ef4d50d143da883bc585..e7e813c710dfd9185f9ea9422e98fa6be18e6ec9 100644 (file)
@@ -84,7 +84,7 @@ ResourceEditorPanel::ResourceEditorPanel (JucerDocument& doc)
     delButton.addListener (this);\r
     delButton.setEnabled (false);\r
 \r
-    addAndMakeVisible (listBox = new TableListBox (String::empty, this));\r
+    addAndMakeVisible (listBox = new TableListBox (String(), this));\r
     listBox->getHeader().addColumn ("name", 1, 150, 80, 400);\r
     listBox->getHeader().addColumn ("original file", 2, 350, 80, 800);\r
     listBox->getHeader().addColumn ("size", 3, 100, 40, 150);\r
@@ -247,8 +247,8 @@ void ResourceEditorPanel::buttonClicked (Button* b)
         document.getResources()\r
             .browseForResource ("Select a file to add as a resource",\r
                                 "*",\r
-                                File::nonexistent,\r
-                                String::empty);\r
+                                File(),\r
+                                String());\r
     }\r
     else if (b == &delButton)\r
     {\r
index 906f69f78c8abd7f4551e574bd3d7b0f44a30be2..f68d4391be9cad84c378bc567af29b2e3d4ce7f1 100644 (file)
@@ -219,7 +219,7 @@ struct ClassDatabase
             if (isAbstract)             return "This class is abstract";\r
             if (noDefaultConstructor)   return "This class has no default constructor";\r
             if (inAnonymousNamespace)   return "This class is declared inside an anonymous namespace";\r
-            return String::empty;\r
+            return String();\r
         }\r
 \r
         bool isDisallowed (const InstantiationFlags& disallowedFlags) const\r
index 388b96fea8e4fcaa5fa1f3a361aff59a41f64cd3..e8cd610875135328fcfea2455f39c24a1d672cb8 100644 (file)
@@ -89,9 +89,15 @@ namespace ProjectProperties
 \r
     static File getCacheLocation (Project& project)\r
     {\r
+        String cacheFolderName = project.getProjectFilenameRoot() + "_" + project.getProjectUID();\r
+\r
+       #if JUCE_DEBUG\r
+        cacheFolderName += "_debug";\r
+       #endif\r
+\r
         return getProjucerTempFolder()\r
                 .getChildFile ("Intermediate Files")\r
-                .getChildFile (project.getProjectFilenameRoot() + "_" + project.getProjectUID());\r
+                .getChildFile (cacheFolderName);\r
     }\r
 }\r
 \r
@@ -481,7 +487,6 @@ private:
 \r
         if (project.getProjectType().isAudioPlugin())\r
         {\r
-            paths.add (getAppSettings().getGlobalPath (Ids::vst2Path, TargetOS::getThisOS()).toString());\r
             paths.add (getAppSettings().getGlobalPath (Ids::vst3Path, TargetOS::getThisOS()).toString());\r
         }\r
 \r
index 9cfc99a358fe41eb11f2878f6284c90ecd79316e..39e459ce7198508c7c717c9d7ef87e395ad5d5be 100644 (file)
@@ -230,7 +230,7 @@ String createCommandLineForLaunchingServer (const String& pipeName, const String
 \r
     const File exe (File::getSpecialLocation (File::currentExecutableFile).getFullPathName());\r
 \r
-    return exe.getFullPathName() + " " + commandPrefix + info.joinIntoString (commandTokenSeparator);\r
+    return "\"" + exe.getFullPathName() + "\" " + commandPrefix + info.joinIntoString (commandTokenSeparator);\r
 }\r
 \r
 static ServerIPC* currentServer = nullptr;\r
index e18a990f69e4420ead0fe5763a7fabbc1959884f..5dae23b1cba85a39b5eafad911c8a9e978ec4ff3 100644 (file)
@@ -82,7 +82,7 @@ private:
         }\r
 \r
         String getRenamingName() const override     { return getDisplayName(); }\r
-        String getDisplayName() const override      { return (namespaceToShow != nullptr ? namespaceToShow->name : String::empty) + "::"; }\r
+        String getDisplayName() const override      { return (namespaceToShow != nullptr ? namespaceToShow->name : String()) + "::"; }\r
         void setName (const String&) override       {}\r
         bool isMissing() override                   { return false; }\r
         Icon getIcon() const override               { return Icon (getIcons().graph, getContrastingColour (Colours::darkred, 0.5f)); }\r
index 829a7b659ff19aa2984d4c35fa6f1892f140d53c..bb2f2ac579c3beb3f9d0092e1b9d5d10244902c2 100644 (file)
@@ -190,7 +190,7 @@ struct CppParserHelpers
             if (CPlusPlusCodeTokeniser::isReservedKeyword (ed.getText().replaceSection (ed.getHighlightedRegion().getStart(),\r
                                                                                         ed.getHighlightedRegion().getLength(),\r
                                                                                         s)))\r
-                return String::empty;\r
+                return String();\r
 \r
             return s;\r
         }\r
index 61181f926e39ea406fcc1976c3c1f9e78a930e38..543e11ad1f20509e396dd8fb466aaf37f4e2bb2d 100644 (file)
@@ -27,7 +27,7 @@ class ErrorListComp     : public TreePanelBase,
 {\r
 public:\r
     ErrorListComp (ErrorList& el)\r
-        : TreePanelBase (nullptr, String::empty),\r
+        : TreePanelBase (nullptr, String()),\r
           errorList (el)\r
     {\r
         setName ("Errors and Warnings");\r
index a6b0b5b9e3c90263b2a3cbed87e55ca76f653d97..1db9fdd24bc11e5e3774d1ab488d04a0db95d82d 100644 (file)
@@ -82,7 +82,7 @@ struct SourceCodeRange
     String toString() const\r
     {\r
         if (file.isEmpty() && range.isEmpty())\r
-            return String::empty;\r
+            return String();\r
 \r
         return file + ":" + String (range.getStart()) + ":" + String (range.getEnd());\r
     }\r
index 0ff93cb092ce6ceae0e9a2188401274116b8ce99..4b873964c616870c1c8adbdbd644e44bebabb875 100644 (file)
@@ -179,7 +179,7 @@ public:
            return defaultInstallation;\r
       #endif\r
 \r
-        return File::nonexistent;\r
+        return File();\r
     }\r
 \r
 protected:\r
index 241793d0c01765f176909cc3ffe619de2d05868c..199bff29555f18883b424573968d0d0ae4b07b81 100644 (file)
@@ -188,7 +188,7 @@ private:
         if (isCodeBlocks() && isWindows())\r
         {\r
             defines.set ("__MINGW__", "1");\r
-            defines.set ("__MINGW_EXTENSION", String::empty);\r
+            defines.set ("__MINGW_EXTENSION", String());\r
         }\r
         else\r
         {\r
@@ -433,7 +433,6 @@ private:
         DependencyPathOS pathOS = isLinux() ? TargetOS::linux\r
                                             : TargetOS::windows;\r
 \r
-        vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder), Ids::vst2Path, pathOS)));\r
         vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), Ids::vst3Path, pathOS)));\r
 \r
         if (! isLinux())\r
index 9f741b3e41a766231b6b2f5f981c1aadf57e2e50..bc58f2521e724e637da1e7b4a00f9451f7d701b9 100644 (file)
@@ -165,8 +165,20 @@ private:
                 config->getValue (Ids::useRuntimeLibDLL) = true;\r
 \r
             if (isVST3)\r
+            {\r
                 if (config->getValue (Ids::postbuildCommand).toString().isEmpty())\r
-                    config->getValue (Ids::postbuildCommand) = "copy /Y \"$(OutDir)\\$(TargetFileName)\" \"$(OutDir)\\$(TargetName).vst3\"";\r
+                {\r
+                    const String previousBuildCommands = config->getValue (Ids::internalPostBuildComamnd).toString();\r
+\r
+                    String script;\r
+                    if (previousBuildCommands.isNotEmpty())\r
+                        script += "\r\n";\r
+\r
+                    script += "copy /Y \"$(OutDir)\\$(TargetFileName)\" \"$(OutDir)\\$(TargetName).vst3\"";\r
+\r
+                    config->getValue (Ids::internalPostBuildComamnd) = previousBuildCommands + script;\r
+                }\r
+            }\r
         }\r
     }\r
 \r
@@ -175,9 +187,40 @@ private:
         const RelativePath aaxLibsFolder = RelativePath (getAAXPathValue().toString(), RelativePath::projectFolder).getChildFile ("Libs");\r
 \r
         for (ProjectExporter::ConfigIterator config (*this); config.next();)\r
+        {\r
             if (config->getValue (Ids::useRuntimeLibDLL).getValue().isVoid())\r
                 config->getValue (Ids::useRuntimeLibDLL) = true;\r
 \r
+            if (config->getValue(Ids::postbuildCommand).toString().isEmpty())\r
+            {\r
+                const String previousBuildCommands = config->getValue (Ids::internalPostBuildComamnd).toString();\r
+\r
+                const bool is64Bit = (config->getValue (Ids::winArchitecture) == "x64");\r
+                const String bundleDir      = "$(OutDir)\\$(TargetName).aaxplugin";\r
+                const String bundleContents = bundleDir + "\\Contents";\r
+                const String macOSDir       = bundleContents + String ("\\") + (is64Bit ? "x64" : "Win32");\r
+                const String executable     = macOSDir + String ("\\$(TargetName).aaxplugin");\r
+                const String bundleScript   = aaxPath.toString() + String ("\\Utilities\\CreatePackage.bat");\r
+                String iconFilePath         = getTargetFolder().getChildFile ("icon.ico").getFullPathName();\r
+\r
+                if (! File (iconFilePath).existsAsFile())\r
+                    iconFilePath = aaxPath.toString() + String ("\\Utilities\\PlugIn.ico");\r
+\r
+                String script;\r
+\r
+                if (previousBuildCommands.isNotEmpty())\r
+                    script += "\r\n";\r
+\r
+                script += String ("mkdir \"") + bundleDir      + String ("\"\r\n");\r
+                script += String ("mkdir \"") + bundleContents + String ("\"\r\n");\r
+                script += String ("mkdir \"") + macOSDir       + String ("\"\r\n");\r
+                script += String ("copy /Y \"$(OutDir)\\$(TargetFileName)\" \"") + executable + String ("\"\r\n");\r
+                script += bundleScript + String (" \"") + macOSDir + String ("\" \"") + iconFilePath + String ("\"");\r
+\r
+                config->getValue (Ids::internalPostBuildComamnd) = previousBuildCommands + script;\r
+            }\r
+        }\r
+\r
         msvcExtraPreprocessorDefs.set ("JucePlugin_AAXLibs_path",\r
                                        createRebasedPath (aaxLibsFolder));\r
     }\r
@@ -210,10 +253,19 @@ private:
                 config->getValue (Ids::useRuntimeLibDLL) = true;\r
 \r
             if (config->getValue (Ids::postbuildCommand).toString().isEmpty())\r
-                config->getValue (Ids::postbuildCommand)\r
-                = "copy /Y "\r
-                + modulePath.getChildFile ("juce_RTAS_WinResources.rsr").toWindowsStyle().quoted()\r
-                + " \"$(TargetPath)\".rsr";\r
+            {\r
+                const String previousBuildCommands = config->getValue (Ids::internalPostBuildComamnd).toString();\r
+\r
+                String script;\r
+                if (previousBuildCommands.isNotEmpty())\r
+                    script += "\r\n";\r
+\r
+                script += "copy /Y "\r
+                       + modulePath.getChildFile("juce_RTAS_WinResources.rsr").toWindowsStyle().quoted()\r
+                       + " \"$(TargetPath)\".rsr";\r
+\r
+                config->getValue (Ids::internalPostBuildComamnd) = previousBuildCommands + script;\r
+            }\r
         }\r
 \r
         RelativePath juceWrapperFolder (project.getGeneratedCodeFolder(),\r
@@ -329,6 +381,8 @@ protected:
         Value getPostbuildCommand()                 { return getValue (Ids::postbuildCommand); }\r
         String getPostbuildCommandString() const    { return config [Ids::postbuildCommand]; }\r
 \r
+        Value getInternalPostbuildCommands()        { return getValue (Ids::internalPostBuildComamnd); }\r
+\r
         Value shouldGenerateDebugSymbolsValue()     { return getValue (Ids::alwaysGenerateDebugSymbols); }\r
         bool shouldGenerateDebugSymbols() const     { return config [Ids::alwaysGenerateDebugSymbols]; }\r
 \r
@@ -713,7 +767,7 @@ protected:
            << newLine\r
            << "#endif" << newLine;\r
 \r
-        if (iconFile != File::nonexistent)\r
+        if (iconFile != File())\r
            mo << newLine\r
               << "IDI_ICON1 ICON DISCARDABLE " << iconFile.getFileName().quoted()\r
               << newLine\r
@@ -749,10 +803,6 @@ protected:
 \r
     void initialiseDependencyPathValues()\r
     {\r
-        vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder),\r
-                                                                Ids::vst2Path,\r
-                                                                TargetOS::windows)));\r
-\r
         vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder),\r
                                                                 Ids::vst3Path,\r
                                                                 TargetOS::windows)));\r
@@ -812,7 +862,7 @@ public:
 \r
                 if (group.getID() == ProjectSaver::getGeneratedGroupID())\r
                 {\r
-                    if (iconFile != File::nonexistent)\r
+                    if (iconFile != File())\r
                     {\r
                         group.addFileAtIndex (iconFile, -1, true);\r
                         group.findItemForFile (iconFile).getShouldAddToBinaryResourcesValue() = false;\r
@@ -834,7 +884,7 @@ public:
 \r
         {\r
             MemoryOutputStream mo;\r
-            writeSolutionFile (mo, getSolutionVersionString(), String::empty, getVCProjFile());\r
+            writeSolutionFile (mo, getSolutionVersionString(), String(), getVCProjFile());\r
 \r
             overwriteFileIfDifferentOrThrow (getSLNFile(), mo);\r
         }\r
@@ -1432,13 +1482,18 @@ protected:
                 {\r
                     XmlElement* intdir = props->createNewChildElement ("IntDir");\r
                     setConditionAttribute (*intdir, config);\r
-                    intdir->addTextElement (FileHelpers::windowsStylePath (config.getIntermediatesPath()) + "\\");\r
+\r
+                    String intermediatesPath = config.getIntermediatesPath();\r
+                    if (! intermediatesPath.endsWith ("\\"))\r
+                        intermediatesPath << "\\";\r
+\r
+                    intdir->addTextElement (FileHelpers::windowsStylePath (intermediatesPath));\r
                 }\r
 \r
                 {\r
                     XmlElement* targetName = props->createNewChildElement ("TargetName");\r
                     setConditionAttribute (*targetName, config);\r
-                    targetName->addTextElement (config.getOutputFilename (String::empty, true));\r
+                    targetName->addTextElement (config.getOutputFilename (String(), true));\r
                 }\r
 \r
                 {\r
@@ -1583,10 +1638,11 @@ protected:
                      ->createNewChildElement ("Command")\r
                      ->addTextElement (config.getPrebuildCommandString());\r
 \r
-            if (config.getPostbuildCommandString().isNotEmpty())\r
+            const String internalPostBuildScripts = config.config[Ids::internalPostBuildComamnd].toString();\r
+            if (config.getPostbuildCommandString().isNotEmpty() || internalPostBuildScripts.isNotEmpty())\r
                 group->createNewChildElement ("PostBuildEvent")\r
                      ->createNewChildElement ("Command")\r
-                     ->addTextElement (config.getPostbuildCommandString());\r
+                     ->addTextElement (config.getPostbuildCommandString() + internalPostBuildScripts);\r
         }\r
 \r
         ScopedPointer<XmlElement> otherFilesGroup (new XmlElement ("ItemGroup"));\r
@@ -1604,7 +1660,7 @@ protected:
             }\r
         }\r
 \r
-        if (iconFile != File::nonexistent)\r
+        if (iconFile != File())\r
         {\r
             XmlElement* e = otherFilesGroup->createNewChildElement ("None");\r
             e->setAttribute ("Include", prependDot (iconFile.getFileName()));\r
@@ -1638,7 +1694,7 @@ protected:
         if (projectType.isStaticLibrary())                                      return "StaticLibrary";\r
 \r
         jassertfalse;\r
-        return String::empty;\r
+        return String();\r
     }\r
 \r
     static const char* getOptimisationLevelString (int level)\r
@@ -1665,7 +1721,7 @@ protected:
 \r
             jassert (path.getRoot() == RelativePath::buildTargetFolder);\r
 \r
-            if (path.hasFileExtension (cOrCppFileExtensions))\r
+            if (path.hasFileExtension (cOrCppFileExtensions) || path.hasFileExtension (asmFileExtensions))\r
             {\r
                 XmlElement* e = cpps.createNewChildElement ("ClCompile");\r
                 e->setAttribute ("Include", path.toWindowsStyle());\r
@@ -1721,7 +1777,7 @@ protected:
 \r
             for (int i = 0; i < projectItem.getNumChildren(); ++i)\r
                 addFilesToFilter (projectItem.getChild(i),\r
-                                  (path.isEmpty() ? String::empty : (path + "\\")) + projectItem.getChild(i).getName(),\r
+                                  (path.isEmpty() ? String() : (path + "\\")) + projectItem.getChild(i).getName(),\r
                                   cpps, headers, otherFiles, groups);\r
         }\r
         else if (projectItem.shouldBeAddedToTargetProject())\r
index 4a43c7903f20e7ba045412570d6118fb91a1100c..7ed90c5cdcd8b2aacf92515333aa876b8004128f 100644 (file)
@@ -29,6 +29,9 @@ public:
     static const char* getNameLinux()           { return "Linux Makefile"; }\r
     static const char* getValueTreeTypeName()   { return "LINUX_MAKE"; }\r
 \r
+    Value getExtraPkgConfig()                   { return getSetting (Ids::linuxExtraPkgConfig); }\r
+    String getExtraPkgConfigString() const      { return getSettingString (Ids::linuxExtraPkgConfig); }\r
+\r
     static MakefileProjectExporter* createForSettings (Project& project, const ValueTree& settings)\r
     {\r
         if (settings.hasType (getValueTreeTypeName()))\r
@@ -90,6 +93,9 @@ public:
                                                      StringArray (cppStandardNames),\r
                                                      Array<var>  (cppStandardValues)),\r
                         "The C++ standard to specify in the makefile");\r
+\r
+        properties.add (new TextPropertyComponent (getExtraPkgConfig(), "pkg-config libraries", 8192, false),\r
+                   "Extra pkg-config libraries for you application. Each package should be space separated.");\r
     }\r
 \r
     //==============================================================================\r
@@ -126,7 +132,6 @@ protected:
         MakeBuildConfiguration (Project& p, const ValueTree& settings, const ProjectExporter& e)\r
             : BuildConfiguration (p, settings, e)\r
         {\r
-            setValueIfVoid (getLibrarySearchPathValue(), "/usr/X11R6/lib/");\r
         }\r
 \r
         Value getArchitectureType()             { return getValue (Ids::linuxArchitecture); }\r
@@ -191,18 +196,36 @@ private:
         StringArray searchPaths (extraSearchPaths);\r
         searchPaths.addArray (config.getHeaderSearchPaths());\r
 \r
-        searchPaths.insert (0, "/usr/include/freetype2");\r
-        searchPaths.insert (0, "/usr/include");\r
+        StringArray packages;\r
+        packages.addTokens (getExtraPkgConfigString(), " ", "\"'");\r
+        packages.removeEmptyStrings();\r
+\r
+        if (linuxPackages.size() > 0 || packages.size() > 0)\r
+        {\r
+            out << " $(shell pkg-config --cflags";\r
+\r
+            for (int i = 0; i < linuxPackages.size(); ++i)\r
+                out << " " << linuxPackages[i];\r
+\r
+            for (int i = 0; i < packages.size(); ++i)\r
+                out << " " << packages[i];\r
+\r
+            out << ")";\r
+        }\r
+\r
+        if (linuxLibs.contains("pthread"))\r
+            out << " -pthread";\r
 \r
         searchPaths = getCleanedStringArray (searchPaths);\r
 \r
+        // Replace ~ character with $(HOME) environment variable\r
         for (int i = 0; i < searchPaths.size(); ++i)\r
-            out << " -I " << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])));\r
+            out << " -I" << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))).replace ("~", "$(HOME)");\r
     }\r
 \r
     void writeCppFlags (OutputStream& out, const BuildConfiguration& config) const\r
     {\r
-        out << "  CPPFLAGS := $(DEPFLAGS)";\r
+        out << "  JUCE_CPPFLAGS := $(DEPFLAGS)";\r
         writeDefineFlags (out, config);\r
         writeHeaderPathFlags (out, config);\r
         out << newLine;\r
@@ -210,7 +233,7 @@ private:
 \r
     void writeLinkerFlags (OutputStream& out, const BuildConfiguration& config) const\r
     {\r
-        out << "  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR)";\r
+        out << "  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR)";\r
 \r
         {\r
             StringArray flags (makefileExtraLinkerFlags);\r
@@ -227,12 +250,26 @@ private:
 \r
         out << config.getGCCLibraryPathFlags();\r
 \r
+        StringArray packages;\r
+        packages.addTokens (getExtraPkgConfigString(), " ", "\"'");\r
+        packages.removeEmptyStrings();\r
+\r
+        if (linuxPackages.size() > 0  || packages.size() > 0)\r
+        {\r
+            out << " $(shell pkg-config --libs";\r
+\r
+            for (int i = 0; i < linuxPackages.size(); ++i)\r
+                out << " " << linuxPackages[i];\r
+\r
+            for (int i = 0; i < packages.size(); ++i)\r
+                out << " " << packages[i];\r
+\r
+            out << ")";\r
+        }\r
+\r
         for (int i = 0; i < linuxLibs.size(); ++i)\r
             out << " -l" << linuxLibs[i];\r
 \r
-        if (getProject().isConfigFlagEnabled ("JUCE_USE_CURL"))\r
-            out << " -lcurl";\r
-\r
         StringArray libraries;\r
         libraries.addTokens (getExternalLibrariesString(), ";", "\"'");\r
         libraries.removeEmptyStrings();\r
@@ -257,10 +294,10 @@ private:
         }\r
 \r
         out << "ifeq ($(CONFIG)," << escapeSpaces (config.getName()) << ")" << newLine;\r
-        out << "  BINDIR := " << escapeSpaces (buildDirName) << newLine\r
-            << "  LIBDIR := " << escapeSpaces (buildDirName) << newLine\r
-            << "  OBJDIR := " << escapeSpaces (intermediatesDirName) << newLine\r
-            << "  OUTDIR := " << escapeSpaces (outputDir) << newLine\r
+        out << "  JUCE_BINDIR := " << escapeSpaces (buildDirName) << newLine\r
+            << "  JUCE_LIBDIR := " << escapeSpaces (buildDirName) << newLine\r
+            << "  JUCE_OBJDIR := " << escapeSpaces (intermediatesDirName) << newLine\r
+            << "  JUCE_OUTDIR := " << escapeSpaces (outputDir) << newLine\r
             << newLine\r
             << "  ifeq ($(TARGET_ARCH),)" << newLine\r
             << "    TARGET_ARCH := " << getArchFlags (config) << newLine\r
@@ -269,7 +306,7 @@ private:
 \r
         writeCppFlags (out, config);\r
 \r
-        out << "  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH)";\r
+        out << "  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH)";\r
 \r
         if (config.isDebug())\r
             out << " -g -ggdb";\r
@@ -286,7 +323,7 @@ private:
         if (cppStandardToUse.isEmpty())\r
             cppStandardToUse = "-std=c++11";\r
 \r
-        out << "  CXXFLAGS += $(CFLAGS) "\r
+        out << "  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) "\r
             << cppStandardToUse\r
             << newLine;\r
 \r
@@ -304,11 +341,11 @@ private:
         out << "  TARGET := " << escapeSpaces (targetName) << newLine;\r
 \r
         if (projectType.isStaticLibrary())\r
-            out << "  BLDCMD = ar -rcs $(OUTDIR)/$(TARGET) $(OBJECTS)" << newLine;\r
+            out << "  BLDCMD = $(AR) -rcs $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS)" << newLine;\r
         else\r
-            out << "  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)" << newLine;\r
+            out << "  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)" << newLine;\r
 \r
-        out << "  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)" << newLine\r
+        out << "  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)" << newLine\r
             << "endif" << newLine\r
             << newLine;\r
     }\r
@@ -319,7 +356,7 @@ private:
 \r
         for (int i = 0; i < files.size(); ++i)\r
             if (shouldFileBeCompiledByDefault (files.getReference(i)))\r
-                out << "  $(OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) << " \\" << newLine;\r
+                out << "  $(JUCE_OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) << " \\" << newLine;\r
 \r
         out << newLine;\r
     }\r
@@ -334,6 +371,16 @@ private:
             << "DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)" << newLine\r
             << newLine;\r
 \r
+        out << "ifndef STRIP" << newLine\r
+            << "  STRIP=strip" << newLine\r
+            << "endif" << newLine\r
+            << newLine;\r
+\r
+        out << "ifndef AR" << newLine\r
+            << "  AR=ar" << newLine\r
+            << "endif" << newLine\r
+            << newLine;\r
+\r
         out << "ifndef CONFIG" << newLine\r
             << "  CONFIG=" << escapeSpaces (getConfiguration(0)->getName()) << newLine\r
             << "endif" << newLine\r
@@ -347,14 +394,39 @@ private:
         out << ".PHONY: clean" << newLine\r
             << newLine;\r
 \r
-        out << "$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)" << newLine\r
+        StringArray packages;\r
+        packages.addTokens (getExtraPkgConfigString(), " ", "\"'");\r
+        packages.removeEmptyStrings();\r
+\r
+        bool useLinuxPackages = (linuxPackages.size() > 0 || packages.size() > 0);\r
+\r
+        out << "$(JUCE_OUTDIR)/$(TARGET): "\r
+            << ((useLinuxPackages) ? "check-pkg-config " : "")\r
+            << "$(OBJECTS) $(RESOURCES)" << newLine\r
             << "\t@echo Linking " << projectName << newLine\r
-            << "\t-@mkdir -p $(BINDIR)" << newLine\r
-            << "\t-@mkdir -p $(LIBDIR)" << newLine\r
-            << "\t-@mkdir -p $(OUTDIR)" << newLine\r
+            << "\t-@mkdir -p $(JUCE_BINDIR)" << newLine\r
+            << "\t-@mkdir -p $(JUCE_LIBDIR)" << newLine\r
+            << "\t-@mkdir -p $(JUCE_OUTDIR)" << newLine\r
             << "\t@$(BLDCMD)" << newLine\r
             << newLine;\r
 \r
+        if (useLinuxPackages)\r
+        {\r
+            out << "check-pkg-config:" << newLine\r
+                << "\t@command -v pkg-config >/dev/null 2>&1 || "\r
+                "{ echo >&2 \"pkg-config not installed. Please, install it.\"; "\r
+                "exit 1; }" << newLine\r
+                << "\t@pkg-config --print-errors";\r
+\r
+            for (int i = 0; i < linuxPackages.size(); ++i)\r
+                out << " " << linuxPackages[i];\r
+\r
+            for (int i = 0; i < packages.size(); ++i)\r
+                out << " " << packages[i];\r
+\r
+            out << newLine << newLine;\r
+        }\r
+\r
         out << "clean:" << newLine\r
             << "\t@echo Cleaning " << projectName << newLine\r
             << "\t@$(CLEANCMD)" << newLine\r
@@ -362,7 +434,7 @@ private:
 \r
         out << "strip:" << newLine\r
             << "\t@echo Stripping " << projectName << newLine\r
-            << "\t-@strip --strip-unneeded $(OUTDIR)/$(TARGET)" << newLine\r
+            << "\t-@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)" << newLine\r
             << newLine;\r
 \r
         for (int i = 0; i < files.size(); ++i)\r
@@ -371,12 +443,12 @@ private:
             {\r
                 jassert (files.getReference(i).getRoot() == RelativePath::buildTargetFolder);\r
 \r
-                out << "$(OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i)))\r
+                out << "$(JUCE_OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i)))\r
                     << ": " << escapeSpaces (files.getReference(i).toUnixStyle()) << newLine\r
-                    << "\t-@mkdir -p $(OBJDIR)" << newLine\r
+                    << "\t-@mkdir -p $(JUCE_OBJDIR)" << newLine\r
                     << "\t@echo \"Compiling " << files.getReference(i).getFileName() << "\"" << newLine\r
-                    << (files.getReference(i).hasFileExtension ("c;s;S") ? "\t@$(CC) $(CFLAGS) -o \"$@\" -c \"$<\""\r
-                                                                         : "\t@$(CXX) $(CXXFLAGS) -o \"$@\" -c \"$<\"")\r
+                    << (files.getReference(i).hasFileExtension ("c;s;S") ? "\t@$(CC) $(JUCE_CFLAGS) -o \"$@\" -c \"$<\""\r
+                                                                         : "\t@$(CXX) $(JUCE_CXXFLAGS) -o \"$@\" -c \"$<\"")\r
                     << newLine << newLine;\r
             }\r
         }\r
@@ -401,10 +473,6 @@ private:
 \r
     void initialiseDependencyPathValues()\r
     {\r
-        vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder),\r
-                                                                Ids::vst2Path,\r
-                                                                TargetOS::linux)));\r
-\r
         vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder),\r
                                                                 Ids::vst3Path,\r
                                                                 TargetOS::linux)));\r
index 632b520fce1e262ff0695efa449739899fbe3dae..c8196152e0058e2d8852fd9d492346dfa705b318 100644 (file)
@@ -29,7 +29,7 @@ namespace
 {\r
     const char* const osxVersionDefault         = "default";\r
     const int oldestSDKVersion  = 5;\r
-    const int currentSDKVersion = 11;\r
+    const int currentSDKVersion = 12;\r
 \r
     const char* const osxArch_Default           = "default";\r
     const char* const osxArch_Native            = "Native";\r
@@ -124,7 +124,7 @@ public:
     bool isOSX() const override                      { return ! iOS; }\r
     bool isiOS() const override                      { return iOS; }\r
 \r
-    bool supportsVST() const override                { return true; }\r
+    bool supportsVST() const override                { return ! iOS; }\r
     bool supportsVST3() const override               { return ! iOS; }\r
     bool supportsAAX() const override                { return ! iOS; }\r
     bool supportsRTAS() const override               { return ! iOS; }\r
@@ -374,8 +374,8 @@ protected:
 \r
             if (iOS)\r
             {\r
-                const char* iosVersions[]      = { "Use Default",     "7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "8.4", "9.0", "9.1", "9.2", "9.3", 0 };\r
-                const char* iosVersionValues[] = { osxVersionDefault, "7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "8.4", "9.0", "9.1", "9.2", "9.3", 0 };\r
+                const char* iosVersions[]      = { "Use Default",     "7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "8.4", "9.0", "9.1", "9.2", "9.3", "10.0", 0 };\r
+                const char* iosVersionValues[] = { osxVersionDefault, "7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "8.4", "9.0", "9.1", "9.2", "9.3", "10.0", 0 };\r
 \r
                 props.add (new ChoicePropertyComponent (iosDeploymentTarget.getPropertyAsValue(), "iOS Deployment Target",\r
                                                         StringArray (iosVersions), Array<var> (iosVersionValues)),\r
@@ -550,7 +550,7 @@ public:
                     xcodeIsExecutable = true;\r
                     xcodeCreatePList = false;\r
                     xcodeFileType = "compiled.mach-o.executable";\r
-                    xcodeBundleExtension = String::empty;\r
+                    xcodeBundleExtension = String();\r
                     xcodeProductType = "com.apple.product-type.tool";\r
                     xcodeCopyToProductInstallPathAfterBuild = false;\r
                     break;\r
@@ -957,12 +957,17 @@ public:
                 const String sdk (config.osxSDKVersion.get());\r
                 const String sdkCompat (config.osxDeploymentTarget.get());\r
 \r
+                // if the user doesn't set it, then use the last known version that works well with JUCE\r
+                String deploymentTarget = "10.11";\r
+\r
                 for (int ver = oldestSDKVersion; ver <= currentSDKVersion; ++ver)\r
                 {\r
                     if (sdk == getSDKName (ver))         s.add ("SDKROOT = macosx10." + String (ver));\r
-                    if (sdkCompat == getSDKName (ver))   s.add ("MACOSX_DEPLOYMENT_TARGET = 10." + String (ver));\r
+                    if (sdkCompat == getSDKName (ver))   deploymentTarget = "10." + String (ver);\r
                 }\r
 \r
+                s.add ("MACOSX_DEPLOYMENT_TARGET = " + deploymentTarget);\r
+\r
                 s.add ("MACOSX_DEPLOYMENT_TARGET_ppc = 10.4");\r
                 s.add ("SDKROOT_ppc = macosx10.5");\r
 \r
@@ -1093,7 +1098,7 @@ public:
         void getLinkerSettings (const BuildConfiguration& config, StringArray& flags, StringArray& librarySearchPaths) const\r
         {\r
             if (xcodeIsBundle)\r
-                flags.add ("-bundle");\r
+                flags.add (owner.isiOS() ? "-bitcode_bundle" : "-bundle");\r
 \r
             const Array<RelativePath>& extraLibs = config.isDebug() ? xcodeExtraLibrariesDebug\r
                                                                     : xcodeExtraLibrariesRelease;\r
@@ -1947,6 +1952,8 @@ private:
             const String iosVersion (config.iosDeploymentTarget.get());\r
             if (iosVersion.isNotEmpty() && iosVersion != osxVersionDefault)\r
                 s.add ("IPHONEOS_DEPLOYMENT_TARGET = " + iosVersion);\r
+            else\r
+                s.add ("IPHONEOS_DEPLOYMENT_TARGET = 9.3");\r
         }\r
         else\r
         {\r
@@ -2706,7 +2713,6 @@ private:
 \r
     void initialiseDependencyPathValues()\r
     {\r
-        vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder),  Ids::vst2Path, TargetOS::osx)));\r
         vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), Ids::vst3Path, TargetOS::osx)));\r
         aaxPath. referTo (Value (new DependencyPathValueSource (getSetting (Ids::aaxFolder),  Ids::aaxPath,  TargetOS::osx)));\r
         rtasPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::rtasFolder), Ids::rtasPath, TargetOS::osx)));\r
index faa0934f6e3d6e164c00761b2ec108a6d5082ee4..c43b44f2de43a5ff374034878dc71491d7a79000 100644 (file)
@@ -242,15 +242,9 @@ void ProjectExporter::createPropertyEditors (PropertyListBuilder& props)
 \r
 void ProjectExporter::createDependencyPathProperties (PropertyListBuilder& props)\r
 {\r
-    if (supportsVST() && (project.shouldBuildVST().getValue() || project.isVSTPluginHost()))\r
-    {\r
-        props.add (new DependencyPathPropertyComponent (getVSTPathValue (false), "VST SDK Folder"),\r
-                   "If you're building a VST plugin or host, this must be the folder containing the VST SDK. This can be an absolute path, or a path relative to the Projucer project file.");\r
-    }\r
-\r
     if (supportsVST3() && (project.shouldBuildVST3().getValue() || project.isVST3PluginHost()))\r
     {\r
-        props.add (new DependencyPathPropertyComponent (getVSTPathValue (true), "VST3 SDK Folder"),\r
+        props.add (new DependencyPathPropertyComponent (getVST3PathValue(), "VST3 SDK Folder"),\r
                    "If you're building a VST3 plugin or host, this must be the folder containing the VST3 SDK. This can be an absolute path, or a path relative to the Projucer project file.");\r
     }\r
 \r
@@ -306,14 +300,8 @@ void ProjectExporter::addSettingsForProjectType (const ProjectType& type)
 \r
 void ProjectExporter::addVSTPathsIfPluginOrHost()\r
 {\r
-    if (supportsVST())\r
-    {\r
-        if (project.shouldBuildVST().getValue())\r
-            makefileTargetSuffix = ".so";\r
-\r
-        if (project.shouldBuildVST().getValue() || project.isVSTPluginHost())\r
-            addVSTFolderToPath (false);\r
-    }\r
+    if (supportsVST() && project.shouldBuildVST().getValue())\r
+        makefileTargetSuffix = ".so";\r
 \r
     if (supportsVST3())\r
     {\r
@@ -321,7 +309,7 @@ void ProjectExporter::addVSTPathsIfPluginOrHost()
             makefileTargetSuffix = ".so";\r
 \r
         if (project.shouldBuildVST3().getValue() || project.isVST3PluginHost())\r
-            addVSTFolderToPath (true);\r
+            addVST3FolderToPath();\r
     }\r
 }\r
 \r
@@ -336,12 +324,12 @@ void ProjectExporter::addCommonAudioPluginSettings()
     // Note: RTAS paths are platform-dependent, impl -> addPlatformSpecificSettingsForProjectType\r
  }\r
 \r
-void ProjectExporter::addVSTFolderToPath (bool isVST3)\r
+void ProjectExporter::addVST3FolderToPath()\r
 {\r
-    const String vstFolder (getVSTPathValue (isVST3).toString());\r
+    const String vst3Folder (getVST3PathValue().toString());\r
 \r
-    if (vstFolder.isNotEmpty())\r
-        addToExtraSearchPaths (RelativePath (vstFolder, RelativePath::projectFolder), 0);\r
+    if (vst3Folder.isNotEmpty())\r
+        addToExtraSearchPaths (RelativePath (vst3Folder, RelativePath::projectFolder), 0);\r
 }\r
 \r
 void ProjectExporter::addAAXFoldersToPath()\r
@@ -831,7 +819,7 @@ String ProjectExporter::BuildConfiguration::getGCCLibraryPathFlags() const
     const StringArray libraryPaths (getLibrarySearchPaths());\r
 \r
     for (int i = 0; i < libraryPaths.size(); ++i)\r
-        s << " -L" << escapeSpaces (libraryPaths[i]);\r
+        s << " -L" << escapeSpaces (libraryPaths[i]).replace ("~", "$(HOME)");\r
 \r
     return s;\r
 }\r
@@ -845,5 +833,5 @@ String ProjectExporter::getExternalLibraryFlags (const BuildConfiguration& confi
     if (libraries.size() != 0)\r
         return replacePreprocessorTokens (config, "-l" + libraries.joinIntoString (" -l")).trim();\r
 \r
-    return String::empty;\r
+    return String();\r
 }\r
index b99519ded253c9dcda0caafaa5a5c4e10a43b81d..cb7ea20bc836e1fdc73a0733322e1c882fe4cdce 100644 (file)
@@ -131,7 +131,7 @@ public:
 \r
     Value getUserNotes()                        { return getSetting (Ids::userNotes); }\r
 \r
-    Value getVSTPathValue (bool isVST3) const   { return isVST3 ? vst3Path : vst2Path; }\r
+    Value getVST3PathValue() const              { return vst3Path; }\r
     Value getRTASPathValue() const              { return rtasPath; }\r
     Value getAAXPathValue() const               { return aaxPath; }\r
 \r
@@ -189,7 +189,7 @@ public:
     //==============================================================================\r
     String makefileTargetSuffix;\r
     bool makefileIsDLL;\r
-    StringArray linuxLibs, makefileExtraLinkerFlags;\r
+    StringArray linuxLibs, linuxPackages, makefileExtraLinkerFlags;\r
 \r
     //==============================================================================\r
     String msvcTargetSuffix;\r
@@ -341,7 +341,7 @@ protected:
     const ProjectType& projectType;\r
     const String projectName;\r
     const File projectFolder;\r
-    Value vst2Path, vst3Path, rtasPath, aaxPath; // these must be initialised in the specific exporter c'tors!\r
+    Value vst3Path, rtasPath, aaxPath; // these must be initialised in the specific exporter c'tors!\r
 \r
     mutable Array<Project::Item> itemGroups;\r
     void initItemGroups() const;\r
@@ -384,7 +384,7 @@ protected:
     static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false)\r
     {\r
         MemoryOutputStream mo;\r
-        xml.writeToStream (mo, String::empty, false, true, encoding, maxCharsPerLine);\r
+        xml.writeToStream (mo, String(), false, true, encoding, maxCharsPerLine);\r
 \r
         if (useUnixNewLines)\r
         {\r
@@ -406,7 +406,7 @@ private:
     void createIconProperties (PropertyListBuilder&);\r
     void addVSTPathsIfPluginOrHost();\r
     void addCommonAudioPluginSettings();\r
-    void addVSTFolderToPath (bool isVST3);\r
+    void addVST3FolderToPath();\r
     void addAAXFoldersToPath();\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectExporter)\r
index 4d5307ebacbd5b3ac96167f9855ccd7280b51e3c..ebdb6749fc733d7adc07171072aa074fd2d80563 100644 (file)
@@ -104,6 +104,8 @@ public:
             return Result::fail (errors[0]);\r
         }\r
 \r
+        project.updateModificationTime();\r
+\r
         return Result::ok();\r
     }\r
 \r
@@ -285,7 +287,7 @@ private:
         if (xml != nullptr)\r
         {\r
             MemoryOutputStream mo;\r
-            xml->writeToStream (mo, String::empty);\r
+            xml->writeToStream (mo, String());\r
             replaceFileIfDifferent (projectFile, mo);\r
         }\r
     }\r
@@ -322,9 +324,9 @@ private:
 \r
         if (! foundCodeSection)\r
         {\r
-            userContent.add (String::empty);\r
+            userContent.add (String());\r
             userContent.add ("// (You can add your own code in this section, and the Projucer will not overwrite it)");\r
-            userContent.add (String::empty);\r
+            userContent.add (String());\r
         }\r
 \r
         return userContent.joinIntoString (newLine) + newLine;\r
@@ -432,8 +434,11 @@ private:
                         out << " #define   " << f->symbol << " 1";\r
                     else if (value == Project::configFlagDisabled)\r
                         out << " #define   " << f->symbol << " 0";\r
-                    else\r
+                    else if (f->defaultValue.isEmpty())\r
                         out << " //#define " << f->symbol;\r
+                    else\r
+                        out << " #define " << f->symbol << " " << f->defaultValue;\r
+\r
 \r
                     out << newLine\r
                         << "#endif" << newLine\r
index e881bdaa826d1c4b5d8b696c36349e8a9ce6c0ad..5117a1fb5dc38876a04401e916399150eaf781e7 100644 (file)
@@ -36,7 +36,7 @@ class TextWithDefaultPropertyComponent  : public PropertyComponent,
     {\r
     public:\r
         LabelComp (TextWithDefaultPropertyComponent& tpc, const int charLimit)\r
-            : Label (String::empty, String::empty),\r
+            : Label (String(), String()),\r
               owner (tpc),\r
               maxChars (charLimit)\r
         {\r
@@ -158,7 +158,7 @@ private:
     void editorShown (Label*, TextEditor& editor) override\r
     {\r
         if (cachedValue.isUsingDefault())\r
-            editor.setText (String::empty, dontSendNotification);\r
+            editor.setText (String(), dontSendNotification);\r
     }\r
 \r
     void editorHidden (Label*, TextEditor&) override {}\r
index da5cff0514c74b78833c1cc02ee33dba8196afa4..69d9e3f6b61a6092965ea17e9db01bfd76dd6f42 100644 (file)
@@ -65,7 +65,7 @@ try : TextPropertyComponent (propertyName, 1024, false),
     // which has set the project value to whatever is displayed in the label (this may be the\r
     // global/fallback value). In this case we have to reset the project value to blank:\r
     if (initialValueIsEmpty)\r
-        getValue().setValue (String::empty);\r
+        getValue().setValue (String());\r
 \r
     getValue().addListener (this);\r
     setColour (textColourId, getTextColourToDisplay());\r
@@ -114,7 +114,7 @@ void DependencyPathPropertyComponent::labelTextChanged (Label*)
 void DependencyPathPropertyComponent::editorShown (Label* /*label*/, TextEditor& editor)\r
 {\r
     if (! pathValueSource.isUsingProjectSettings())\r
-        editor.setText (String::empty, dontSendNotification);\r
+        editor.setText (String(), dontSendNotification);\r
 }\r
 \r
 void DependencyPathPropertyComponent::editorHidden (Label*, TextEditor&)\r
index 64d7225dca4183a71a710d938fbd7dfd6ea1c66d..36dd1f599fd7b8fd6cd7fe36a6564f3eb7f1646d 100644 (file)
@@ -90,7 +90,7 @@ private:
         if ((value.refersToSameSourceAs (globalSettingsValue) && isUsingGlobalSettings()))\r
         {\r
             sendChangeMessage (true);\r
-            setValue (String::empty); // make sure that the project-specific value is still blank\r
+            setValue (String()); // make sure that the project-specific value is still blank\r
         }\r
     }\r
 \r
index ff59f9f0f451b28408f3a3a5ac8c4f4a3e090e1b..307c52db2072c7aefb6727cf8110f1f26db65faa 100644 (file)
@@ -338,6 +338,7 @@ void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, P
     else if (exporter.isLinux())\r
     {\r
         parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString());\r
+        parseAndAddLibs (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString());\r
     }\r
     else if (exporter.isCodeBlocks() && exporter.isWindows())\r
     {\r
@@ -760,7 +761,7 @@ void EnabledModuleList::addModuleFromUserSelectedFile()
 {\r
     static File lastLocation (findDefaultModulesFolder (project));\r
 \r
-    FileChooser fc ("Select a module to add...", lastLocation, String::empty, false);\r
+    FileChooser fc ("Select a module to add...", lastLocation, String(), false);\r
 \r
     if (fc.browseForDirectory())\r
     {\r
index 49d203708819b773b8366756be26d6f7c758ad31..3c6c524a83b4a4a705137db25ac595de2bd34eb7 100644 (file)
@@ -118,6 +118,7 @@ public:
 \r
 private:\r
     mutable Array<File> sourceFiles;\r
+    OwnedArray<Project::ConfigFlag> configFlags;\r
 \r
     void addBrowseableCode (ProjectExporter&, const Array<File>& compiled, const File& localModuleFolder) const;\r
 };\r
index 29be7e389a75add8cf0709da98da61966e325a1c..9ad61e4a19ad43e1ca8bd45299b7371b2e24cc19 100644 (file)
@@ -59,6 +59,8 @@ Project::Project (const File& f)
     setChangedFlag (false);\r
 \r
     projectRoot.addListener (this);\r
+\r
+    modificationTime = getFile().getLastModificationTime();\r
 }\r
 \r
 Project::~Project()\r
@@ -374,6 +376,20 @@ void Project::valueTreeChildRemoved (ValueTree&, ValueTree&, int)   { changed();
 void Project::valueTreeChildOrderChanged (ValueTree&, int, int)     { changed(); }\r
 void Project::valueTreeParentChanged (ValueTree&)                   {}\r
 \r
+//==============================================================================\r
+bool Project::hasProjectBeenModified()\r
+{\r
+    Time newModificationTime = getFile().getLastModificationTime();\r
+\r
+    if (newModificationTime != modificationTime)\r
+    {\r
+        modificationTime = newModificationTime;\r
+        return true;\r
+    }\r
+\r
+    return false;\r
+}\r
+\r
 //==============================================================================\r
 File Project::resolveFilename (String filename) const\r
 {\r
@@ -1215,15 +1231,13 @@ void Project::createExporterForCurrentPlatform()
 String Project::getFileTemplate (const String& templateName)\r
 {\r
     int dataSize;\r
-    const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize);\r
 \r
-    if (data == nullptr)\r
-    {\r
-        jassertfalse;\r
-        return String::empty;\r
-    }\r
+    if (const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize))\r
+        return String::fromUTF8 (data, dataSize);\r
+\r
+    jassertfalse;\r
+    return String();\r
 \r
-    return String::fromUTF8 (data, dataSize);\r
 }\r
 \r
 //==============================================================================\r
index f923408c8b80816b02b6573c08ef875fc7159368..520c5cf6ae057a0fc98251026435ef30d5ebbf9e 100644 (file)
@@ -278,13 +278,14 @@ public:
     //==============================================================================\r
     struct ConfigFlag\r
     {\r
-        String symbol, description, sourceModuleID;\r
+        String symbol, description, sourceModuleID, defaultValue;\r
         Value value;   // 1 = true, 2 = false, anything else = use default\r
     };\r
 \r
     static const char* const configFlagDefault;\r
     static const char* const configFlagEnabled;\r
     static const char* const configFlagDisabled;\r
+\r
     Value getConfigFlag (const String& name);\r
     bool isConfigFlagEnabled (const String& name) const;\r
 \r
@@ -310,6 +311,10 @@ public:
     //==============================================================================\r
     static const char* projectFileExtension;\r
 \r
+    //==============================================================================\r
+    bool hasProjectBeenModified();\r
+    void updateModificationTime() { modificationTime = getFile().getLastModificationTime(); }\r
+\r
 private:\r
     //==============================================================================\r
     void setMissingAudioPluginDefaultValues();\r
@@ -333,6 +338,8 @@ private:
     void updateOldModulePaths();\r
     void warnAboutOldProjucerVersion();\r
 \r
+    Time modificationTime;\r
+\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Project)\r
 };\r
 \r
index f65729fdfbccd4c39391bd0001ffa110c24e0471..40a66429872cd6610b36be04e57e471431b4cb58 100644 (file)
@@ -354,65 +354,95 @@ struct BuildTabComponent  : public ConcertinaPanel
 struct ProjucerDisabledComp   : public Component,\r
                                 private Button::Listener\r
 {\r
-    ProjucerDisabledComp (String message, bool loggedIn, bool canLogin, bool requirePurchase = false,\r
-                          const String& loginName = String())\r
-              : isLoggedIn (loggedIn), isPurchaseButton (requirePurchase)\r
+    ProjucerDisabledComp (String message, bool loggedIn, bool showSubscribeButton,\r
+                          bool showSignInButton, bool showSwitchAccountButton)\r
+              : isLoggedIn (loggedIn)\r
     {\r
         infoLabel.setColour (Label::textColourId, findColour (mainBackgroundColourId).contrasting (0.7f));\r
         infoLabel.setJustificationType (Justification::centred);\r
         infoLabel.setText (message, dontSendNotification);\r
         addAndMakeVisible (infoLabel);\r
 \r
-        if (canLogin)\r
+        if (showSubscribeButton)\r
         {\r
-            addAndMakeVisible (loginButton);\r
-            loginButton.addListener (this);\r
+            subscribeButton = new TextButton (String ( "Subscribe..."));\r
+            addAndMakeVisible (*subscribeButton);\r
+            subscribeButton->addListener (this);\r
+        }\r
 \r
-            if (isPurchaseButton)\r
-            {\r
-                loginButton.setButtonText ("Purchase JUCE Pro...");\r
-                signOutButton = new TextButton (String ("Sign Out ") + loginName);\r
-                addAndMakeVisible (*signOutButton);\r
-                signOutButton->addListener (this);\r
-            }\r
+        if (showSignInButton)\r
+        {\r
+            signInButton = new TextButton (String ( "Sign in..."));\r
+            addAndMakeVisible (*signInButton);\r
+            signInButton->addListener (this);\r
+        }\r
+\r
+        if (showSwitchAccountButton)\r
+        {\r
+            switchAccountButton = new TextButton (String ("Switch account..."));\r
+            addAndMakeVisible (*switchAccountButton);\r
+            switchAccountButton->addListener (this);\r
         }\r
     }\r
 \r
     void resized() override\r
     {\r
-        infoLabel.centreWithSize (proportionOfWidth (0.9f), 200);\r
-        loginButton.setSize (jmin (getWidth() - 10, 150), 22);\r
-        loginButton.setCentrePosition (infoLabel.getBounds().getCentreX(),\r
-                                       infoLabel.getBottom() + loginButton.getHeight() * 2);\r
+        int infoWidth = proportionOfWidth (0.9f);\r
+        int infoHeight = 100;\r
+\r
+        infoLabel.centreWithSize (infoWidth, infoHeight);\r
 \r
-        if (signOutButton != nullptr)\r
+        int buttonWidth = jmin (getWidth() - 10, 150);\r
+        int buttonHeight = 22;\r
+        int itemDistance = 10;\r
+\r
+        int buttonCenterX = infoLabel.getBounds().getCentreX();\r
+        int buttonCenterY = infoLabel.getBottom() + itemDistance + buttonHeight / 2;\r
+\r
+        if (subscribeButton.get() != nullptr)\r
         {\r
-            signOutButton->setSize (jmin (getWidth() - 10, 150), 22);\r
-            signOutButton->setCentrePosition (infoLabel.getBounds().getCentreX(),\r
-                                              loginButton.getBottom() + 20);\r
+            subscribeButton->setSize (buttonWidth, buttonHeight);\r
+            subscribeButton->setCentrePosition (buttonCenterX, buttonCenterY);\r
+            buttonCenterY += itemDistance + buttonHeight;\r
+        }\r
+\r
+        if (signInButton.get() != nullptr)\r
+        {\r
+            signInButton->setSize (buttonWidth, buttonHeight);\r
+            signInButton->setCentrePosition (buttonCenterX, buttonCenterY);\r
+            buttonCenterY += itemDistance + buttonHeight;\r
+        }\r
+\r
+        if (switchAccountButton.get() != nullptr)\r
+        {\r
+            switchAccountButton->setSize (buttonWidth, buttonHeight);\r
+            switchAccountButton->setCentrePosition (buttonCenterX, buttonCenterY);\r
         }\r
     }\r
 \r
     void buttonClicked (Button* btn) override\r
     {\r
-        if (btn == &loginButton)\r
+        if (btn == subscribeButton.get())\r
+        {\r
+            URL ("http://www.juce.com/get-juce").launchInDefaultBrowser();\r
+        }\r
+        else if (btn == signInButton.get())\r
         {\r
-            if (isPurchaseButton)\r
-                URL ("http://www.juce.com").launchInDefaultBrowser();\r
-            else\r
-                ProjucerApplication::getApp().showLoginForm();\r
+            ProjucerApplication::getApp().showLoginForm();\r
         }\r
-        else if (btn == signOutButton.get())\r
+        else if (btn == switchAccountButton.get())\r
         {\r
-            ProjucerLicenses::getInstance()->logout();\r
-            ProjucerApplication::getApp().updateAllBuildTabs();\r
+            ProjucerApplication::getApp().showLoginForm();\r
         }\r
     }\r
 \r
+    bool isLoggedIn;\r
+\r
+private:\r
     Label infoLabel { "info", String() };\r
-    TextButton loginButton { "Log-in..." };\r
-    ScopedPointer<TextButton> signOutButton;\r
-    bool isLoggedIn, isPurchaseButton;\r
+    ScopedPointer<TextButton> subscribeButton;\r
+    ScopedPointer<TextButton> signInButton;\r
+    ScopedPointer<TextButton> switchAccountButton;\r
 };\r
 \r
 struct EnableBuildComp   : public Component\r
@@ -449,7 +479,7 @@ Component* ProjectContentComponent::createBuildTab (CompileEngineChildProcess* c
    #if JUCE_LINUX\r
     ignoreUnused (child);\r
     return new ProjucerDisabledComp ("Linux support is still under development - "\r
-                                     "please check for updates at www.juce.com!", false, false);\r
+                                     "please check for updates at www.juce.com!", false, false, false, false);\r
    #else\r
     if (child != nullptr)\r
     {\r
@@ -458,33 +488,30 @@ Component* ProjectContentComponent::createBuildTab (CompileEngineChildProcess* c
         return new BuildTabComponent (child, new ProjucerAppClasses::ErrorListComp (child->errorList));\r
     }\r
 \r
-    auto& unlockStatus = *ProjucerLicenses::getInstance();\r
-\r
-    if (unlockStatus.hasLiveCodingLicence()\r
-        && project != nullptr\r
-        && LiveBuildProjectSettings::isBuildDisabled (*project))\r
-         return new EnableBuildComp();\r
-\r
-    if (unlockStatus.isLoggedIn())\r
-        return new ProjucerDisabledComp (String ("The Projucer's live-build features are currently disabled!") + newLine\r
-                                          + newLine\r
-                                          + "Your account " + unlockStatus.getLoginName().quoted()\r
-                                          + " does not have an asscociated JUCE Pro license:",\r
-                                         true, true, true, unlockStatus.getLoginName());\r
-\r
-    if (! unlockStatus.isDLLPresent())\r
-        return new ProjucerDisabledComp (String ("The live-building DLL is missing!") + newLine\r
-                                          + newLine\r
-                                          + "To enable the compiler, you'll need to install the missing DLL "\r
-                                          + CompileEngineDLL::getDLLName().quoted() + newLine\r
-                                          + newLine\r
-                                          + "Visit the JUCE website/forum for more help on getting and installing the DLL!",\r
-                                         false, false);\r
-\r
-    return new ProjucerDisabledComp ("The Projucer's live-build features are currently disabled!\n\n"\r
-                                     "To enable them, you'll need to log-in with your JUCE account details:",\r
-                                     false, true, false);\r
+    jassert (project != nullptr);\r
+    const auto& unlockStatus = *ProjucerLicenses::getInstance();\r
+\r
+    if (unlockStatus.hasLiveCodingLicence())\r
+    {\r
+        jassert (unlockStatus.isLoggedIn());\r
+        jassert (unlockStatus.isDLLPresent());\r
+        return new EnableBuildComp();\r
+    }\r
+\r
+    return createDisabledBuildTab(unlockStatus.isLoggedIn(),\r
+                                  unlockStatus.isDLLPresent());\r
    #endif\r
+};\r
+\r
+//==============================================================================\r
+Component* ProjectContentComponent::createDisabledBuildTab(bool loggedIn, bool dllPresent) {\r
+    bool showSubscribeButton = true;\r
+    bool showSignInButton = dllPresent && ! loggedIn;\r
+    bool showSwitchAccountButton = dllPresent && loggedIn;\r
+\r
+    return new ProjucerDisabledComp (\r
+        "Subscribe to JUCE Pro or Indie to use the Projucer's live-build features:",\r
+        loggedIn, showSubscribeButton, showSignInButton, showSwitchAccountButton);\r
 }\r
 \r
 BuildTabComponent* findBuildTab (const TabbedComponent& tabs)\r
@@ -610,7 +637,7 @@ bool ProjectContentComponent::hasFileInRecentList (const File& f) const
 File ProjectContentComponent::getCurrentFile() const\r
 {\r
     return currentDocument != nullptr ? currentDocument->getFile()\r
-                                      : File::nonexistent;\r
+                                      : File();\r
 }\r
 \r
 bool ProjectContentComponent::showDocument (OpenDocumentManager::Document* doc, bool grabFocus)\r
@@ -1147,7 +1174,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
         break;\r
 \r
     case CommandIDs::deleteSelectedItem:\r
-        result.setInfo ("Delete Selected File", String::empty, CommandCategories::general, 0);\r
+        result.setInfo ("Delete Selected File", String(), CommandCategories::general, 0);\r
         result.defaultKeypresses.add (KeyPress (KeyPress::deleteKey, 0, 0));\r
         result.defaultKeypresses.add (KeyPress (KeyPress::backspaceKey, 0, 0));\r
         result.setActive (dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()) != nullptr);\r
@@ -1499,7 +1526,8 @@ void ProjectContentComponent::handleMissingSystemHeaders()
     deleteProjectTabs();\r
     createProjectTabs();\r
 \r
-    ProjucerDisabledComp* buildTab = new ProjucerDisabledComp (tabMessage, false, false);\r
+    bool isLoggedIn = ProjucerLicenses::getInstance()->isLoggedIn();\r
+    ProjucerDisabledComp* buildTab = new ProjucerDisabledComp (tabMessage, isLoggedIn, false, false, false);\r
 \r
     treeViewTabs.addTab ("Build", Colours::transparentBlack, buildTab, true);\r
     showBuildTab();\r
index f87eab627450185ec74f326bdaabc76b5951af0f..534079f2320fa16d85ba23a029a9d3b5679ac829 100644 (file)
@@ -154,6 +154,8 @@ private:
     void timerCallback() override;\r
 \r
     Component* createBuildTab (CompileEngineChildProcess*);\r
+    Component* createDisabledBuildTab (bool loggedIn, bool dllPresent);\r
+\r
     bool isContinuousRebuildEnabled()           { return getAppSettings().getGlobalProperties().getBoolValue ("continuousRebuild", true);  }\r
     void setContinuousRebuildEnabled (bool b)   { getAppSettings().getGlobalProperties().setValue ("continuousRebuild", b); }\r
     void rebuildNow();\r
index 3bddcb4514cfbc96f60047b0caa6e19d26cef6d7..1ae766516f200329f592a29d9607b0c453482a90 100644 (file)
@@ -140,7 +140,7 @@ public:
     virtual void browseToAddExistingFiles()\r
     {\r
         const File location (item.isGroup() ? item.determineGroupFolder() : getFile());\r
-        FileChooser fc ("Add Files to Jucer Project", location, String::empty, false);\r
+        FileChooser fc ("Add Files to Jucer Project", location, String(), false);\r
 \r
         if (fc.browseForMultipleFilesOrDirectories())\r
         {\r
@@ -156,7 +156,7 @@ public:
     virtual void checkFileStatus()  // (recursive)\r
     {\r
         const File file (getFile());\r
-        const bool nowMissing = file != File::nonexistent && ! file.exists();\r
+        const bool nowMissing = file != File() && ! file.exists();\r
 \r
         if (nowMissing != isFileMissing)\r
         {\r
@@ -235,7 +235,7 @@ public:
     bool mightContainSubItems() override                { return item.getNumChildren() > 0; }\r
     String getUniqueName() const override               { jassert (item.getID().isNotEmpty()); return item.getID(); }\r
     bool canBeSelected() const override                 { return true; }\r
-    String getTooltip() override                        { return String::empty; }\r
+    String getTooltip() override                        { return String(); }\r
     File getDraggableFile() const override              { return getFile(); }\r
 \r
     var getDragSourceDescription() override\r
index 3ee866b953cb1bffebf006f1e46defd5097cab16..6fbcc4d44f5cb8ab5b0b237a7de1b38e5756e7d9 100644 (file)
@@ -37,12 +37,21 @@ public:
     void drawToggleButton (Graphics& g, ToggleButton& button, bool /*isMouseOverButton*/, bool /*isButtonDown*/) override\r
     {\r
         g.setColour (Colours::white);\r
-        g.fillEllipse (4.0f, 4.0f, 13.0f, 13.0f);\r
+        Rectangle<float> box (4.0f, 4.0f, 13.0f, 13.0f);\r
+        g.fillRoundedRectangle (box, 3.0f);\r
 \r
         if (button.getToggleState())\r
         {\r
             g.setColour (Colours::black);\r
-            g.fillEllipse (6.0f, 6.0f, 9.0f, 9.0f);\r
+\r
+            Path tick;\r
+            tick.startNewSubPath (box.getX(), box.getCentreY() + 1.0f);\r
+            tick.lineTo (box.getCentreX() - 1.0f, box.getBottom());\r
+            tick.lineTo (box.getRight(), box.getY());\r
+\r
+            const AffineTransform trans (AffineTransform::scale (0.75, 0.75, box.getCentreX(), box.getCentreY()));\r
+\r
+            g.strokePath (tick, PathStrokeType (3.0f), trans);\r
         }\r
 \r
         g.setColour (button.findColour (ToggleButton::textColourId));\r
index b6e966e167f3c14bc9bb78da7c966669c0702f25..0c536b7eb85654bf53cffc928131d1a87fad76dc 100644 (file)
@@ -39,7 +39,7 @@ public:
                                const String& propertyDescription,\r
                                bool isDirectory,\r
                                const String& wildcards = "*",\r
-                               const File& rootToUseForRelativePaths = File::nonexistent)\r
+                               const File& rootToUseForRelativePaths = File())\r
         : PropertyComponent (propertyDescription),\r
           innerComp (valueToControl, isDirectory, wildcards, rootToUseForRelativePaths)\r
     {\r
@@ -122,8 +122,8 @@ private:
 \r
         void setTo (const File& f)\r
         {\r
-            value = (root == File::nonexistent) ? f.getFullPathName()\r
-                                                : f.getRelativePathFrom (root);\r
+            value = (root == File()) ? f.getFullPathName()\r
+                                     : f.getRelativePathFrom (root);\r
         }\r
 \r
         Value value;\r
index f9203f332307dcdd9b11a911585d742a742a5078..e594a8c8bb45615f641532ba7c02edbda824d51a 100644 (file)
@@ -55,11 +55,9 @@ namespace Ids
     DECLARE_ID (intermediatesPath);\r
     DECLARE_ID (modulePaths);\r
     DECLARE_ID (searchpaths);\r
-    DECLARE_ID (vstFolder);\r
     DECLARE_ID (vst3Folder);\r
     DECLARE_ID (rtasFolder);\r
     DECLARE_ID (auFolder);\r
-    DECLARE_ID (vst2Path);\r
     DECLARE_ID (vst3Path);\r
     DECLARE_ID (rtasPath);\r
     DECLARE_ID (aaxPath);\r
@@ -114,6 +112,7 @@ namespace Ids
     DECLARE_ID (jucerVersion);\r
     DECLARE_ID (prebuildCommand);\r
     DECLARE_ID (postbuildCommand);\r
+    DECLARE_ID (internalPostBuildComamnd);\r
     DECLARE_ID (generateManifest);\r
     DECLARE_ID (useRuntimeLibDLL);\r
     DECLARE_ID (wholeProgramOptimisation);\r
@@ -177,6 +176,7 @@ namespace Ids
     DECLARE_ID (gradleWrapperVersion);\r
     DECLARE_ID (gradleToolchain);\r
     DECLARE_ID (gradleToolchainVersion);\r
+    DECLARE_ID (linuxExtraPkgConfig);\r
     DECLARE_ID (font);\r
     DECLARE_ID (colour);\r
     DECLARE_ID (userNotes);\r
index af29a2c556c00943e5fc28f0a31f24dad62e1054..7be4607d1fba34b04ef8f3bddaca64aaad35d3a0 100644 (file)
@@ -27,7 +27,7 @@ class SVGPathDataComponent  : public Component,
 {\r
 public:\r
     SVGPathDataComponent()\r
-        : desc (String::empty,\r
+        : desc (String(),\r
                 "Paste an SVG path string into the top box, and it'll be converted to some C++ "\r
                 "code that will load it as a Path object..")\r
     {\r
index 9228c67304aef48c63e1973593095ea57026389b..506038a3f65c4e06d625b41111889af4c1cfe8e8 100644 (file)
@@ -236,7 +236,7 @@ Value StoredSettings::getGlobalPath (const Identifier& key, DependencyPathOS os)
 \r
 String StoredSettings::getFallbackPath (const Identifier& key, DependencyPathOS os)\r
 {\r
-    if (key == Ids::vst2Path || key == Ids::vst3Path)\r
+    if (key == Ids::vst3Path)\r
         return os == TargetOS::windows ? "c:\\SDKs\\VST3 SDK"\r
                                        : "~/SDKs/VST3 SDK";\r
 \r
@@ -275,11 +275,7 @@ bool StoredSettings::isGlobalPathValid (const Identifier& key, const String& pat
 {\r
     String fileToCheckFor;\r
 \r
-    if (key == Ids::vst2Path)\r
-    {\r
-        fileToCheckFor = "public.sdk/source/vst2.x/audioeffectx.h";\r
-    }\r
-    else if (key == Ids::vst3Path)\r
+    if (key == Ids::vst3Path)\r
     {\r
         fileToCheckFor = "base/source/baseiids.cpp";\r
     }\r
index 2fa6f927b43ccbe3e958195de02f727442c24ab8..cf37e6ed1ca93b624312da6393d77d21c336da60 100644 (file)
@@ -201,7 +201,7 @@ struct TranslationHelpers
                 if (currentItem.isNotEmpty())\r
                     result.add (currentItem);\r
 \r
-                currentItem = String::empty;\r
+                currentItem = String();\r
             }\r
             else\r
             {\r
@@ -273,7 +273,7 @@ struct TranslationHelpers
         {\r
             lines.add ("language: " + original.getLanguageName());\r
             lines.add ("countries: " + original.getCountryCodes().joinIntoString (" "));\r
-            lines.add (String::empty);\r
+            lines.add (String());\r
 \r
             const StringArray& originalKeys (originalStrings.getAllKeys());\r
             const StringArray& originalValues (originalStrings.getAllValues());\r
@@ -296,7 +296,7 @@ struct TranslationHelpers
         {\r
             lines.add ("language: [enter full name of the language here!]");\r
             lines.add ("countries: [enter list of 2-character country codes here!]");\r
-            lines.add (String::empty);\r
+            lines.add (String());\r
         }\r
 \r
         for (int i = 0; i < preStrings.size(); ++i)\r
@@ -429,8 +429,7 @@ private:
     void loadFile()\r
     {\r
         FileChooser fc ("Choose a translation file to load",\r
-                        File::nonexistent,\r
-                        "*");\r
+                        File(), "*");\r
 \r
         if (fc.browseForFileToOpen())\r
         {\r
index 23a363c07ae9c4ba5fcef622183a1ff771307478..bc8edf59a51e809f8c9c3dec3530b73841399a35 100644 (file)
@@ -27,7 +27,7 @@ class UTF8Component  : public Component,
 {\r
 public:\r
     UTF8Component()\r
-        : desc (String::empty,\r
+        : desc (String(),\r
                 "Type any string into the box, and it'll be shown below as a portable UTF-8 literal, "\r
                 "ready to cut-and-paste into your source-code...")\r
     {\r
index 0946db02f67347c2644318a74c20ded1d7ca07d2..b00791115d55583b2cbfeaf8dc1e9e89ad16a3ba 100644 (file)
@@ -142,7 +142,7 @@ public:
                             TRANS ("Please enter the name for the new class"),\r
                             AlertWindow::NoIcon, nullptr);\r
 \r
-            aw.addTextEditor (getClassNameFieldName(), String::empty, String::empty, false);\r
+            aw.addTextEditor (getClassNameFieldName(), String(), String(), false);\r
             aw.addButton (TRANS ("Create Files"),  1, KeyPress (KeyPress::returnKey));\r
             aw.addButton (TRANS ("Cancel"),        0, KeyPress (KeyPress::escapeKey));\r
 \r
index 6656c051f2ca487b5595dc55cd5eaff45fc05005..56204c40a7ad04a338c1b6aa86e108d13dc6b1eb 100644 (file)
@@ -38,7 +38,7 @@ static ComboBox& createFileCreationOptionComboBox (Component& setupComp,
     c->addItemList (fileOptions, 1);\r
     c->setSelectedId (1, dontSendNotification);\r
 \r
-    Label* l = new Label (String::empty, TRANS("Files to Auto-Generate") + ":");\r
+    Label* l = new Label (String(), TRANS("Files to Auto-Generate") + ":");\r
     l->attachToComponent (c, true);\r
     itemsCreated.add (l);\r
 \r
index 98797ed81f73c3426a7feb5fa2322de094c84ef6..db454bb8a790859502c7a7fd9625f723b9689a24 100644 (file)
@@ -34,9 +34,9 @@ public:
     ModulesFolderPathBox (File initialFileOrDirectory)\r
         : currentPathBox ("currentPathBox"),\r
           openFolderButton (TRANS("...")),\r
-          modulesLabel (String::empty, TRANS("Modules Folder") + ":")\r
+          modulesLabel (String(), TRANS("Modules Folder") + ":")\r
     {\r
-        if (initialFileOrDirectory == File::nonexistent)\r
+        if (initialFileOrDirectory == File())\r
             initialFileOrDirectory = findDefaultModulesFolder();\r
 \r
         setModulesFolder (initialFileOrDirectory);\r
@@ -263,14 +263,14 @@ public:
     WizardComp()\r
         : platformTargets(),\r
           projectName (TRANS("Project name")),\r
-          nameLabel (String::empty, TRANS("Project Name") + ":"),\r
-          typeLabel (String::empty, TRANS("Project Type") + ":"),\r
+          nameLabel (String(), TRANS("Project Name") + ":"),\r
+          typeLabel (String(), TRANS("Project Type") + ":"),\r
           fileBrowser (FileBrowserComponent::saveMode\r
                          | FileBrowserComponent::canSelectDirectories\r
                          | FileBrowserComponent::doNotClearFileNameOnRootChange,\r
                        NewProjectWizardClasses::getLastWizardFolder(), nullptr, nullptr),\r
-          fileOutline (String::empty, TRANS("Project Folder") + ":"),\r
-          targetsOutline (String::empty, TRANS("Target Platforms") + ":"),\r
+          fileOutline (String(), TRANS("Project Folder") + ":"),\r
+          targetsOutline (String(), TRANS("Target Platforms") + ":"),\r
           createButton (TRANS("Create") + "..."),\r
           cancelButton (TRANS("Cancel")),\r
           modulesPathBox (findDefaultModulesFolder())\r
index 13413d8b300ddd92d5f0e44029d5ef5fb995d9dc..dff337dd49794615f91f8b065a9464ed52eec556 100644 (file)
@@ -254,7 +254,7 @@ public:
             appFolder = appFolder.getParentDirectory();\r
         }\r
 \r
-        return File::nonexistent;\r
+        return File();\r
     }\r
 \r
 private:\r
index 68cd0d738bd7954792f0cb33b27ab0b7093e8bc8..99761d265c73a9fd7ce11f807b2cbf0ac9175f2d 100644 (file)
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := UnitTestRunner\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt \r
 \r
   TARGET := UnitTestRunner\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_audio_basics_6b797ca1.o \\r
-  $(OBJDIR)/juce_audio_devices_a742c38b.o \\r
-  $(OBJDIR)/juce_audio_formats_5a29c68a.o \\r
-  $(OBJDIR)/juce_audio_processors_dea3173d.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
-  $(OBJDIR)/juce_cryptography_6de2ebff.o \\r
-  $(OBJDIR)/juce_data_structures_72d3da2c.o \\r
-  $(OBJDIR)/juce_events_d2be882c.o \\r
-  $(OBJDIR)/juce_graphics_9c18891e.o \\r
-  $(OBJDIR)/juce_gui_basics_8a6da59c.o \\r
-  $(OBJDIR)/juce_gui_extra_4a026f23.o \\r
-  $(OBJDIR)/juce_opengl_cd70b4c2.o \\r
-  $(OBJDIR)/juce_osc_be4cee16.o \\r
-  $(OBJDIR)/juce_video_f128c512.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \\r
+  $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \\r
+  $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \\r
+  $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \\r
+  $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \\r
+  $(JUCE_OBJDIR)/juce_events_d2be882c.o \\r
+  $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \\r
+  $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \\r
+  $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \\r
+  $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \\r
+  $(JUCE_OBJDIR)/juce_osc_be4cee16.o \\r
+  $(JUCE_OBJDIR)/juce_video_f128c512.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking UnitTestRunner\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama\r
+\r
 clean:\r
        @echo Cleaning UnitTestRunner\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping UnitTestRunner\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_devices.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_formats.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_audio_processors.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_cryptography.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_data_structures.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_events.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_graphics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_basics.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_gui_extra.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_opengl.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_osc.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_video.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index 92c2d9f08a97a06781b5d45e4d8826a2e8945f63..691121de295a611640ae4f58de246c301775e7a1 100644 (file)
                160B1F8323819A36A4CC4C3F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; };
                16397F1BBEA97057B0654612 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
                16593ED55AEBE25460A4EBA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInactivityDetector.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h"; sourceTree = "SOURCE_ROOT"; };
+               16CA9656E3C51EFD0962ABC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; };
                17062116C1616CD502D341A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c"; sourceTree = "SOURCE_ROOT"; };
                171628256C4807C720EDF3B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jinclude.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jinclude.h"; sourceTree = "SOURCE_ROOT"; };
                1763FA2F0163DB596EF3700A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; };
                260BCCEEC92A36331EEFF027 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OSCArgument.cpp"; path = "../../../../modules/juce_osc/osc/juce_OSCArgument.cpp"; sourceTree = "SOURCE_ROOT"; };
                262E707413C300E64622593C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                26C762280E4F60A092DFFB34 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; };
+               26E5B298938701E1D018220A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexBox.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.h"; sourceTree = "SOURCE_ROOT"; };
                27166FCCEBF8B19FC2ED5B17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitreader.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c"; sourceTree = "SOURCE_ROOT"; };
                2741E1112861631B9834FBC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
                2755EC73A85568278839728D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../../modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; };
                B1626CB532C9DF380E7B7CD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
                B16C1AED530B3A79338D5259 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; };
                B18BD25724FF16CA47FF7E50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; };
+               B25FBFC3C69276864F38B667 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; };
                B2AA22B23779CE171655790B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; };
                B2B2B0D649F7F56CA1204146 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; };
                B2B8E7BE0607DA166DAAEFEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; };
                E51C2746AF287DBC983CAF65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; };
                E55B6C4F535EDA51815F5DE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h"; sourceTree = "SOURCE_ROOT"; };
                E5EFB122EEF47FB2E7A3FB77 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_11.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h"; sourceTree = "SOURCE_ROOT"; };
+               E5F7384BF7C987FE5EACA732 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; };
                E61E0DA3871788BA6154F2E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; };
                E674FC044530BA5A4171B4D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctfst.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctfst.c"; sourceTree = "SOURCE_ROOT"; };
                E7153B9DA221B856B57005B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3Headers.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3Headers.h"; sourceTree = "SOURCE_ROOT"; };
                                        E7153B9DA221B856B57005B2,
                                        458AFB04FC657C0B8E140C57,
                                        D42D77C52B0B860D000123A7,
+                                       16CA9656E3C51EFD0962ABC4,
                                        E51C2746AF287DBC983CAF65,
                                        E3D8F97C26B8E03820AFC971,
                                        763A365B46F5D3EDD8F8B1EF, ); name = "format_types"; sourceTree = "<group>"; };
                                        4426EC205176AA7852F91116,
                                        E4DCAABE4085DF010D24210A,
                                        6D2B5D8FEC6A4D43F0F6256A,
+                                       E5F7384BF7C987FE5EACA732,
+                                       26E5B298938701E1D018220A,
+                                       B25FBFC3C69276864F38B667,
                                        7C1569CE706496770E9FF916,
                                        564B46F9A1C2CEE40DC7E381,
                                        E1A16FFA5C8586083CB95802,
index 540363f7b8b676ba92a1265ecf72d347d603ddcf..8bfa57321b151e905496883ea1e0b9ed2d223757 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 49116029c7247a45ba3f4c9db1cbd6f6e52f2118..98d585b9c76b86ae5c539607653a8e4b0f08df0d 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 09b5b81631f333f256dd0e41cd837109bd8dc05c..400560f9ea30f0a87e089f64420b823167bca91d 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 759f4539cd9f4024283ffe51a85676fcd065aee8..fe6b5ba532f8f47878923d8bd98f5985fc48f54f 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="Z2Xzcp" name="UnitTestRunner" projectType="consoleapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.UnitTestRunner" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.3" defines="JUCE_UNIT_TESTS=1">\r
+              jucerVersion="4.2.4" defines="JUCE_UNIT_TESTS=1">\r
   <MAINGROUP id="GZdWCU" name="UnitTestRunner">\r
     <GROUP id="{22894462-E1A9-036F-ED94-B51A50C87552}" name="Source">\r
       <FILE id="ynaYaM" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 237f6a4900db5cc77b5a42604eeb130367d82d9a..35fe457d704a44ac57fa4e0535ac884c5063dfa1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="3t6YqETY1" name="BinaryBuilder" projectType="consoleapp"\r
-              juceFolder="../../../juce" jucerVersion="4.2.3" bundleIdentifier="com.rawmaterialsoftware.binarybuilder"\r
+              juceFolder="../../../juce" jucerVersion="4.2.4" bundleIdentifier="com.rawmaterialsoftware.binarybuilder"\r
               includeBinaryInAppConfig="1" version="1.0.0">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
index 2e152dae8b710c4a3cdd49748e0a793351fe3d73..8fd346f61466dcc632a72593566b27418502a8f6 100644 (file)
@@ -4,79 +4,91 @@
 # (this disables dependency generation if multiple architectures are set)\r
 DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)\r
 \r
+ifndef STRIP\r
+  STRIP=strip\r
+endif\r
+\r
+ifndef AR\r
+  AR=ar\r
+endif\r
+\r
 ifndef CONFIG\r
   CONFIG=Debug\r
 endif\r
 \r
 ifeq ($(CONFIG),Debug)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Debug\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Debug\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -ldl -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs libcurl) -ldl -lpthread -lrt \r
 \r
   TARGET := BinaryBuilder\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 ifeq ($(CONFIG),Release)\r
-  BINDIR := build\r
-  LIBDIR := build\r
-  OBJDIR := build/intermediate/Release\r
-  OUTDIR := build\r
+  JUCE_BINDIR := build\r
+  JUCE_LIBDIR := build\r
+  JUCE_OBJDIR := build/intermediate/Release\r
+  JUCE_OUTDIR := build\r
 \r
   ifeq ($(TARGET_ARCH),)\r
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
-  CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
-  CXXFLAGS += $(CFLAGS) -std=c++11\r
-  LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -ldl -lpthread -lrt \r
+  JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules\r
+  JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os\r
+  JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11\r
+  JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs libcurl) -ldl -lpthread -lrt \r
 \r
   TARGET := BinaryBuilder\r
-  BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
-  CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)\r
+  BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)\r
+  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)\r
 endif\r
 \r
 OBJECTS := \\r
-  $(OBJDIR)/Main_90ebc5c2.o \\r
-  $(OBJDIR)/juce_core_75b14332.o \\r
+  $(JUCE_OBJDIR)/Main_90ebc5c2.o \\r
+  $(JUCE_OBJDIR)/juce_core_75b14332.o \\r
 \r
 .PHONY: clean\r
 \r
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)\r
+$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES)\r
        @echo Linking BinaryBuilder\r
-       -@mkdir -p $(BINDIR)\r
-       -@mkdir -p $(LIBDIR)\r
-       -@mkdir -p $(OUTDIR)\r
+       -@mkdir -p $(JUCE_BINDIR)\r
+       -@mkdir -p $(JUCE_LIBDIR)\r
+       -@mkdir -p $(JUCE_OUTDIR)\r
        @$(BLDCMD)\r
 \r
+check-pkg-config:\r
+       @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }\r
+       @pkg-config --print-errors libcurl\r
+\r
 clean:\r
        @echo Cleaning BinaryBuilder\r
        @$(CLEANCMD)\r
 \r
 strip:\r
        @echo Stripping BinaryBuilder\r
-       -@strip --strip-unneeded $(OUTDIR)/$(TARGET)\r
+       -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)\r
 \r
-$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling Main.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
-$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
-       -@mkdir -p $(OBJDIR)\r
+$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp\r
+       -@mkdir -p $(JUCE_OBJDIR)\r
        @echo "Compiling juce_core.cpp"\r
-       @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"\r
+       @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<"\r
 \r
 -include $(OBJECTS:%.o=%.d)\r
index c347d8f20902a663d5944c9dbda237203d60dd12..212400352ecf2a7ce6531dcd1b9548e83446531e 100644 (file)
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "/usr/bin";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.rawmaterialsoftware.binarybuilder;
                                SDKROOT_ppc = macosx10.5; }; name = Debug; };
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                                HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)");
                                INSTALL_PATH = "/usr/bin";
+                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MACOSX_DEPLOYMENT_TARGET_ppc = 10.4;
                                PRODUCT_BUNDLE_IDENTIFIER = com.rawmaterialsoftware.binarybuilder;
                                SDKROOT_ppc = macosx10.5; }; name = Release; };
index 4e8f993bd34281fce942b03bb2ff56216e7a7844..0f39490cd43df131aab1a62d0b1fb2008f46b13e 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 \r
 #endif  // __JUCE_APPCONFIG_3T6YQETY1__\r
index 03eb1e30c018949713bf58c9c8f7f94861fcab41..16c3d0ecf13c51d52c8207ee7a49d1925ad1886f 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <ExcludedFromBuild>true</ExcludedFromBuild>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <ExcludedFromBuild>true</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioChannelSet.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentBuilder.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ComponentMovementWatcher.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_MultiDocumentPanel.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ResizableBorderComponent.h"/>\r
index 84ac26dd50c146b92f7929debc9bacab3fae0aad..b4065dfa70a3293a277877a784ffd850f8afca06 100644 (file)
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.cpp">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClCompile>\r
     <ClCompile Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.cpp">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClCompile>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTInterface.h">\r
+      <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTMidiEventList.h">\r
       <Filter>Juce Modules\juce_audio_processors\format_types</Filter>\r
     </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_ConcertinaPanel.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexBox.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_FlexItem.h">\r
+      <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_gui_basics\layout\juce_GroupComponent.h">\r
       <Filter>Juce Modules\juce_gui_basics\layout</Filter>\r
     </ClInclude>\r
index 4cf7fcc825a478aa6ef7225d3e3b1684e490c038..7fc1d5e297bcb2f072ac910cba4bf2c5e2d49614 100644 (file)
  //#define JUCE_USE_CURL\r
 #endif\r
 \r
+#ifndef    JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+ //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+#endif\r
+\r
+#ifndef    JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_graphics flags:\r
 \r
index 967c659f7752d3ed57e9bce6228e66df14edc03b..88dcba0ee1660677849ce1706cd93de097fa62b6 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IvabE4" name="juce_dll" projectType="library" version="1.0.0"\r
               juceLinkage="none" bundleIdentifier="com.rawmaterialsoftware.juce"\r
-              jucerVersion="4.2.3" defines="JUCE_DLL_BUILD=1" includeBinaryInAppConfig="1">\r
+              jucerVersion="4.2.4" defines="JUCE_DLL_BUILD=1" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <VS2010 targetFolder="Builds/VisualStudio2010">\r
       <CONFIGURATIONS>\r
index 164777db087a432664c79cdff40b8861f968dbcb..28275691bc04f6e98b780a9b7b98b805a4d9f5d8 100644 (file)
@@ -133,8 +133,10 @@ Possible values:
     OSXFrameworks:  (Optional) A list (space or comma-separated) of OSX frameworks that are needed\r
                     by this module\r
     iOSFrameworks:  (Optional) Like OSXFrameworks, but for iOS targets\r
-    linuxLibs:      (Optional) A list (space or comma-separated) of static libs that should be linked in a\r
+    linuxLibs:      (Optional) A list (space or comma-separated) of static or dynamic libs that should be linked in a\r
                     linux build (these are passed to the linker via the -l flag)\r
+    linuxPackages:  (Optional) A list (space or comma-separated) pkg-config packages that should be used to pass\r
+                    compiler (CFLAGS) and linker (LDFLAGS) flags\r
     mingwLibs:      (Optional) A list (space or comma-separated) of static libs that should be linked in a\r
                     win32 mingw build (these are passed to the linker via the -l flag)\r
 \r
index 19e91bb8898a0c9f7ea9d27e94a6b294917a51fa..05c47832bf2c5f30e91d06b1bb46886a2783c7d2 100644 (file)
@@ -397,9 +397,9 @@ public:
         convert between 32 and 64 bit float buffer types.\r
     */\r
     template <typename OtherType>\r
-    void makeCopyOf (const AudioBuffer<OtherType>& other)\r
+    void makeCopyOf (const AudioBuffer<OtherType>& other, bool avoidReallocating = false)\r
     {\r
-        setSize (other.getNumChannels(), other.getNumSamples());\r
+        setSize (other.getNumChannels(), other.getNumSamples(), false, false, avoidReallocating);\r
 \r
         if (other.hasBeenCleared())\r
         {\r
index 6742c9e913be373005ac8db425a1e6cd1dcd0b37..cbd3300d3c7e54b34f3269d37df4ebdabf2bd03e 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_basics\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE audio and MIDI data classes\r
   description:      Classes for audio buffer manipulation, midi message handling, synthesis, etc.\r
   website:          http://www.juce.com/juce\r
index c9abe863656b78188a8042afcf3797b0d49fd060..fe5937b2c9a9535e3eb1206601c6736c0cc0ed15 100644 (file)
@@ -248,7 +248,7 @@ bool MidiFile::readFrom (InputStream& sourceStream)
     clear();\r
     MemoryBlock data;\r
 \r
-    const int maxSensibleMidiFileSize = 2 * 1024 * 1024;\r
+    const int maxSensibleMidiFileSize = 200 * 1024 * 1024;\r
 \r
     // (put a sanity-check on the file size, as midi files are generally small)\r
     if (sourceStream.readIntoMemoryBlock (data, maxSensibleMidiFileSize))\r
index 919b984329e17f43754eb1fd02dc0733ab6903ac..30e2411a25aa75c27fa124898954975efe850fba 100644 (file)
@@ -25,7 +25,8 @@
 MPESynthesiserBase::MPESynthesiserBase()\r
     : instrument (new MPEInstrument),\r
       sampleRate (0),\r
-      minimumSubBlockSize (32)\r
+      minimumSubBlockSize (32),\r
+      subBlockSubdivisionIsStrict (false)\r
 {\r
     instrument->addListener (this);\r
 }\r
@@ -123,7 +124,7 @@ void MPESynthesiserBase::renderNextBlock (AudioBuffer<floatType>& outputAudio,
             break;\r
         }\r
 \r
-        if (samplesToNextMidiMessage < (firstEvent ? 1 : minimumSubBlockSize))\r
+        if (samplesToNextMidiMessage < ((firstEvent && ! subBlockSubdivisionIsStrict) ? 1 : minimumSubBlockSize))\r
         {\r
             handleMidiEvent (m);\r
             continue;\r
@@ -157,8 +158,9 @@ void MPESynthesiserBase::setCurrentPlaybackSampleRate (const double newRate)
 }\r
 \r
 //==============================================================================\r
-void MPESynthesiserBase::setMinimumRenderingSubdivisionSize (int numSamples) noexcept\r
+void MPESynthesiserBase::setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict) noexcept\r
 {\r
     jassert (numSamples > 0); // it wouldn't make much sense for this to be less than 1\r
     minimumSubBlockSize = numSamples;\r
+    subBlockSubdivisionIsStrict = shouldBeStrict;\r
 }\r
index ad49284535edf585b14b5987832668bde403e5e7..d85a9a4324203da033025afe9805465578d00742 100644 (file)
@@ -127,8 +127,14 @@ public:
         The default setting is 32, which means that midi messages are accurate to about < 1ms\r
         accuracy, which is probably fine for most purposes, but you may want to increase or\r
         decrease this value for your synth.\r
+\r
+        If shouldBeStrict is true, the audio sub-blocks will strictly never be smaller than numSamples.\r
+\r
+        If shouldBeStrict is false (default), the first audio sub-block in the buffer is allowed\r
+        to be smaller, to make sure that the first MIDI event in a buffer will always be sample-accurate\r
+        (this can sometimes help to avoid quantisation or phasing issues).\r
     */\r
-    void setMinimumRenderingSubdivisionSize (int numSamples) noexcept;\r
+    void setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict = false) noexcept;\r
 \r
     //==============================================================================\r
     /** Puts the synthesiser into legacy mode.\r
@@ -185,6 +191,7 @@ private:
     CriticalSection noteStateLock;\r
     double sampleRate;\r
     int minimumSubBlockSize;\r
+    bool subBlockSubdivisionIsStrict;\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESynthesiserBase)\r
 };\r
index bd92836af2b112f7287f4fc95df85aba9e2fdacd..8bc95838b1b62bef9561bebb146986616bc6042d 100644 (file)
@@ -88,6 +88,7 @@ Synthesiser::Synthesiser()
     : sampleRate (0),\r
       lastNoteOnCounter (0),\r
       minimumSubBlockSize (32),\r
+      subBlockSubdivisionIsStrict (false),\r
       shouldStealNotes (true)\r
 {\r
     for (int i = 0; i < numElementsInArray (lastPitchWheelValues); ++i)\r
@@ -147,10 +148,11 @@ void Synthesiser::setNoteStealingEnabled (const bool shouldSteal)
     shouldStealNotes = shouldSteal;\r
 }\r
 \r
-void Synthesiser::setMinimumRenderingSubdivisionSize (int numSamples) noexcept\r
+void Synthesiser::setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict) noexcept\r
 {\r
     jassert (numSamples > 0); // it wouldn't make much sense for this to be less than 1\r
     minimumSubBlockSize = numSamples;\r
+    subBlockSubdivisionIsStrict = shouldBeStrict;\r
 }\r
 \r
 //==============================================================================\r
@@ -204,7 +206,7 @@ void Synthesiser::processNextBlock (AudioBuffer<floatType>& outputAudio,
             break;\r
         }\r
 \r
-        if (samplesToNextMidiMessage < (firstEvent ? 1 : minimumSubBlockSize))\r
+        if (samplesToNextMidiMessage < ((firstEvent && ! subBlockSubdivisionIsStrict) ? 1 : minimumSubBlockSize))\r
         {\r
             handleMidiEvent (m);\r
             continue;\r
index 0cf92dc7d46845053a3cf85cc442eb183ff044af..9cb2f053dcaffa37d23b0fa55c4428053b96bbd0 100644 (file)
@@ -539,8 +539,14 @@ public:
         The default setting is 32, which means that midi messages are accurate to about < 1ms\r
         accuracy, which is probably fine for most purposes, but you may want to increase or\r
         decrease this value for your synth.\r
+\r
+        If shouldBeStrict is true, the audio sub-blocks will strictly never be smaller than numSamples.\r
+\r
+        If shouldBeStrict is false (default), the first audio sub-block in the buffer is allowed\r
+        to be smaller, to make sure that the first MIDI event in a buffer will always be sample-accurate\r
+        (this can sometimes help to avoid quantisation or phasing issues).\r
     */\r
-    void setMinimumRenderingSubdivisionSize (int numSamples) noexcept;\r
+    void setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict = false) noexcept;\r
 \r
 protected:\r
     //==============================================================================\r
@@ -615,6 +621,7 @@ private:
     double sampleRate;\r
     uint32 lastNoteOnCounter;\r
     int minimumSubBlockSize;\r
+    bool subBlockSubdivisionIsStrict;\r
     bool shouldStealNotes;\r
     BigInteger sustainPedalsDown;\r
 \r
index 25678d7b4a90598e104f3472494ddee150bc993e..62c99379ba4970cce2932756c93002d6235fece1 100755 (executable)
@@ -151,7 +151,6 @@ AudioDeviceManager::AudioDeviceManager()
     : numInputChansNeeded (0),\r
       numOutputChansNeeded (2),\r
       listNeedsScanning (true),\r
-      inputLevel (0),\r
       cpuUsageMs (0),\r
       timeToCpuScale (0)\r
 {\r
@@ -761,31 +760,8 @@ void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelDat
 {\r
     const ScopedLock sl (audioCallbackLock);\r
 \r
-    if (inputLevelMeasurementEnabledCount.get() > 0 && numInputChannels > 0)\r
-    {\r
-        for (int j = 0; j < numSamples; ++j)\r
-        {\r
-            float s = 0;\r
-\r
-            for (int i = 0; i < numInputChannels; ++i)\r
-                s += std::abs (inputChannelData[i][j]);\r
-\r
-            s /= numInputChannels;\r
-\r
-            const double decayFactor = 0.99992;\r
-\r
-            if (s > inputLevel)\r
-                inputLevel = s;\r
-            else if (inputLevel > 0.001f)\r
-                inputLevel *= decayFactor;\r
-            else\r
-                inputLevel = 0;\r
-        }\r
-    }\r
-    else\r
-    {\r
-        inputLevel = 0;\r
-    }\r
+    inputLevelMeter.updateLevel (inputChannelData, numInputChannels, numSamples);\r
+    outputLevelMeter.updateLevel (const_cast<const float**> (outputChannelData), numOutputChannels, numSamples);\r
 \r
     if (callbacks.size() > 0)\r
     {\r
@@ -1141,18 +1117,51 @@ void AudioDeviceManager::playTestSound()
 }\r
 \r
 //==============================================================================\r
-void AudioDeviceManager::enableInputLevelMeasurement (const bool enableMeasurement)\r
+AudioDeviceManager::LevelMeter::LevelMeter() noexcept : level() {}\r
+\r
+void AudioDeviceManager::LevelMeter::updateLevel (const float* const* channelData, int numChannels, int numSamples) noexcept\r
 {\r
-    if (enableMeasurement)\r
-        ++inputLevelMeasurementEnabledCount;\r
+    if (enabled.get() != 0 && numChannels > 0)\r
+    {\r
+        for (int j = 0; j < numSamples; ++j)\r
+        {\r
+            float s = 0;\r
+\r
+            for (int i = 0; i < numChannels; ++i)\r
+                s += std::abs (channelData[i][j]);\r
+\r
+            s /= numChannels;\r
+\r
+            const double decayFactor = 0.99992;\r
+\r
+            if (s > level)\r
+                level = s;\r
+            else if (level > 0.001f)\r
+                level *= decayFactor;\r
+            else\r
+                level = 0;\r
+        }\r
+    }\r
     else\r
-        --inputLevelMeasurementEnabledCount;\r
+    {\r
+        level = 0;\r
+    }\r
+}\r
 \r
-    inputLevel = 0;\r
+void AudioDeviceManager::LevelMeter::setEnabled (bool shouldBeEnabled) noexcept\r
+{\r
+    enabled.set (shouldBeEnabled ? 1 : 0);\r
+    level = 0;\r
 }\r
 \r
-double AudioDeviceManager::getCurrentInputLevel() const\r
+double AudioDeviceManager::LevelMeter::getCurrentLevel() const noexcept\r
 {\r
-    jassert (inputLevelMeasurementEnabledCount.get() > 0); // you need to call enableInputLevelMeasurement() before using this!\r
-    return inputLevel;\r
+    jassert (enabled.get() != 0); // you need to call setEnabled (true) before using this!\r
+    return level;\r
 }\r
+\r
+double AudioDeviceManager::getCurrentInputLevel() const noexcept    { return inputLevelMeter.getCurrentLevel(); }\r
+double AudioDeviceManager::getCurrentOutputLevel() const noexcept   { return outputLevelMeter.getCurrentLevel(); }\r
+\r
+void AudioDeviceManager::enableInputLevelMeasurement  (bool enable) noexcept  { inputLevelMeter.setEnabled (enable); }\r
+void AudioDeviceManager::enableOutputLevelMeasurement (bool enable) noexcept  { outputLevelMeter.setEnabled (enable); }\r
index 4d94b53b5bafc3623a4b0fb02e0a65d15ffda527..59977c63394df54a8c0445030785830ab480a8e5 100644 (file)
@@ -456,26 +456,27 @@ public:
                     bool playOnAllOutputChannels = false);\r
 \r
     //==============================================================================\r
-    /** Turns on level-measuring.\r
-\r
-        When enabled, the device manager will measure the peak input level\r
-        across all channels, and you can get this level by calling getCurrentInputLevel().\r
-\r
-        This is mainly intended for audio setup UI panels to use to create a mic\r
-        level display, so that the user can check that they've selected the right\r
-        device.\r
+    /** Turns on level-measuring for input channels.\r
+        @see getCurrentInputLevel()\r
+    */\r
+    void enableInputLevelMeasurement (bool enableMeasurement) noexcept;\r
 \r
-        A simple filter is used to make the level decay smoothly, but this is\r
-        only intended for giving rough feedback, and not for any kind of accurate\r
-        measurement.\r
+    /** Turns on level-measuring for output channels.\r
+        @see getCurrentOutputLevel()\r
     */\r
-    void enableInputLevelMeasurement (bool enableMeasurement);\r
+    void enableOutputLevelMeasurement (bool enableMeasurement) noexcept;\r
 \r
     /** Returns the current input level.\r
         To use this, you must first enable it by calling enableInputLevelMeasurement().\r
-        See enableInputLevelMeasurement() for more info.\r
+        @see enableInputLevelMeasurement()\r
+    */\r
+    double getCurrentInputLevel() const noexcept;\r
+\r
+    /** Returns the current output level.\r
+        To use this, you must first enable it by calling enableOutputLevelMeasurement().\r
+        @see enableOutputLevelMeasurement()\r
     */\r
-    double getCurrentInputLevel() const;\r
+    double getCurrentOutputLevel() const noexcept;\r
 \r
     /** Returns the a lock that can be used to synchronise access to the audio callback.\r
         Obviously while this is locked, you're blocking the audio thread from running, so\r
@@ -502,8 +503,6 @@ private:
     BigInteger inputChannels, outputChannels;\r
     ScopedPointer<XmlElement> lastExplicitSettings;\r
     mutable bool listNeedsScanning;\r
-    Atomic<int> inputLevelMeasurementEnabledCount;\r
-    double inputLevel;\r
     AudioSampleBuffer tempBuffer;\r
 \r
     struct MidiCallbackInfo\r
@@ -522,6 +521,19 @@ private:
 \r
     double cpuUsageMs, timeToCpuScale;\r
 \r
+    struct LevelMeter\r
+    {\r
+        LevelMeter() noexcept;\r
+        void updateLevel (const float* const*, int numChannels, int numSamples) noexcept;\r
+        void setEnabled (bool) noexcept;\r
+        double getCurrentLevel() const noexcept;\r
+\r
+        Atomic<int> enabled;\r
+        double level;\r
+    };\r
+\r
+    LevelMeter inputLevelMeter, outputLevelMeter;\r
+\r
     //==============================================================================\r
     class CallbackHandler;\r
     friend class CallbackHandler;\r
index e5717830e62eda48c7046499fc07604ea1707550..86669c040fdfa648a17b0b02ed422d60d2c306d0 100644 (file)
  #import <AVFoundation/AVFoundation.h>\r
  #import <CoreMIDI/MIDIServices.h>\r
 \r
+ #if TARGET_OS_SIMULATOR\r
+  #import <CoreMIDI/MIDINetworkSession.h>\r
+ #endif\r
+\r
 //==============================================================================\r
 #elif JUCE_WINDOWS\r
  #if JUCE_WASAPI\r
-  #include <MMReg.h>\r
+  #include <mmreg.h>\r
  #endif\r
 \r
  #if JUCE_ASIO\r
index a342c9cb88cb5d90fa761618bbe91825b90b8aed..bdb0c24ecc36b766a65b8a250f3bc8137369e612 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_devices\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE audio and MIDI I/O device classes\r
   description:      Classes to play and record from audio and MIDI I/O devices\r
   website:          http://www.juce.com/juce\r
@@ -42,7 +42,7 @@
   dependencies:     juce_audio_basics, juce_audio_formats, juce_events\r
   OSXFrameworks:    CoreAudio CoreMIDI DiscRecording\r
   iOSFrameworks:    CoreAudio CoreMIDI AudioToolbox AVFoundation\r
-  linuxLibs:        asound\r
+  linuxPackages:    alsa\r
   mingwLibs:        winmm\r
 \r
  END_JUCE_MODULE_DECLARATION\r
index d4734a0e065237c63f4b59fe5ac1c477f1911aaf..fc782c9f1dd1656f28caba478663f6fae741f4e7 100644 (file)
@@ -438,6 +438,8 @@ public:
 \r
     void handleStatusChange (bool enabled, const char* reason)\r
     {\r
+        const ScopedLock myScopedLock (callbackLock);\r
+\r
         JUCE_IOS_AUDIO_LOG ("handleStatusChange: enabled: " << (int) enabled << ", reason: " << reason);\r
 \r
         isRunning = enabled;\r
@@ -454,6 +456,8 @@ public:
 \r
     void handleRouteChange (const char* reason)\r
     {\r
+        const ScopedLock myScopedLock (callbackLock);\r
+\r
         JUCE_IOS_AUDIO_LOG ("handleRouteChange: reason: " << reason);\r
 \r
         fixAudioRouteIfSetToReceiver();\r
@@ -525,9 +529,9 @@ private:
         if (audioInputIsAvailable && numInputChannels > 0)\r
             err = AudioUnitRender (audioUnit, flags, time, 1, numFrames, data);\r
 \r
-        const ScopedLock sl (callbackLock);\r
+        const ScopedTryLock stl (callbackLock);\r
 \r
-        if (callback != nullptr)\r
+        if (stl.isLocked() && callback != nullptr)\r
         {\r
             if ((int) numFrames > floatData.getNumSamples())\r
                 prepareFloatBuffers ((int) numFrames);\r
@@ -778,8 +782,24 @@ void AudioSessionHolder::handleStatusChange (bool enabled, const char* reason) c
 \r
 void AudioSessionHolder::handleRouteChange (const char* reason) const\r
 {\r
-    for (auto device: activeDevices)\r
-        device->handleRouteChange (reason);\r
+    struct RouteChangeMessage : public CallbackMessage\r
+    {\r
+        RouteChangeMessage (Array<iOSAudioIODevice*> devs, const char* r)\r
+          : devices (devs), changeReason (r)\r
+        {\r
+        }\r
+\r
+        void messageCallback() override\r
+        {\r
+            for (auto device: devices)\r
+                device->handleRouteChange (changeReason);\r
+        }\r
+\r
+        Array<iOSAudioIODevice*> devices;\r
+        const char* changeReason;\r
+    };\r
+\r
+    (new RouteChangeMessage (activeDevices, reason))->post();\r
 }\r
 \r
 #undef JUCE_NSERROR_CHECK\r
index 9ec37a64ed3a0ec9e19399d0f89c6b897bce442c..1bea000bb589abfa1fa4980762f7f1c968e98154 100644 (file)
@@ -45,37 +45,17 @@ class AlsaClient : public ReferenceCountedObject
 public:\r
     typedef ReferenceCountedObjectPtr<AlsaClient> Ptr;\r
 \r
-    AlsaClient (bool forInput)\r
-        : input (forInput), handle (nullptr)\r
+    static Ptr getInstance (bool forInput)\r
     {\r
-        snd_seq_open (&handle, "default", forInput ? SND_SEQ_OPEN_INPUT\r
-                                                   : SND_SEQ_OPEN_OUTPUT, 0);\r
-    }\r
+        AlsaClient*& instance = (forInput ? inInstance : outInstance);\r
+        if (instance == nullptr)\r
+            instance = new AlsaClient (forInput);\r
 \r
-    ~AlsaClient()\r
-    {\r
-        if (handle != nullptr)\r
-        {\r
-            snd_seq_close (handle);\r
-            handle = nullptr;\r
-        }\r
-\r
-        jassert (activeCallbacks.size() == 0);\r
-\r
-        if (inputThread)\r
-        {\r
-            inputThread->stopThread (3000);\r
-            inputThread = nullptr;\r
-        }\r
+        return instance;\r
     }\r
 \r
     bool isInput() const noexcept    { return input; }\r
 \r
-    void setName (const String& name)\r
-    {\r
-        snd_seq_set_client_name (handle, name.toUTF8());\r
-    }\r
-\r
     void registerCallback (AlsaPortAndCallback* cb)\r
     {\r
         if (cb != nullptr)\r
@@ -115,6 +95,50 @@ private:
     Array<AlsaPortAndCallback*> activeCallbacks;\r
     CriticalSection callbackLock;\r
 \r
+    static AlsaClient* inInstance;\r
+    static AlsaClient* outInstance;\r
+\r
+    //==============================================================================\r
+    friend class ReferenceCountedObjectPtr<AlsaClient>;\r
+    friend struct ContainerDeletePolicy<AlsaClient>;\r
+\r
+    AlsaClient (bool forInput)\r
+        : input (forInput), handle (nullptr)\r
+    {\r
+        AlsaClient*& instance = (input ? inInstance : outInstance);\r
+        jassert (instance == nullptr);\r
+\r
+        instance = this;\r
+\r
+        snd_seq_open (&handle, "default", forInput ? SND_SEQ_OPEN_INPUT\r
+                      : SND_SEQ_OPEN_OUTPUT, 0);\r
+\r
+        snd_seq_set_client_name (handle, forInput ? JUCE_ALSA_MIDI_INPUT_NAME\r
+                                 : JUCE_ALSA_MIDI_OUTPUT_NAME);\r
+    }\r
+\r
+    ~AlsaClient()\r
+    {\r
+        AlsaClient*& instance = (input ? inInstance : outInstance);\r
+        jassert (instance != nullptr);\r
+\r
+        instance = nullptr;\r
+\r
+        if (handle != nullptr)\r
+        {\r
+            snd_seq_close (handle);\r
+            handle = nullptr;\r
+        }\r
+\r
+        jassert (activeCallbacks.size() == 0);\r
+\r
+        if (inputThread)\r
+        {\r
+            inputThread->stopThread (3000);\r
+            inputThread = nullptr;\r
+        }\r
+    }\r
+\r
     //==============================================================================\r
     class MidiInputThread   : public Thread\r
     {\r
@@ -183,24 +207,8 @@ private:
     ScopedPointer<MidiInputThread> inputThread;\r
 };\r
 \r
-\r
-static AlsaClient::Ptr globalAlsaSequencerIn()\r
-{\r
-    static AlsaClient::Ptr global (new AlsaClient (true));\r
-    return global;\r
-}\r
-\r
-static AlsaClient::Ptr globalAlsaSequencerOut()\r
-{\r
-    static AlsaClient::Ptr global (new AlsaClient (false));\r
-    return global;\r
-}\r
-\r
-static AlsaClient::Ptr globalAlsaSequencer (bool input)\r
-{\r
-    return input ? globalAlsaSequencerIn()\r
-                 : globalAlsaSequencerOut();\r
-}\r
+AlsaClient* AlsaClient::inInstance  = nullptr;\r
+AlsaClient* AlsaClient::outInstance = nullptr;\r
 \r
 //==============================================================================\r
 // represents an input or output port of the supplied AlsaClient\r
@@ -336,19 +344,23 @@ static AlsaPort iterateMidiClient (const AlsaClient::Ptr& seq,
                 && (snd_seq_port_info_get_capability (portInfo) & (forInput ? SND_SEQ_PORT_CAP_READ\r
                                                                             : SND_SEQ_PORT_CAP_WRITE)) != 0)\r
             {\r
-                deviceNamesFound.add (snd_seq_client_info_get_name (clientInfo));\r
+                const String clientName = snd_seq_client_info_get_name (clientInfo);\r
+                const String portName = snd_seq_port_info_get_name(portInfo);\r
+\r
+                if (clientName == portName)\r
+                  deviceNamesFound.add (clientName);\r
+                else\r
+                  deviceNamesFound.add (clientName + ": " + portName);\r
 \r
                 if (deviceNamesFound.size() == deviceIndexToOpen + 1)\r
                 {\r
                     const int sourcePort   = snd_seq_port_info_get_port (portInfo);\r
-                    const int sourceClient = snd_seq_client_info_get_client (clientInfo);\r
 \r
                     if (sourcePort != -1)\r
                     {\r
-                        const String name (forInput ? JUCE_ALSA_MIDI_INPUT_NAME\r
-                                                    : JUCE_ALSA_MIDI_OUTPUT_NAME);\r
-                        seq->setName (name);\r
-                        port.createPort (seq, name, forInput);\r
+                        const int sourceClient = snd_seq_client_info_get_client (clientInfo);\r
+\r
+                        port.createPort (seq, portName, forInput);\r
                         port.connectWith (sourceClient, sourcePort);\r
                     }\r
                 }\r
@@ -366,7 +378,7 @@ static AlsaPort iterateMidiDevices (const bool forInput,
                                     const int deviceIndexToOpen)\r
 {\r
     AlsaPort port;\r
-    const AlsaClient::Ptr client (globalAlsaSequencer (forInput));\r
+    const AlsaClient::Ptr client (AlsaClient::getInstance (forInput));\r
 \r
     if (snd_seq_t* const seqHandle = client->get())\r
     {\r
@@ -398,19 +410,6 @@ static AlsaPort iterateMidiDevices (const bool forInput,
     return port;\r
 }\r
 \r
-AlsaPort createMidiDevice (const bool forInput, const String& deviceNameToOpen)\r
-{\r
-    AlsaPort port;\r
-    AlsaClient::Ptr client (new AlsaClient (forInput));\r
-\r
-    if (client->get())\r
-    {\r
-        client->setName (deviceNameToOpen + (forInput ? " Input" : " Output"));\r
-        port.createPort (client, forInput ? "in" : "out", forInput);\r
-    }\r
-\r
-    return port;\r
-}\r
 \r
 //==============================================================================\r
 class MidiOutputDevice\r
@@ -461,7 +460,7 @@ public:
             numBytes -= numSent;\r
             data += numSent;\r
 \r
-            snd_seq_ev_set_source (&event, 0);\r
+            snd_seq_ev_set_source (&event, port.portId);\r
             snd_seq_ev_set_subs (&event);\r
             snd_seq_ev_set_direct (&event);\r
 \r
@@ -518,8 +517,11 @@ MidiOutput* MidiOutput::openDevice (int deviceIndex)
 MidiOutput* MidiOutput::createNewDevice (const String& deviceName)\r
 {\r
     MidiOutput* newDevice = nullptr;\r
+    AlsaPort port;\r
+\r
+    const AlsaClient::Ptr client (AlsaClient::getInstance (false));\r
 \r
-    AlsaPort port (createMidiDevice (false, deviceName));\r
+    port.createPort (client, deviceName, false);\r
 \r
     if (port.isValid())\r
     {\r
@@ -595,8 +597,11 @@ MidiInput* MidiInput::openDevice (int deviceIndex, MidiInputCallback* callback)
 MidiInput* MidiInput::createNewDevice (const String& deviceName, MidiInputCallback* callback)\r
 {\r
     MidiInput* newDevice = nullptr;\r
+    AlsaPort port;\r
+\r
+    const AlsaClient::Ptr client (AlsaClient::getInstance (true));\r
 \r
-    AlsaPort port (createMidiDevice (true, deviceName));\r
+    port.createPort (client, deviceName, true);\r
 \r
     if (port.isValid())\r
     {\r
index 3489a80404d8ef286d6100401a54831feee5fbaa..84b25404dff5081149cc1dfb6e8d0b2e5f103081 100644 (file)
@@ -254,7 +254,7 @@ struct OpenDiskDevice
 \r
         [device releaseMediaReservation];\r
         [device releaseExclusiveAccess];\r
-        return String::empty;\r
+        return String();\r
     }\r
 \r
     DRDevice* device;\r
index 39fc33c9a507764984fe7b10066e3a84b11e8f15..adbdd7050d3a56cf5f8c415c550be09101c71832 100644 (file)
@@ -149,6 +149,7 @@ bool  JUCE_CALLTYPE SystemAudioVolume::setMuted (bool mute)   { return SystemVol
 struct CoreAudioClasses\r
 {\r
 \r
+class CoreAudioIODeviceType;\r
 class CoreAudioIODevice;\r
 \r
 //==============================================================================\r
@@ -847,6 +848,11 @@ private:
                 intern->deviceDetailsChanged();\r
                 break;\r
 \r
+            case kAudioObjectPropertyOwnedObjects:\r
+                intern->stop (false);\r
+                intern->owner.deviceType.triggerAsyncAudioDeviceListChange();\r
+                break;\r
+\r
             case kAudioDevicePropertyBufferSizeRange:\r
             case kAudioDevicePropertyVolumeScalar:\r
             case kAudioDevicePropertyMute:\r
@@ -902,10 +908,12 @@ private:
 class CoreAudioIODevice   : public AudioIODevice\r
 {\r
 public:\r
-    CoreAudioIODevice (const String& deviceName,\r
+    CoreAudioIODevice (CoreAudioIODeviceType& dt,\r
+                       const String& deviceName,\r
                        AudioDeviceID inputDeviceId, const int inputIndex_,\r
                        AudioDeviceID outputDeviceId, const int outputIndex_)\r
         : AudioIODevice (deviceName, "CoreAudio"),\r
+          deviceType (dt),\r
           inputIndex (inputIndex_),\r
           outputIndex (outputIndex_),\r
           isOpen_ (false),\r
@@ -1060,6 +1068,12 @@ public:
         return lastError;\r
     }\r
 \r
+    void audioDeviceListChanged()\r
+    {\r
+        deviceType.audioDeviceListChanged();\r
+    }\r
+\r
+    CoreAudioIODeviceType& deviceType;\r
     int inputIndex, outputIndex;\r
 \r
 private:\r
@@ -1745,7 +1759,8 @@ private:
 \r
 \r
 //==============================================================================\r
-class CoreAudioIODeviceType  : public AudioIODeviceType\r
+class CoreAudioIODeviceType  : public AudioIODeviceType,\r
+                               private AsyncUpdater\r
 {\r
 public:\r
     CoreAudioIODeviceType()\r
@@ -1771,7 +1786,7 @@ public:
     }\r
 \r
     //==============================================================================\r
-    void scanForDevices()\r
+    void scanForDevices() override\r
     {\r
         hasScanned = true;\r
 \r
@@ -1827,7 +1842,7 @@ public:
         outputDeviceNames.appendNumbersToDuplicates (false, true);\r
     }\r
 \r
-    StringArray getDeviceNames (bool wantInputNames) const\r
+    StringArray getDeviceNames (bool wantInputNames) const override\r
     {\r
         jassert (hasScanned); // need to call scanForDevices() before doing this\r
 \r
@@ -1835,7 +1850,7 @@ public:
                               : outputDeviceNames;\r
     }\r
 \r
-    int getDefaultDeviceIndex (bool forInput) const\r
+    int getDefaultDeviceIndex (bool forInput) const override\r
     {\r
         jassert (hasScanned); // need to call scanForDevices() before doing this\r
 \r
@@ -1870,7 +1885,7 @@ public:
         return 0;\r
     }\r
 \r
-    int getIndexOfDevice (AudioIODevice* device, bool asInput) const\r
+    int getIndexOfDevice (AudioIODevice* device, bool asInput) const override\r
     {\r
         jassert (hasScanned); // need to call scanForDevices() before doing this\r
 \r
@@ -1894,10 +1909,10 @@ public:
         return -1;\r
     }\r
 \r
-    bool hasSeparateInputsAndOutputs() const    { return true; }\r
+    bool hasSeparateInputsAndOutputs() const override    { return true; }\r
 \r
     AudioIODevice* createDevice (const String& outputDeviceName,\r
-                                 const String& inputDeviceName)\r
+                                 const String& inputDeviceName) override\r
     {\r
         jassert (hasScanned); // need to call scanForDevices() before doing this\r
 \r
@@ -1913,15 +1928,15 @@ public:
         String combinedName (outputDeviceName.isEmpty() ? inputDeviceName : outputDeviceName);\r
 \r
         if (inputDeviceID == outputDeviceID)\r
-            return new CoreAudioIODevice (combinedName, inputDeviceID, inputIndex, outputDeviceID, outputIndex);\r
+            return new CoreAudioIODevice (*this, combinedName, inputDeviceID, inputIndex, outputDeviceID, outputIndex);\r
 \r
         ScopedPointer<CoreAudioIODevice> in, out;\r
 \r
         if (inputDeviceID != 0)\r
-            in = new CoreAudioIODevice (inputDeviceName, inputDeviceID, inputIndex, 0, -1);\r
+            in = new CoreAudioIODevice (*this, inputDeviceName, inputDeviceID, inputIndex, 0, -1);\r
 \r
         if (outputDeviceID != 0)\r
-            out = new CoreAudioIODevice (outputDeviceName, 0, -1, outputDeviceID, outputIndex);\r
+            out = new CoreAudioIODevice (*this, outputDeviceName, 0, -1, outputDeviceID, outputIndex);\r
 \r
         if (in == nullptr)   return out.release();\r
         if (out == nullptr)  return in.release();\r
@@ -1932,6 +1947,17 @@ public:
         return combo.release();\r
     }\r
 \r
+    void audioDeviceListChanged()\r
+    {\r
+        scanForDevices();\r
+        callDeviceChangeListeners();\r
+    }\r
+\r
+    void triggerAsyncAudioDeviceListChange()\r
+    {\r
+        triggerAsyncUpdate();\r
+    }\r
+\r
     //==============================================================================\r
 private:\r
     StringArray inputDeviceNames, outputDeviceNames;\r
@@ -1969,18 +1995,17 @@ private:
         return total;\r
     }\r
 \r
-    void audioDeviceListChanged()\r
-    {\r
-        scanForDevices();\r
-        callDeviceChangeListeners();\r
-    }\r
-\r
     static OSStatus hardwareListenerProc (AudioDeviceID, UInt32, const AudioObjectPropertyAddress*, void* clientData)\r
     {\r
         static_cast<CoreAudioIODeviceType*> (clientData)->audioDeviceListChanged();\r
         return noErr;\r
     }\r
 \r
+    void handleAsyncUpdate() override\r
+    {\r
+        audioDeviceListChanged();\r
+    }\r
+\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreAudioIODeviceType)\r
 };\r
 \r
index 7e49c6b8f199d94a48d791ecc06d8451ccd4c0b9..310de94f9aa480d95ae44b4fe9f20d3f1993e3a3 100644 (file)
@@ -220,6 +220,14 @@ namespace CoreMidiHelpers
             // correctly when called from the message thread!\r
             jassert (MessageManager::getInstance()->isThisTheMessageThread());\r
 \r
+           #if TARGET_OS_SIMULATOR\r
+            // Enable MIDI for iOS simulator\r
+            MIDINetworkSession* session = [MIDINetworkSession defaultSession];\r
+            session.enabled = YES;\r
+            session.connectionPolicy = MIDINetworkConnectionPolicy_Anyone;\r
+           #endif\r
+\r
+\r
             CoreMidiHelpers::ScopedCFString name;\r
             name.cfString = getGlobalMidiClientName().toCFString();\r
             CHECK_ERROR (MIDIClientCreate (name.cfString, &globalSystemChangeCallback, nullptr, &globalMidiClient));\r
index d2b6422bea294ea9e72f70c475c3865409a9ccb6..708538f31f3598f36780d62e7be33ccdb141cd02 100644 (file)
@@ -96,11 +96,18 @@ bool check (HRESULT hr)
 }\r
 \r
 #if JUCE_MINGW\r
+\r
  #define JUCE_COMCLASS(name, guid) \\r
     struct name; \\r
     template<> struct UUIDGetter<name>   { static CLSID get() { return uuidFromString (guid); } }; \\r
     struct name\r
 \r
+ #ifdef __uuidof\r
+  #undef __uuidof\r
+ #endif\r
+\r
+ #define __uuidof(cls) UUIDGetter<cls>::get()\r
+\r
  struct PROPERTYKEY\r
  {\r
     GUID fmtid;\r
index d964d9200e4e01f55c45e2a3e9651713e8a6db34..459881a3087c604183125f3f79295268f40d4e15 100644 (file)
@@ -60,7 +60,7 @@ public:
         The source passed in will not be deleted by this object, so must be managed by\r
         the caller.\r
 \r
-        @param newSource                        the new input source to use. This may be zero\r
+        @param newSource                        the new input source to use. This may be a nullptr\r
         @param readAheadBufferSize              a size of buffer to use for reading ahead. If this\r
                                                 is zero, no reading ahead will be done; if it's\r
                                                 greater than zero, a BufferingAudioSource will be used\r
index dd3d52545e33687dc683b0e80785206a59374ba7..bc346fefdbd9e85b4e4a8fb704d063e38b208a42 100644 (file)
@@ -95,6 +95,8 @@ namespace FlacNamespace
 \r
  #if JUCE_MSVC\r
   #pragma warning (disable: 4267 4127 4244 4996 4100 4701 4702 4013 4133 4206 4312 4505 4365 4005 4334 181 111)\r
+ #else\r
+  #define HAVE_LROUND 1\r
  #endif\r
 \r
  #if JUCE_MAC\r
@@ -122,7 +124,7 @@ namespace FlacNamespace
   #define FLAC__HAS_X86INTRIN 1\r
  #endif\r
 \r
-#undef __STDC_LIMIT_MACROS\r
+ #undef __STDC_LIMIT_MACROS\r
  #define __STDC_LIMIT_MACROS 1\r
  #define flac_max jmax\r
  #define flac_min jmin\r
index ee94ceedd907def6b496bffc038f094f29a7d58e..221ab2a57c28a78280f06f32d10ca3fbba045b0c 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_formats\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE audio file format codecs\r
   description:      Classes for reading and writing various audio file formats.\r
   website:          http://www.juce.com/juce\r
index db3ae30f6d6c11c204dca432a372f2245d784d02..9261ec7271089617b86a1d88ddb37568db24ca6d 100644 (file)
@@ -38,4 +38,4 @@ struct ModifierKeyReceiver
     virtual void removeModifierKeyProvider () = 0;\r
 };\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index d1f3ea03262b3dd39c8fc8908ac3b0a090bdcccb..b5b39e44cda7f555952275bbf579e8d8687cda04 100644 (file)
@@ -34,6 +34,9 @@
     computer's audio/MIDI devices using AudioDeviceManager and AudioProcessorPlayer.\r
 */\r
 class StandalonePluginHolder\r
+   #if JUCE_IOS || JUCE_ANDROID\r
+    : private Timer\r
+   #endif\r
 {\r
 public:\r
     /** Creates an instance of the default plugin.\r
@@ -61,10 +64,18 @@ public:
         setupAudioDevices (preferredDefaultDeviceName, preferredSetupOptions);\r
         reloadPluginState();\r
         startPlaying();\r
+\r
+       #if JUCE_IOS || JUCE_ANDROID\r
+        startTimer (500);\r
+       #endif\r
     }\r
 \r
     virtual ~StandalonePluginHolder()\r
     {\r
+       #if JUCE_IOS || JUCE_ANDROID\r
+        stopTimer();\r
+       #endif\r
+\r
         deletePlugin();\r
         shutDownAudioDevices();\r
     }\r
@@ -118,7 +129,7 @@ public:
         if (settings != nullptr)\r
             f = File (settings->getValue ("lastStateFile"));\r
 \r
-        if (f == File::nonexistent)\r
+        if (f == File())\r
             f = File::getSpecialLocation (File::userDocumentsDirectory);\r
 \r
         return f;\r
@@ -133,6 +144,7 @@ public:
     /** Pops up a dialog letting the user save the processor's state to a file. */\r
     void askUserToSaveState (const String& fileSuffix = String())\r
     {\r
+       #if JUCE_MODAL_LOOPS_PERMITTED\r
         FileChooser fc (TRANS("Save current state"), getLastFile(), getFilePatterns (fileSuffix));\r
 \r
         if (fc.browseForFileToSave (true))\r
@@ -147,11 +159,15 @@ public:
                                                   TRANS("Error whilst saving"),\r
                                                   TRANS("Couldn't write to the specified file!"));\r
         }\r
+       #else\r
+        ignoreUnused (fileSuffix);\r
+       #endif\r
     }\r
 \r
     /** Pops up a dialog letting the user re-load the processor's state from a file. */\r
     void askUserToLoadState (const String& fileSuffix = String())\r
     {\r
+       #if JUCE_MODAL_LOOPS_PERMITTED\r
         FileChooser fc (TRANS("Load a saved state"), getLastFile(), getFilePatterns (fileSuffix));\r
 \r
         if (fc.browseForFileToOpen())\r
@@ -167,6 +183,9 @@ public:
                                                   TRANS("Error whilst loading"),\r
                                                   TRANS("Couldn't read from the specified file!"));\r
         }\r
+       #else\r
+        ignoreUnused (fileSuffix);\r
+       #endif\r
     }\r
 \r
     //==============================================================================\r
@@ -257,6 +276,10 @@ public:
     AudioDeviceManager deviceManager;\r
     AudioProcessorPlayer player;\r
 \r
+   #if JUCE_IOS || JUCE_ANDROID\r
+    StringArray lastMidiDevices;\r
+   #endif\r
+\r
 private:\r
     void setupAudioDevices (const String& preferredDefaultDeviceName,\r
                             const AudioDeviceManager::AudioDeviceSetup* preferredSetupOptions)\r
@@ -275,6 +298,43 @@ private:
         deviceManager.removeAudioCallback (&player);\r
     }\r
 \r
+   #if JUCE_IOS || JUCE_ANDROID\r
+    void timerCallback() override\r
+    {\r
+        StringArray midiInputDevices = MidiInput::getDevices();\r
+        if (midiInputDevices != lastMidiDevices)\r
+        {\r
+            {\r
+                const int n = lastMidiDevices.size();\r
+                for (int i = 0; i < n; ++i)\r
+                {\r
+                    const String& oldDevice = lastMidiDevices[i];\r
+\r
+                    if (! midiInputDevices.contains (oldDevice))\r
+                    {\r
+                        deviceManager.setMidiInputEnabled (oldDevice, false);\r
+                        deviceManager.removeMidiInputCallback (oldDevice, &player);\r
+                    }\r
+                }\r
+            }\r
+\r
+            {\r
+                const int n = midiInputDevices.size();\r
+                for (int i = 0; i < n; ++i)\r
+                {\r
+                    const String& newDevice = midiInputDevices[i];\r
+\r
+                    if (! lastMidiDevices.contains (newDevice))\r
+                    {\r
+                        deviceManager.addMidiInputCallback (newDevice, &player);\r
+                        deviceManager.setMidiInputEnabled (newDevice, true);\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+   #endif\r
+\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StandalonePluginHolder)\r
 };\r
 \r
index 7d671525bc3af5720d966c86c0fcb92d85bb9b90..b5b7116a550368b11261f918c75ca27baae69aba 100644 (file)
  #pragma warning (disable : 4458)\r
 #endif\r
 \r
-/*  These files come with the Steinberg VST SDK - to get them, you'll need to\r
-    visit the Steinberg website and agree to whatever is currently required to\r
-    get them. The best version to get is the VST3 SDK, which also contains\r
-    the older VST2.4 files.\r
-\r
-    Then, you'll need to make sure your include path contains your "VST SDK3"\r
-    directory (or whatever you've named it on your machine). The Projucer has\r
-    a special box for setting this path.\r
-*/\r
-#include <public.sdk/source/vst2.x/audioeffectx.h>\r
-#include <public.sdk/source/vst2.x/aeffeditor.h>\r
-#include <public.sdk/source/vst2.x/audioeffectx.cpp>\r
-#include <public.sdk/source/vst2.x/audioeffect.cpp>\r
-\r
-#if ! VST_2_4_EXTENSIONS\r
- #error "It looks like you're trying to include an out-of-date VSTSDK version - make sure you have at least version 2.4"\r
-#endif\r
+#include "../../juce_audio_processors/format_types/juce_VSTInterface.h"\r
 \r
 #ifndef JUCE_VST3_CAN_REPLACE_VST2\r
  #define JUCE_VST3_CAN_REPLACE_VST2 1\r
@@ -229,8 +213,7 @@ static Array<void*> activePlugins;
 /**\r
     This is an AudioEffectX object that holds and wraps our AudioProcessor...\r
 */\r
-class JuceVSTWrapper  : public AudioEffectX,\r
-                        public AudioProcessorListener,\r
+class JuceVSTWrapper  : public AudioProcessorListener,\r
                         public AudioPlayHead,\r
                         private Timer,\r
                         private AsyncUpdater\r
@@ -256,10 +239,21 @@ private:
         juce::AudioBuffer<FloatType> processTempBuffer;\r
     };\r
 \r
+    /** Use the same names as the VST SDK. */\r
+    struct VstOpCodeArguments\r
+    {\r
+        int32 index;\r
+        pointer_sized_int value;\r
+        void* ptr;\r
+        float opt;\r
+    };\r
+\r
 public:\r
     //==============================================================================\r
-    JuceVSTWrapper (audioMasterCallback audioMasterCB, AudioProcessor* const af)\r
-       : AudioEffectX (audioMasterCB, af->getNumPrograms(), af->getNumParameters()),\r
+    JuceVSTWrapper (VstHostCallback cb, AudioProcessor* const af)\r
+       : hostCallback (cb),\r
+         sampleRate (44100.f),\r
+         blockSize (1024),\r
          filter (af),\r
          busUtils (*filter, true, 64),\r
          chunkMemoryTime (0),\r
@@ -270,13 +264,11 @@ public:
          firstProcessCallback (true),\r
          shouldDeleteEditor (false),\r
         #if JUCE_64BIT\r
-         useNSView (true)\r
+         useNSView (true),\r
         #else\r
-         useNSView (false)\r
-        #endif\r
-        #if ! JUCE_IOS\r
-         , hostWindow (0)\r
+         useNSView (false),\r
         #endif\r
+         hostWindow (0)\r
     {\r
         busUtils.init();\r
 \r
@@ -296,7 +288,7 @@ public:
             bool success = setBusArrangementFromTotalChannelNum (maxNumInChannels, maxNumOutChannels);\r
             ignoreUnused (success);\r
 \r
-            // please file a bug if you hit this assertsion!\r
+            // please file a bug if you hit this assertion!\r
             jassert (maxNumInChannels  == busUtils.findTotalNumChannels (true) && success\r
                   && maxNumOutChannels == busUtils.findTotalNumChannels (false));\r
         }\r
@@ -305,24 +297,34 @@ public:
         filter->setPlayHead (this);\r
         filter->addListener (this);\r
 \r
-        cEffect.flags |= effFlagsHasEditor;\r
-        cEffect.version = convertHexVersionToDecimal (JucePlugin_VersionCode);\r
-\r
-        setUniqueID ((int) (JucePlugin_VSTUniqueID));\r
-\r
-        setNumInputs  (maxNumInChannels);\r
-        setNumOutputs (maxNumOutChannels);\r
-\r
-        canProcessReplacing (true);\r
-        canDoubleReplacing (filter->supportsDoublePrecisionProcessing());\r
-\r
-        isSynth ((JucePlugin_IsSynth) != 0);\r
-        setInitialDelay (filter->getLatencySamples());\r
-        programsAreChunks (true);\r
+        memset (&vstEffect, 0, sizeof (vstEffect));\r
+        vstEffect.interfaceIdentifier = juceVstInterfaceIdentifier;\r
+        vstEffect.dispatchFunction = dispatcherCB;\r
+        vstEffect.processAudioFunction = nullptr;\r
+        vstEffect.setParameterValueFunction = setParameterCB;\r
+        vstEffect.getParameterValueFunction = getParameterCB;\r
+        vstEffect.numPrograms = jmax (1, af->getNumPrograms());\r
+        vstEffect.numParameters = af->getNumParameters();\r
+        vstEffect.numInputChannels = maxNumInChannels;\r
+        vstEffect.numOutputChannels = maxNumOutChannels;\r
+        vstEffect.latency = filter->getLatencySamples();\r
+        vstEffect.effectPointer = this;\r
+        vstEffect.plugInIdentifier = JucePlugin_VSTUniqueID;\r
+        vstEffect.plugInVersion = convertHexVersionToDecimal (JucePlugin_VersionCode);\r
+        vstEffect.processAudioInplaceFunction = processReplacingCB;\r
+        vstEffect.processDoubleAudioInplaceFunction = processDoubleReplacingCB;\r
+\r
+        vstEffect.flags |= vstEffectFlagHasEditor;\r
+\r
+        vstEffect.flags |= vstEffectFlagInplaceAudio;\r
+        if (filter->supportsDoublePrecisionProcessing())\r
+            vstEffect.flags |= vstEffectFlagInplaceDoubleAudio;\r
+\r
+       #if JucePlugin_IsSynth\r
+        vstEffect.flags |= vstEffectFlagIsSynth;\r
+       #endif\r
 \r
-        // NB: For reasons best known to themselves, some hosts fail to load/save plugin\r
-        // state correctly if the plugin doesn't report that it has at least 1 program.\r
-        jassert (af->getNumPrograms() > 0);\r
+        vstEffect.flags |= vstEffectFlagDataInChunks;\r
 \r
         activePlugins.add (this);\r
     }\r
@@ -343,9 +345,7 @@ public:
                 delete filter;\r
                 filter = nullptr;\r
 \r
-               #if ! JUCE_IOS\r
                 jassert (editorComp == 0);\r
-               #endif\r
 \r
                 deleteTempChannels();\r
 \r
@@ -365,138 +365,14 @@ public:
                #endif\r
             }\r
         }\r
-    }\r
-\r
-    void open() override\r
-    {\r
-        // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here.\r
-        if (filter->hasEditor())\r
-            cEffect.flags |= effFlagsHasEditor;\r
-        else\r
-            cEffect.flags &= ~effFlagsHasEditor;\r
-    }\r
-\r
-    void close() override\r
-    {\r
-        // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here.\r
-        stopTimer();\r
-\r
-        if (MessageManager::getInstance()->isThisTheMessageThread())\r
-            deleteEditor (false);\r
-    }\r
-\r
-    //==============================================================================\r
-    bool getEffectName (char* name) override\r
-    {\r
-        String (JucePlugin_Name).copyToUTF8 (name, 64 + 1);\r
-        return true;\r
-    }\r
-\r
-    bool getVendorString (char* text) override\r
-    {\r
-        String (JucePlugin_Manufacturer).copyToUTF8 (text, 64 + 1);\r
-        return true;\r
-    }\r
-\r
-    bool getProductString (char* text) override  { return getEffectName (text); }\r
-    VstInt32 getVendorVersion() override         { return convertHexVersionToDecimal (JucePlugin_VersionCode); }\r
-    VstPlugCategory getPlugCategory() override   { return JucePlugin_VSTCategory; }\r
-    bool keysRequired()                          { return (JucePlugin_EditorRequiresKeyboardFocus) != 0; }\r
-\r
-    VstInt32 canDo (char* text) override\r
-    {\r
-        if (strcmp (text, "receiveVstEvents") == 0\r
-             || strcmp (text, "receiveVstMidiEvent") == 0\r
-             || strcmp (text, "receiveVstMidiEvents") == 0)\r
-        {\r
-           #if JucePlugin_WantsMidiInput\r
-            return 1;\r
-           #else\r
-            return -1;\r
-           #endif\r
-        }\r
-\r
-        if (strcmp (text, "sendVstEvents") == 0\r
-             || strcmp (text, "sendVstMidiEvent") == 0\r
-             || strcmp (text, "sendVstMidiEvents") == 0)\r
-        {\r
-           #if JucePlugin_ProducesMidiOutput\r
-            return 1;\r
-           #else\r
-            return -1;\r
-           #endif\r
-        }\r
-\r
-        if (strcmp (text, "receiveVstTimeInfo") == 0\r
-             || strcmp (text, "conformsToWindowRules") == 0\r
-             || strcmp (text, "bypass") == 0)\r
-        {\r
-            return 1;\r
-        }\r
-\r
-        // This tells Wavelab to use the UI thread to invoke open/close,\r
-        // like all other hosts do.\r
-        if (strcmp (text, "openCloseAnyThread") == 0)\r
-            return -1;\r
-\r
-        if (strcmp (text, "MPE") == 0)\r
-            return filter->supportsMPE() ? 1 : 0;\r
-\r
-       #if JUCE_MAC\r
-        if (strcmp (text, "hasCockosViewAsConfig") == 0)\r
-        {\r
-            useNSView = true;\r
-            return (VstInt32) 0xbeef0000;\r
-        }\r
-       #endif\r
-\r
-        return 0;\r
-    }\r
-\r
-    VstIntPtr vendorSpecific (VstInt32 lArg, VstIntPtr lArg2, void* ptrArg, float floatArg) override\r
-    {\r
-        ignoreUnused (lArg, lArg2, ptrArg, floatArg);\r
-\r
-       #if JucePlugin_Build_VST3 && JUCE_VST3_CAN_REPLACE_VST2\r
-        if ((lArg == 'stCA' || lArg == 'stCa') && lArg2 == 'FUID' && ptrArg != nullptr)\r
-        {\r
-            memcpy (ptrArg, getJuceVST3ComponentIID(), 16);\r
-            return 1;\r
-        }\r
-       #endif\r
-\r
-        return 0;\r
-    }\r
-\r
-    bool setBypass (bool b) override\r
-    {\r
-        isBypassed = b;\r
-        return true;\r
-    }\r
-\r
-    VstInt32 getGetTailSize() override\r
-    {\r
-        if (filter != nullptr)\r
-            return (VstInt32) (filter->getTailLengthSeconds() * getSampleRate());\r
 \r
-        return 0;\r
     }\r
 \r
-    //==============================================================================\r
-    VstInt32 processEvents (VstEvents* events) override\r
-    {\r
-       #if JucePlugin_WantsMidiInput\r
-        VSTMidiEventList::addEventsToMidiBuffer (events, midiEvents);\r
-        return 1;\r
-       #else\r
-        ignoreUnused (events);\r
-        return 0;\r
-       #endif\r
-    }\r
+    VstEffectInterface* getVstEffectInterface() noexcept    { return &vstEffect; }\r
 \r
     template <typename FloatType>\r
     void internalProcessReplacing (FloatType** inputs, FloatType** outputs,\r
-                                   VstInt32 numSamples, VstTempBuffers<FloatType>& tmpBuffers)\r
+                                   int32 numSamples, VstTempBuffers<FloatType>& tmpBuffers)\r
     {\r
         if (firstProcessCallback)\r
         {\r
@@ -510,7 +386,7 @@ public:
             if (! isProcessing)\r
                 resume();\r
 \r
-            filter->setNonRealtime (getCurrentProcessLevel() == 4 /* kVstProcessLevelOffline */);\r
+            filter->setNonRealtime (isProcessLevelOffline());\r
 \r
            #if JUCE_WINDOWS\r
             if (getHostType().isWavelab())\r
@@ -606,7 +482,7 @@ public:
             outgoingEvents.ensureSize (numEvents);\r
             outgoingEvents.clear();\r
 \r
-            const juce::uint8* midiEventData;\r
+            const uint8* midiEventData;\r
             int midiEventSize, midiEventPosition;\r
             MidiBuffer::Iterator i (midiEvents);\r
 \r
@@ -617,7 +493,9 @@ public:
                 outgoingEvents.addEvent (midiEventData, midiEventSize, midiEventPosition);\r
             }\r
 \r
-            sendVstEventsToHost (outgoingEvents.events);\r
+            // Send VST events to the host.\r
+            if (hostCallback != nullptr)\r
+                hostCallback (&vstEffect, hostOpcodePreAudioProcessingEvents, 0, 0, outgoingEvents.events, 0);\r
            #elif JUCE_DEBUG\r
             /*  This assertion is caused when you've added some events to the\r
                 midiMessages array in your processBlock() method, which usually means\r
@@ -640,55 +518,45 @@ public:
         }\r
     }\r
 \r
-    void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) override\r
+    void processReplacing (float** inputs, float** outputs, int32 sampleFrames)\r
     {\r
         jassert (! filter->isUsingDoublePrecision());\r
         internalProcessReplacing (inputs, outputs, sampleFrames, floatTempBuffers);\r
     }\r
 \r
-    void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames) override\r
+    static void processReplacingCB (VstEffectInterface* vstInterface, float** inputs, float** outputs, int32 sampleFrames)\r
+    {\r
+        getWrapper (vstInterface)->processReplacing (inputs, outputs, sampleFrames);\r
+    }\r
+\r
+    void processDoubleReplacing (double** inputs, double** outputs, int32 sampleFrames)\r
     {\r
         jassert (filter->isUsingDoublePrecision());\r
         internalProcessReplacing (inputs, outputs, sampleFrames, doubleTempBuffers);\r
     }\r
 \r
-    //==============================================================================\r
-    VstInt32 startProcess() override  { return 0; }\r
-    VstInt32 stopProcess() override   { return 0; }\r
-\r
-    //==============================================================================\r
-    bool setProcessPrecision (VstInt32 vstPrecision) override\r
+    static void processDoubleReplacingCB (VstEffectInterface* vstInterface, double** inputs, double** outputs, int32 sampleFrames)\r
     {\r
-        if (! isProcessing)\r
-        {\r
-            if (filter != nullptr)\r
-            {\r
-                filter->setProcessingPrecision (vstPrecision == kVstProcessPrecision64 && filter->supportsDoublePrecisionProcessing()\r
-                                                    ? AudioProcessor::doublePrecision\r
-                                                    : AudioProcessor::singlePrecision);\r
-\r
-                return true;\r
-            }\r
-        }\r
-\r
-        return false;\r
+        getWrapper (vstInterface)->processDoubleReplacing (inputs, outputs, sampleFrames);\r
     }\r
 \r
-    void resume() override\r
+    //==============================================================================\r
+    void resume()\r
     {\r
         if (filter != nullptr)\r
         {\r
             isProcessing = true;\r
 \r
-            floatTempBuffers .channels.calloc ((size_t) (cEffect.numInputs + cEffect.numOutputs));\r
-            doubleTempBuffers.channels.calloc ((size_t) (cEffect.numInputs + cEffect.numOutputs));\r
+            const size_t nInAndOutChannels = static_cast<size_t> (vstEffect.numInputChannels + vstEffect.numOutputChannels);\r
+            floatTempBuffers .channels.calloc (nInAndOutChannels);\r
+            doubleTempBuffers.channels.calloc (nInAndOutChannels);\r
 \r
-            const double currentRate = getSampleRate();\r
-            const int currentBlockSize = getBlockSize();\r
+            const double currentRate = sampleRate;\r
+            const int currentBlockSize = blockSize;\r
 \r
             firstProcessCallback = true;\r
 \r
-            filter->setNonRealtime (getCurrentProcessLevel() == 4 /* kVstProcessLevelOffline */);\r
+            filter->setNonRealtime (isProcessLevelOffline());\r
             filter->setRateAndBufferSizeDetails (currentRate, currentBlockSize);\r
 \r
             deleteTempChannels();\r
@@ -698,9 +566,17 @@ public:
             midiEvents.ensureSize (2048);\r
             midiEvents.clear();\r
 \r
-            setInitialDelay (filter->getLatencySamples());\r
+            vstEffect.latency = filter->getLatencySamples();\r
 \r
-            AudioEffectX::resume();\r
+            /** If this plug-in is a synth or it can receive midi events we need to tell the\r
+                host that we want midi. In the SDK this method is marked as deprecated, but\r
+                some hosts rely on this behaviour.\r
+            */\r
+            if (vstEffect.flags & vstEffectFlagIsSynth || JucePlugin_WantsMidiInput)\r
+            {\r
+                if (hostCallback != nullptr)\r
+                    hostCallback (&vstEffect, hostOpcodePlugInWantsMidi, 0, 1, 0, 0);\r
+            }\r
 \r
            #if JucePlugin_ProducesMidiOutput\r
             outgoingEvents.ensureSize (512);\r
@@ -708,12 +584,10 @@ public:
         }\r
     }\r
 \r
-    void suspend() override\r
+    void suspend()\r
     {\r
         if (filter != nullptr)\r
         {\r
-            AudioEffectX::suspend();\r
-\r
             filter->releaseResources();\r
             outgoingEvents.freeEvents();\r
 \r
@@ -725,20 +599,31 @@ public:
         }\r
     }\r
 \r
+    //==============================================================================\r
     bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override\r
     {\r
-        const VstTimeInfo* const ti = getTimeInfo (kVstPpqPosValid | kVstTempoValid | kVstBarsValid | kVstCyclePosValid\r
-                                                    | kVstTimeSigValid | kVstSmpteValid | kVstClockValid);\r
+        const VstTimingInformation* ti = nullptr;\r
+\r
+        if (hostCallback != nullptr)\r
+        {\r
+            int32 flags = vstTimingInfoFlagMusicalPositionValid | vstTimingInfoFlagTempoValid\r
+                              | vstTimingInfoFlagLastBarPositionValid | vstTimingInfoFlagLoopPositionValid\r
+                              | vstTimingInfoFlagTimeSignatureValid | vstTimingInfoFlagSmpteValid\r
+                              | vstTimingInfoFlagNearestClockValid;\r
+\r
+            pointer_sized_int result = hostCallback (&vstEffect, hostOpcodeGetTimingInfo, 0, flags, 0, 0);\r
+            ti = reinterpret_cast<VstTimingInformation*> (result);\r
+        }\r
 \r
         if (ti == nullptr || ti->sampleRate <= 0)\r
             return false;\r
 \r
-        info.bpm = (ti->flags & kVstTempoValid) != 0 ? ti->tempo : 0.0;\r
+        info.bpm = (ti->flags & vstTimingInfoFlagTempoValid) != 0 ? ti->tempoBPM : 0.0;\r
 \r
-        if ((ti->flags & kVstTimeSigValid) != 0)\r
+        if ((ti->flags & vstTimingInfoFlagTimeSignatureValid) != 0)\r
         {\r
-            info.timeSigNumerator   = ti->timeSigNumerator;\r
-            info.timeSigDenominator = ti->timeSigDenominator;\r
+            info.timeSigNumerator   = ti->timeSignatureNumerator;\r
+            info.timeSigDenominator = ti->timeSignatureDenominator;\r
         }\r
         else\r
         {\r
@@ -746,34 +631,34 @@ public:
             info.timeSigDenominator = 4;\r
         }\r
 \r
-        info.timeInSamples = (int64) (ti->samplePos + 0.5);\r
-        info.timeInSeconds = ti->samplePos / ti->sampleRate;\r
-        info.ppqPosition = (ti->flags & kVstPpqPosValid) != 0 ? ti->ppqPos : 0.0;\r
-        info.ppqPositionOfLastBarStart = (ti->flags & kVstBarsValid) != 0 ? ti->barStartPos : 0.0;\r
+        info.timeInSamples = (int64) (ti->samplePosition + 0.5);\r
+        info.timeInSeconds = ti->samplePosition / ti->sampleRate;\r
+        info.ppqPosition = (ti->flags & vstTimingInfoFlagMusicalPositionValid) != 0 ? ti->musicalPosition : 0.0;\r
+        info.ppqPositionOfLastBarStart = (ti->flags & vstTimingInfoFlagLastBarPositionValid) != 0 ? ti->lastBarPosition : 0.0;\r
 \r
-        if ((ti->flags & kVstSmpteValid) != 0)\r
+        if ((ti->flags & vstTimingInfoFlagSmpteValid) != 0)\r
         {\r
             AudioPlayHead::FrameRateType rate = AudioPlayHead::fpsUnknown;\r
             double fps = 1.0;\r
 \r
-            switch (ti->smpteFrameRate)\r
+            switch (ti->smpteRate)\r
             {\r
-                case kVstSmpte24fps:        rate = AudioPlayHead::fps24;       fps = 24.0;  break;\r
-                case kVstSmpte25fps:        rate = AudioPlayHead::fps25;       fps = 25.0;  break;\r
-                case kVstSmpte2997fps:      rate = AudioPlayHead::fps2997;     fps = 29.97; break;\r
-                case kVstSmpte30fps:        rate = AudioPlayHead::fps30;       fps = 30.0;  break;\r
-                case kVstSmpte2997dfps:     rate = AudioPlayHead::fps2997drop; fps = 29.97; break;\r
-                case kVstSmpte30dfps:       rate = AudioPlayHead::fps30drop;   fps = 30.0;  break;\r
-\r
-                case kVstSmpteFilm16mm:\r
-                case kVstSmpteFilm35mm:     fps = 24.0; break;\r
-\r
-                case kVstSmpte239fps:       fps = 23.976; break;\r
-                case kVstSmpte249fps:       fps = 24.976; break;\r
-                case kVstSmpte599fps:       fps = 59.94; break;\r
-                case kVstSmpte60fps:        fps = 60; break;\r
-\r
-                default:                    jassertfalse; // unknown frame-rate..\r
+                case vstSmpteRateFps24:        rate = AudioPlayHead::fps24;       fps = 24.0;  break;\r
+                case vstSmpteRateFps25:        rate = AudioPlayHead::fps25;       fps = 25.0;  break;\r
+                case vstSmpteRateFps2997:      rate = AudioPlayHead::fps2997;     fps = 29.97; break;\r
+                case vstSmpteRateFps30:        rate = AudioPlayHead::fps30;       fps = 30.0;  break;\r
+                case vstSmpteRateFps2997drop:  rate = AudioPlayHead::fps2997drop; fps = 29.97; break;\r
+                case vstSmpteRateFps30drop:    rate = AudioPlayHead::fps30drop;   fps = 30.0;  break;\r
+\r
+                case vstSmpteRate16mmFilm:\r
+                case vstSmpteRate35mmFilm:     fps = 24.0; break;\r
+\r
+                case vstSmpteRateFps239:       fps = 23.976; break;\r
+                case vstSmpteRateFps249:       fps = 24.976; break;\r
+                case vstSmpteRateFps599:       fps = 59.94; break;\r
+                case vstSmpteRateFps60:        fps = 60; break;\r
+\r
+                default:                       jassertfalse; // unknown frame-rate..\r
             }\r
 \r
             info.frameRate = rate;\r
@@ -785,14 +670,14 @@ public:
             info.editOriginTime = 0;\r
         }\r
 \r
-        info.isRecording = (ti->flags & kVstTransportRecording) != 0;\r
-        info.isPlaying   = (ti->flags & (kVstTransportRecording | kVstTransportPlaying)) != 0;\r
-        info.isLooping   = (ti->flags & kVstTransportCycleActive) != 0;\r
+        info.isRecording = (ti->flags & vstTimingInfoFlagCurrentlyRecording) != 0;\r
+        info.isPlaying   = (ti->flags & (vstTimingInfoFlagCurrentlyRecording | vstTimingInfoFlagCurrentlyPlaying)) != 0;\r
+        info.isLooping   = (ti->flags & vstTimingInfoFlagLoopActive) != 0;\r
 \r
-        if ((ti->flags & kVstCyclePosValid) != 0)\r
+        if ((ti->flags & vstTimingInfoFlagLoopPositionValid) != 0)\r
         {\r
-            info.ppqLoopStart = ti->cycleStartPos;\r
-            info.ppqLoopEnd   = ti->cycleEndPos;\r
+            info.ppqLoopStart = ti->loopStartPosition;\r
+            info.ppqLoopEnd   = ti->loopEndPosition;\r
         }\r
         else\r
         {\r
@@ -804,42 +689,7 @@ public:
     }\r
 \r
     //==============================================================================\r
-    VstInt32 getProgram() override\r
-    {\r
-        return filter != nullptr ? filter->getCurrentProgram() : 0;\r
-    }\r
-\r
-    void setProgram (VstInt32 program) override\r
-    {\r
-        if (filter != nullptr)\r
-            filter->setCurrentProgram (program);\r
-    }\r
-\r
-    void setProgramName (char* name) override\r
-    {\r
-        if (filter != nullptr)\r
-            filter->changeProgramName (filter->getCurrentProgram(), name);\r
-    }\r
-\r
-    void getProgramName (char* name) override\r
-    {\r
-        if (filter != nullptr)\r
-            filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 (name, 24 + 1);\r
-    }\r
-\r
-    bool getProgramNameIndexed (VstInt32 /*category*/, VstInt32 index, char* text) override\r
-    {\r
-        if (filter != nullptr && isPositiveAndBelow (index, filter->getNumPrograms()))\r
-        {\r
-            filter->getProgramName (index).copyToUTF8 (text, 24 + 1);\r
-            return true;\r
-        }\r
-\r
-        return false;\r
-    }\r
-\r
-    //==============================================================================\r
-    float getParameter (VstInt32 index) override\r
+    float getParameter (int32 index) const\r
     {\r
         if (filter == nullptr)\r
             return 0.0f;\r
@@ -848,245 +698,116 @@ public:
         return filter->getParameter (index);\r
     }\r
 \r
-    void setParameter (VstInt32 index, float value) override\r
+    static float getParameterCB (VstEffectInterface* vstInterface, int32 index)\r
     {\r
-        if (filter != nullptr)\r
-        {\r
-            jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->setParameter (index, value);\r
-        }\r
+        return getWrapper (vstInterface)->getParameter (index);\r
     }\r
 \r
-    void getParameterDisplay (VstInt32 index, char* text) override\r
+    void setParameter (int32 index, float value)\r
     {\r
         if (filter != nullptr)\r
         {\r
             jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterText (index, 24).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->setParameter (index, value);\r
         }\r
     }\r
 \r
-    bool string2parameter (VstInt32 index, char* text) override\r
+    static void setParameterCB (VstEffectInterface* vstInterface, int32 index, float value)\r
     {\r
-        if (filter != nullptr)\r
-        {\r
-            jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-\r
-            if (AudioProcessorParameter* p = filter->getParameters()[index])\r
-            {\r
-                filter->setParameter (index, p->getValueForText (String::fromUTF8 (text)));\r
-                return true;\r
-            }\r
-        }\r
-\r
-        return false;\r
+        getWrapper (vstInterface)->setParameter (index, value);\r
     }\r
 \r
-    void getParameterName (VstInt32 index, char* text) override\r
+    void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) override\r
     {\r
-        if (filter != nullptr)\r
-        {\r
-            jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterName (index, 16).copyToUTF8 (text, 16 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
-        }\r
+        if (hostCallback != nullptr)\r
+            hostCallback (&vstEffect, hostOpcodeParameterChanged, index, 0, 0, newValue);\r
     }\r
 \r
-    void getParameterLabel (VstInt32 index, char* text) override\r
+    void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override\r
     {\r
-        if (filter != nullptr)\r
-        {\r
-            jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterLabel (index).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
-        }\r
+        if (hostCallback != nullptr)\r
+            hostCallback (&vstEffect, hostOpcodeParameterChangeGestureBegin, index, 0, 0, 0);\r
     }\r
 \r
-    void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) override\r
+    void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override\r
     {\r
-        if (audioMaster != nullptr)\r
-            audioMaster (&cEffect, audioMasterAutomate, index, 0, 0, newValue);\r
+        if (hostCallback != nullptr)\r
+            hostCallback (&vstEffect, hostOpcodeParameterChangeGestureEnd, index, 0, 0, 0);\r
     }\r
 \r
-    void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override   { beginEdit (index); }\r
-    void audioProcessorParameterChangeGestureEnd   (AudioProcessor*, int index) override   { endEdit   (index); }\r
-\r
     void audioProcessorChanged (AudioProcessor*) override\r
     {\r
-        setInitialDelay (filter->getLatencySamples());\r
-        updateDisplay();\r
+        vstEffect.latency = filter->getLatencySamples();\r
+\r
+        if (hostCallback != nullptr)\r
+            hostCallback (&vstEffect, hostOpcodeUpdateView, 0, 0, 0, 0);\r
+\r
         triggerAsyncUpdate();\r
     }\r
 \r
     void handleAsyncUpdate() override\r
     {\r
-        ioChanged();\r
-    }\r
-\r
-    bool canParameterBeAutomated (VstInt32 index) override\r
-    {\r
-        return filter != nullptr && filter->isParameterAutomatable ((int) index);\r
+        if (hostCallback != nullptr)\r
+            hostCallback (&vstEffect, hostOpcodeIOModified, 0, 0, 0, 0);\r
     }\r
 \r
-    bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput,\r
-                                VstSpeakerArrangement* pluginOutput) override\r
+    bool getPinProperties (VstPinInfo& properties, bool direction, int index) const\r
     {\r
-        const int numIns  = busUtils.getBusCount (true);\r
-        const int numOuts = busUtils.getBusCount (false);;\r
-\r
-        if (pluginInput != nullptr && numIns == 0)\r
-            return false;\r
+        // fill with default\r
+        properties.flags = vstPinInfoFlagValid;\r
+        properties.text[0] = 0;\r
+        properties.shortText[0] = 0;\r
+        properties.configurationType = vstSpeakerConfigTypeEmpty;\r
 \r
-        if (pluginOutput != nullptr && numOuts == 0)\r
+        // index refers to the absolute index when combining all channels of every bus\r
+        if (index >= (direction ? vstEffect.numInputChannels : vstEffect.numOutputChannels))\r
             return false;\r
 \r
-        if (numIns > 1 || numOuts > 1)\r
+        const int n = busUtils.getBusCount(direction);\r
+        int busIdx;\r
+        for (busIdx = 0; busIdx < n; ++busIdx)\r
         {\r
-            int newNumInChannels  = (pluginInput  != nullptr && pluginInput-> numChannels >= 0) ? pluginInput-> numChannels\r
-                                                                                                : busUtils.findTotalNumChannels (true);\r
-            int newNumOutChannels = (pluginOutput != nullptr && pluginOutput->numChannels >= 0) ? pluginOutput->numChannels\r
-                                                                                                : busUtils.findTotalNumChannels (false);\r
-\r
-            newNumInChannels  = jmin (newNumInChannels,  maxNumInChannels);\r
-            newNumOutChannels = jmin (newNumOutChannels, maxNumOutChannels);\r
+            const int numChans = busUtils.getNumChannels (direction, busIdx);\r
+            if (index < numChans)\r
+                break;\r
 \r
-            if (! setBusArrangementFromTotalChannelNum (newNumInChannels, newNumOutChannels))\r
-                return false;\r
+            index -= numChans;\r
         }\r
-        else\r
-        {\r
-            PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils);\r
-            AudioChannelSet inLayoutType;\r
 \r
-            if (pluginInput  != nullptr && pluginInput-> numChannels >= 0)\r
-            {\r
-                inLayoutType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput);\r
-                if (busUtils.getChannelSet (true, 0) != inLayoutType)\r
-                    if (! filter->setPreferredBusArrangement (true, 0, inLayoutType))\r
-                        return false;\r
-            }\r
+        if (busIdx >= n)\r
+            return true;\r
 \r
-            if (pluginOutput != nullptr && pluginOutput->numChannels >= 0)\r
-            {\r
-                AudioChannelSet newType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput);\r
-                if (busUtils.getChannelSet (false, 0) != newType)\r
-                    if (! filter->setPreferredBusArrangement (false, 0, newType))\r
-                        return false;\r
+        const AudioProcessor::AudioProcessorBus& busInfo = busUtils.getFilterBus (direction).getReference (busIdx);\r
 \r
-                // re-check the input\r
-                if ((! inLayoutType.isDisabled()) && busUtils.getChannelSet (true, 0) != inLayoutType)\r
-                    return false;\r
+        String channelName = busInfo.name;\r
+       #ifdef JucePlugin_PreferredChannelConfigurations\r
+        channelName += String (" ") + String (index);\r
+       #else\r
+        if (busUtils.getNumChannels (direction, busIdx) > 1)\r
+            channelName += String (" ") + AudioChannelSet::getAbbreviatedChannelTypeName (busInfo.channels.getTypeOfChannel (index));\r
+       #endif\r
 \r
-                busRestorer.release();\r
-            }\r
-        }\r
+        channelName.copyToUTF8 (properties.text, (size_t) (vstMaxParameterOrPinLabelLength + 1));\r
+        channelName.copyToUTF8 (properties.shortText, (size_t) (vstMaxParameterOrPinShortLabelLength + 1));\r
+\r
+        properties.flags = vstPinInfoFlagValid | vstPinInfoFlagIsActive;\r
+        properties.configurationType = SpeakerMappings::channelSetToVstArrangementType (busInfo.channels);\r
+\r
+        if (properties.configurationType == vstSpeakerConfigTypeEmpty)\r
+            properties.flags &= vstPinInfoFlagIsActive;\r
+\r
+        if (busInfo.channels.size() == 2)\r
+            properties.flags |= vstPinInfoFlagIsStereo;\r
 \r
-        filter->setRateAndBufferSizeDetails(0, 0);\r
         return true;\r
     }\r
 \r
-    bool getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput) override\r
+    //==============================================================================\r
+    struct SpeakerMappings  : private AudioChannelSet // (inheritance only to give easier access to items in the namespace)\r
     {\r
-        *pluginInput = 0;\r
-        *pluginOutput = 0;\r
-\r
-        if (! AudioEffectX::allocateArrangement (pluginInput, busUtils.findTotalNumChannels (true)))\r
-            return false;\r
-\r
-        if (! AudioEffectX::allocateArrangement (pluginOutput, busUtils.findTotalNumChannels (false)))\r
+        struct Mapping\r
         {\r
-            AudioEffectX::deallocateArrangement (pluginInput);\r
-            *pluginInput = 0;\r
-            return false;\r
-        }\r
-\r
-        if (pluginHasSidechainsOrAuxs())\r
-        {\r
-            int numIns  = busUtils.findTotalNumChannels (true);\r
-            int numOuts = busUtils.findTotalNumChannels (false);\r
-\r
-            AudioChannelSet layout = AudioChannelSet::canonicalChannelSet (numIns);\r
-            SpeakerMappings::channelSetToVstArrangement (layout,  **pluginInput);\r
-\r
-            layout = AudioChannelSet::canonicalChannelSet (numOuts);\r
-            SpeakerMappings::channelSetToVstArrangement (layout,  **pluginOutput);\r
-        }\r
-        else\r
-        {\r
-            SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (true,  0), **pluginInput);\r
-            SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (false, 0), **pluginOutput);\r
-        }\r
-\r
-        return true;\r
-    }\r
-\r
-    bool getInputProperties (VstInt32 index, VstPinProperties* properties) override\r
-    {\r
-        return filter != nullptr\r
-                && getPinProperties (*properties, true, (int) index);\r
-    }\r
-\r
-    bool getOutputProperties (VstInt32 index, VstPinProperties* properties) override\r
-    {\r
-        return filter != nullptr\r
-                && getPinProperties (*properties, false, (int) index);\r
-    }\r
-\r
-    bool getPinProperties (VstPinProperties& properties, bool direction, int index) const\r
-    {\r
-        // fill with default\r
-        properties.flags = kVstPinUseSpeaker;\r
-        properties.label[0] = 0;\r
-        properties.shortLabel[0] = 0;\r
-        properties.arrangementType = kSpeakerArrEmpty;\r
-\r
-        // index refers to the absolute index when combining all channels of every bus\r
-        if (index >= (direction ? cEffect.numInputs : cEffect.numOutputs))\r
-            return false;\r
-\r
-        const int n = busUtils.getBusCount(direction);\r
-        int busIdx;\r
-        for (busIdx = 0; busIdx < n; ++busIdx)\r
-        {\r
-            const int numChans = busUtils.getNumChannels (direction, busIdx);\r
-            if (index < numChans)\r
-                break;\r
-\r
-            index -= numChans;\r
-        }\r
-\r
-        if (busIdx >= n)\r
-            return true;\r
-\r
-        const AudioProcessor::AudioProcessorBus& busInfo = busUtils.getFilterBus (direction).getReference (busIdx);\r
-\r
-       #ifdef JucePlugin_PreferredChannelConfigurations\r
-        String abbvChannelName = String (index);\r
-       #else\r
-        String abbvChannelName = AudioChannelSet::getAbbreviatedChannelTypeName (busInfo.channels.getTypeOfChannel(index));\r
-       #endif\r
-\r
-        String channelName = busInfo.name + String (" ") + abbvChannelName;\r
-\r
-        channelName.copyToUTF8 (properties.label, (size_t) (kVstMaxLabelLen + 1));\r
-        channelName.copyToUTF8 (properties.shortLabel, (size_t) (kVstMaxShortLabelLen + 1));\r
-\r
-        properties.flags = kVstPinUseSpeaker | kVstPinIsActive;\r
-        properties.arrangementType = SpeakerMappings::channelSetToVstArrangementType (busInfo.channels);\r
-\r
-        if (properties.arrangementType == kSpeakerArrEmpty)\r
-            properties.flags &= ~kVstPinIsActive;\r
-\r
-        if (busInfo.channels.size() == 2)\r
-            properties.flags |= kVstPinIsStereo;\r
-\r
-        return true;\r
-    }\r
-\r
-    //==============================================================================\r
-    struct SpeakerMappings  : private AudioChannelSet // (inheritance only to give easier access to items in the namespace)\r
-    {\r
-        struct Mapping\r
-        {\r
-            VstInt32 vst2;\r
+            int32 vst2;\r
             ChannelType channels[13];\r
 \r
             bool matches (const Array<ChannelType>& chans) const noexcept\r
@@ -1106,9 +827,9 @@ public:
             }\r
         };\r
 \r
-        static AudioChannelSet vstArrangementTypeToChannelSet (const VstSpeakerArrangement& arr)\r
+        static AudioChannelSet vstArrangementTypeToChannelSet (const VstSpeakerConfiguration& arr)\r
         {\r
-            for (const Mapping* m = getMappings(); m->vst2 != kSpeakerArrEmpty; ++m)\r
+            for (const Mapping* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m)\r
             {\r
                 if (m->vst2 == arr.type)\r
                 {\r
@@ -1121,33 +842,33 @@ public:
                 }\r
             }\r
 \r
-            return AudioChannelSet::discreteChannels (arr.numChannels);\r
+            return AudioChannelSet::discreteChannels (arr.numberOfChannels);\r
         }\r
 \r
-        static VstInt32 channelSetToVstArrangementType (AudioChannelSet channels)\r
+        static int32 channelSetToVstArrangementType (AudioChannelSet channels)\r
         {\r
             Array<AudioChannelSet::ChannelType> chans (channels.getChannelTypes());\r
 \r
             if (channels == AudioChannelSet::disabled())\r
-                return kSpeakerArrEmpty;\r
+                return vstSpeakerConfigTypeEmpty;\r
 \r
-            for (const Mapping* m = getMappings(); m->vst2 != kSpeakerArrEmpty; ++m)\r
+            for (const Mapping* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m)\r
                 if (m->matches (chans))\r
                     return m->vst2;\r
 \r
-            return kSpeakerArrUserDefined;\r
+            return vstSpeakerConfigTypeUser;\r
         }\r
 \r
-        static void channelSetToVstArrangement (const AudioChannelSet& channels, VstSpeakerArrangement& result)\r
+        static void channelSetToVstArrangement (const AudioChannelSet& channels, VstSpeakerConfiguration& result)\r
         {\r
             result.type = channelSetToVstArrangementType (channels);\r
-            result.numChannels = channels.size();\r
+            result.numberOfChannels = channels.size();\r
 \r
-            for (int i = 0; i < result.numChannels; ++i)\r
+            for (int i = 0; i < result.numberOfChannels; ++i)\r
             {\r
-                VstSpeakerProperties& speaker = result.speakers[i];\r
+                VstIndividualSpeakerInfo& speaker = result.speakers[i];\r
 \r
-                zeromem (&speaker, sizeof (VstSpeakerProperties));\r
+                zeromem (&speaker, sizeof (VstIndividualSpeakerInfo));\r
                 speaker.type = getSpeakerType (channels.getTypeOfChannel (i));\r
             }\r
         }\r
@@ -1156,93 +877,93 @@ public:
         {\r
             static const Mapping mappings[] =\r
             {\r
-                { kSpeakerArrMono,           { centre, unknown } },\r
-                { kSpeakerArrStereo,         { left, right, unknown } },\r
-                { kSpeakerArrStereoSurround, { leftSurround, rightSurround, unknown } },\r
-                { kSpeakerArrStereoCenter,   { leftCentre, rightCentre, unknown } },\r
-                { kSpeakerArrStereoSide,     { leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArrStereoCLfe,     { centre, subbass, unknown } },\r
-                { kSpeakerArr30Cine,         { left, right, centre, unknown } },\r
-                { kSpeakerArr30Music,        { left, right, surround, unknown } },\r
-                { kSpeakerArr31Cine,         { left, right, centre, subbass, unknown } },\r
-                { kSpeakerArr31Music,        { left, right, subbass, surround, unknown } },\r
-                { kSpeakerArr40Cine,         { left, right, centre, surround, unknown } },\r
-                { kSpeakerArr40Music,        { left, right, leftSurround, rightSurround, unknown } },\r
-                { kSpeakerArr41Cine,         { left, right, centre, subbass, surround, unknown } },\r
-                { kSpeakerArr41Music,        { left, right, subbass, leftSurround, rightSurround, unknown } },\r
-                { kSpeakerArr50,             { left, right, centre, leftSurround, rightSurround, unknown } },\r
-                { kSpeakerArr51,             { left, right, centre, subbass, leftSurround, rightSurround, unknown } },\r
-                { kSpeakerArr60Cine,         { left, right, centre, leftSurround, rightSurround, surround, unknown } },\r
-                { kSpeakerArr60Music,        { left, right, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr61Cine,         { left, right, centre, subbass, leftSurround, rightSurround, surround, unknown } },\r
-                { kSpeakerArr61Music,        { left, right, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr70Cine,         { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } },\r
-                { kSpeakerArr70Music,        { left, right, centre, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr71Cine,         { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } },\r
-                { kSpeakerArr71Music,        { left, right, centre, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr80Cine,         { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } },\r
-                { kSpeakerArr80Music,        { left, right, centre, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr81Cine,         { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } },\r
-                { kSpeakerArr81Music,        { left, right, centre, subbass, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } },\r
-                { kSpeakerArr102,            { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, subbass2, unknown } },\r
-                { kSpeakerArrEmpty,          { unknown } }\r
+                { vstSpeakerConfigTypeMono,                          { centre, unknown } },\r
+                { vstSpeakerConfigTypeLR,                            { left, right, unknown } },\r
+                { vstSpeakerConfigTypeLsRs,                          { leftSurround, rightSurround, unknown } },\r
+                { vstSpeakerConfigTypeLcRc,                          { leftCentre, rightCentre, unknown } },\r
+                { vstSpeakerConfigTypeSlSr,                          { leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeCLfe,                          { centre, subbass, unknown } },\r
+                { vstSpeakerConfigTypeLRC,                           { left, right, centre, unknown } },\r
+                { vstSpeakerConfigTypeLRS,                           { left, right, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfe,                        { left, right, centre, subbass, unknown } },\r
+                { vstSpeakerConfigTypeLRLfeS,                        { left, right, subbass, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRCS,                          { left, right, centre, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRLsRs,                        { left, right, leftSurround, rightSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeS,                       { left, right, centre, subbass, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRLfeLsRs,                     { left, right, subbass, leftSurround, rightSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRs,                       { left, right, centre, leftSurround, rightSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRs,                    { left, right, centre, subbass, leftSurround, rightSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRsCs,                     { left, right, centre, leftSurround, rightSurround, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRLsRsSlSr,                    { left, right, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsCs,                  { left, right, centre, subbass, leftSurround, rightSurround, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRLfeLsRsSlSr,                 { left, right, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRsLcRc,                   { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRsSlSr,                   { left, right, centre, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsLcRc,                { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsSlSr,                { left, right, centre, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRsLcRcCs,                 { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLsRsCsSlSr,                 { left, right, centre, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsLcRcCs,              { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsCsSlSr,              { left, right, centre, subbass, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } },\r
+                { vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, subbass2, unknown } },\r
+                { vstSpeakerConfigTypeEmpty,                         { unknown } }\r
             };\r
 \r
             return mappings;\r
         }\r
 \r
-        static inline VstInt32 getSpeakerType (AudioChannelSet::ChannelType type) noexcept\r
+        static inline int32 getSpeakerType (AudioChannelSet::ChannelType type) noexcept\r
         {\r
             switch (type)\r
             {\r
-                case AudioChannelSet::left:              return kSpeakerL;\r
-                case AudioChannelSet::right:             return kSpeakerR;\r
-                case AudioChannelSet::centre:            return kSpeakerC;\r
-                case AudioChannelSet::subbass:           return kSpeakerLfe;\r
-                case AudioChannelSet::leftSurround:      return kSpeakerLs;\r
-                case AudioChannelSet::rightSurround:     return kSpeakerRs;\r
-                case AudioChannelSet::leftCentre:        return kSpeakerLc;\r
-                case AudioChannelSet::rightCentre:       return kSpeakerRc;\r
-                case AudioChannelSet::surround:          return kSpeakerS;\r
-                case AudioChannelSet::leftRearSurround:  return kSpeakerSl;\r
-                case AudioChannelSet::rightRearSurround: return kSpeakerSr;\r
-                case AudioChannelSet::topMiddle:         return kSpeakerTm;\r
-                case AudioChannelSet::topFrontLeft:      return kSpeakerTfl;\r
-                case AudioChannelSet::topFrontCentre:    return kSpeakerTfc;\r
-                case AudioChannelSet::topFrontRight:     return kSpeakerTfr;\r
-                case AudioChannelSet::topRearLeft:       return kSpeakerTrl;\r
-                case AudioChannelSet::topRearCentre:     return kSpeakerTrc;\r
-                case AudioChannelSet::topRearRight:      return kSpeakerTrr;\r
-                case AudioChannelSet::subbass2:          return kSpeakerLfe2;\r
+                case AudioChannelSet::left:              return vstIndividualSpeakerTypeLeft;\r
+                case AudioChannelSet::right:             return vstIndividualSpeakerTypeRight;\r
+                case AudioChannelSet::centre:            return vstIndividualSpeakerTypeCentre;\r
+                case AudioChannelSet::subbass:           return vstIndividualSpeakerTypeSubbass;\r
+                case AudioChannelSet::leftSurround:      return vstIndividualSpeakerTypeLeftSurround;\r
+                case AudioChannelSet::rightSurround:     return vstIndividualSpeakerTypeRightSurround;\r
+                case AudioChannelSet::leftCentre:        return vstIndividualSpeakerTypeLeftCentre;\r
+                case AudioChannelSet::rightCentre:       return vstIndividualSpeakerTypeRightCentre;\r
+                case AudioChannelSet::surround:          return vstIndividualSpeakerTypeSurround;\r
+                case AudioChannelSet::leftRearSurround:  return vstIndividualSpeakerTypeLeftRearSurround;\r
+                case AudioChannelSet::rightRearSurround: return vstIndividualSpeakerTypeRightRearSurround;\r
+                case AudioChannelSet::topMiddle:         return vstIndividualSpeakerTypeTopMiddle;\r
+                case AudioChannelSet::topFrontLeft:      return vstIndividualSpeakerTypeTopFrontLeft;\r
+                case AudioChannelSet::topFrontCentre:    return vstIndividualSpeakerTypeTopFrontCentre;\r
+                case AudioChannelSet::topFrontRight:     return vstIndividualSpeakerTypeTopFrontRight;\r
+                case AudioChannelSet::topRearLeft:       return vstIndividualSpeakerTypeTopRearLeft;\r
+                case AudioChannelSet::topRearCentre:     return vstIndividualSpeakerTypeTopRearCentre;\r
+                case AudioChannelSet::topRearRight:      return vstIndividualSpeakerTypeTopRearRight;\r
+                case AudioChannelSet::subbass2:          return vstIndividualSpeakerTypeSubbass2;\r
                 default: break;\r
             }\r
 \r
             return 0;\r
         }\r
 \r
-        static inline AudioChannelSet::ChannelType getChannelType (VstInt32 type) noexcept\r
+        static inline AudioChannelSet::ChannelType getChannelType (int32 type) noexcept\r
         {\r
             switch (type)\r
             {\r
-                case kSpeakerL:     return AudioChannelSet::left;\r
-                case kSpeakerR:     return AudioChannelSet::right;\r
-                case kSpeakerC:     return AudioChannelSet::centre;\r
-                case kSpeakerLfe:   return AudioChannelSet::subbass;\r
-                case kSpeakerLs:    return AudioChannelSet::leftSurround;\r
-                case kSpeakerRs:    return AudioChannelSet::rightSurround;\r
-                case kSpeakerLc:    return AudioChannelSet::leftCentre;\r
-                case kSpeakerRc:    return AudioChannelSet::rightCentre;\r
-                case kSpeakerS:     return AudioChannelSet::surround;\r
-                case kSpeakerSl:    return AudioChannelSet::leftRearSurround;\r
-                case kSpeakerSr:    return AudioChannelSet::rightRearSurround;\r
-                case kSpeakerTm:    return AudioChannelSet::topMiddle;\r
-                case kSpeakerTfl:   return AudioChannelSet::topFrontLeft;\r
-                case kSpeakerTfc:   return AudioChannelSet::topFrontCentre;\r
-                case kSpeakerTfr:   return AudioChannelSet::topFrontRight;\r
-                case kSpeakerTrl:   return AudioChannelSet::topRearLeft;\r
-                case kSpeakerTrc:   return AudioChannelSet::topRearCentre;\r
-                case kSpeakerTrr:   return AudioChannelSet::topRearRight;\r
-                case kSpeakerLfe2:  return AudioChannelSet::subbass2;\r
+                case vstIndividualSpeakerTypeLeft:              return AudioChannelSet::left;\r
+                case vstIndividualSpeakerTypeRight:             return AudioChannelSet::right;\r
+                case vstIndividualSpeakerTypeCentre:            return AudioChannelSet::centre;\r
+                case vstIndividualSpeakerTypeSubbass:           return AudioChannelSet::subbass;\r
+                case vstIndividualSpeakerTypeLeftSurround:      return AudioChannelSet::leftSurround;\r
+                case vstIndividualSpeakerTypeRightSurround:     return AudioChannelSet::rightSurround;\r
+                case vstIndividualSpeakerTypeLeftCentre:        return AudioChannelSet::leftCentre;\r
+                case vstIndividualSpeakerTypeRightCentre:       return AudioChannelSet::rightCentre;\r
+                case vstIndividualSpeakerTypeSurround:          return AudioChannelSet::surround;\r
+                case vstIndividualSpeakerTypeLeftRearSurround:  return AudioChannelSet::leftRearSurround;\r
+                case vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightRearSurround;\r
+                case vstIndividualSpeakerTypeTopMiddle:         return AudioChannelSet::topMiddle;\r
+                case vstIndividualSpeakerTypeTopFrontLeft:      return AudioChannelSet::topFrontLeft;\r
+                case vstIndividualSpeakerTypeTopFrontCentre:    return AudioChannelSet::topFrontCentre;\r
+                case vstIndividualSpeakerTypeTopFrontRight:     return AudioChannelSet::topFrontRight;\r
+                case vstIndividualSpeakerTypeTopRearLeft:       return AudioChannelSet::topRearLeft;\r
+                case vstIndividualSpeakerTypeTopRearCentre:     return AudioChannelSet::topRearCentre;\r
+                case vstIndividualSpeakerTypeTopRearRight:      return AudioChannelSet::topRearRight;\r
+                case vstIndividualSpeakerTypeSubbass2:          return AudioChannelSet::subbass2;\r
                 default: break;\r
             }\r
 \r
@@ -1250,46 +971,6 @@ public:
         }\r
     };\r
 \r
-    //==============================================================================\r
-    VstInt32 getChunk (void** data, bool onlyStoreCurrentProgramData) override\r
-    {\r
-        if (filter == nullptr)\r
-            return 0;\r
-\r
-        chunkMemory.reset();\r
-        if (onlyStoreCurrentProgramData)\r
-            filter->getCurrentProgramStateInformation (chunkMemory);\r
-        else\r
-            filter->getStateInformation (chunkMemory);\r
-\r
-        *data = (void*) chunkMemory.getData();\r
-\r
-        // because the chunk is only needed temporarily by the host (or at least you'd\r
-        // hope so) we'll give it a while and then free it in the timer callback.\r
-        chunkMemoryTime = juce::Time::getApproximateMillisecondCounter();\r
-\r
-        return (VstInt32) chunkMemory.getSize();\r
-    }\r
-\r
-    VstInt32 setChunk (void* data, VstInt32 byteSize, bool onlyRestoreCurrentProgramData) override\r
-    {\r
-        if (filter != nullptr)\r
-        {\r
-            chunkMemory.reset();\r
-            chunkMemoryTime = 0;\r
-\r
-            if (byteSize > 0 && data != nullptr)\r
-            {\r
-                if (onlyRestoreCurrentProgramData)\r
-                    filter->setCurrentProgramStateInformation (data, byteSize);\r
-                else\r
-                    filter->setStateInformation (data, byteSize);\r
-            }\r
-        }\r
-\r
-        return 0;\r
-    }\r
-\r
     void timerCallback() override\r
     {\r
         if (shouldDeleteEditor)\r
@@ -1312,28 +993,8 @@ public:
        #endif\r
     }\r
 \r
-    void doIdleCallback()\r
-    {\r
-        // (wavelab calls this on a separate thread and causes a deadlock)..\r
-        if (MessageManager::getInstance()->isThisTheMessageThread()\r
-             && ! recursionCheck)\r
-        {\r
-            ScopedValueSetter<bool> svs (recursionCheck, true, false);\r
-\r
-            JUCE_AUTORELEASEPOOL\r
-            {\r
-                Timer::callPendingTimersSynchronously();\r
-\r
-                for (int i = ComponentPeer::getNumPeers(); --i >= 0;)\r
-                    if (ComponentPeer* p = ComponentPeer::getPeer(i))\r
-                        p->performAnyPendingRepaintsNow();\r
-            }\r
-        }\r
-    }\r
-\r
     void createEditorComp()\r
     {\r
-       #if ! JUCE_IOS\r
         if (hasShutdown || filter == nullptr)\r
             return;\r
 \r
@@ -1341,7 +1002,7 @@ public:
         {\r
             if (AudioProcessorEditor* const ed = filter->createEditorIfNeeded())\r
             {\r
-                cEffect.flags |= effFlagsHasEditor;\r
+                vstEffect.flags |= vstEffectFlagHasEditor;\r
                 ed->setOpaque (true);\r
                 ed->setVisible (true);\r
 \r
@@ -1349,19 +1010,15 @@ public:
             }\r
             else\r
             {\r
-                cEffect.flags &= ~effFlagsHasEditor;\r
+                vstEffect.flags &= ~vstEffectFlagHasEditor;\r
             }\r
         }\r
-       #endif\r
 \r
         shouldDeleteEditor = false;\r
     }\r
 \r
     void deleteEditor (bool canDeleteLaterIfModal)\r
     {\r
-       #if JUCE_IOS\r
-        ignoreUnused (canDeleteLaterIfModal);\r
-       #else\r
         JUCE_AUTORELEASEPOOL\r
         {\r
             PopupMenu::dismissAllActiveMenus();\r
@@ -1403,95 +1060,88 @@ public:
             hostWindow = 0;\r
            #endif\r
         }\r
-       #endif\r
     }\r
 \r
-    VstIntPtr dispatcher (VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt) override\r
+    pointer_sized_int dispatcher (int32 opCode, VstOpCodeArguments args)\r
     {\r
         if (hasShutdown)\r
             return 0;\r
 \r
-       #if ! JUCE_IOS\r
-        if (opCode == effEditIdle)\r
-        {\r
-            doIdleCallback();\r
-            return 0;\r
-        }\r
-        else if (opCode == effEditOpen)\r
-        {\r
-            checkWhetherMessageThreadIsCorrect();\r
-            const MessageManagerLock mmLock;\r
-            jassert (! recursionCheck);\r
-\r
-            startTimer (1000 / 4); // performs misc housekeeping chores\r
-\r
-            deleteEditor (true);\r
-            createEditorComp();\r
-\r
-            if (editorComp != nullptr)\r
-            {\r
-                editorComp->setOpaque (true);\r
-                editorComp->setVisible (false);\r
-\r
-              #if JUCE_WINDOWS\r
-                editorComp->addToDesktop (0, ptr);\r
-                hostWindow = (HWND) ptr;\r
-              #elif JUCE_LINUX\r
-                editorComp->addToDesktop (0, ptr);\r
-                hostWindow = (Window) ptr;\r
-                Window editorWnd = (Window) editorComp->getWindowHandle();\r
-                XReparentWindow (display, editorWnd, hostWindow, 0, 0);\r
-              #elif JUCE_MAC\r
-                hostWindow = attachComponentToWindowRefVST (editorComp, ptr, useNSView);\r
-              #endif\r
-                editorComp->setVisible (true);\r
-\r
-                return 1;\r
-            }\r
-        }\r
-        else if (opCode == effEditClose)\r
-        {\r
-            checkWhetherMessageThreadIsCorrect();\r
-            const MessageManagerLock mmLock;\r
-            deleteEditor (true);\r
-            return 0;\r
+        switch (opCode)\r
+        {\r
+            case plugInOpcodeOpen:                        return handleOpen (args);\r
+            case plugInOpcodeClose:                       return handleClose (args);\r
+            case plugInOpcodeSetCurrentProgram:           return handleSetCurrentProgram (args);\r
+            case plugInOpcodeGetCurrentProgram:           return handleGetCurrentProgram (args);\r
+            case plugInOpcodeSetCurrentProgramName:       return handleSetCurrentProgramName (args);\r
+            case plugInOpcodeGetCurrentProgramName:       return handleGetCurrentProgramName (args);\r
+            case plugInOpcodeGetParameterLabel:           return handleGetParameterLabel (args);\r
+            case plugInOpcodeGetParameterText:            return handleGetParameterText (args);\r
+            case plugInOpcodeGetParameterName:            return handleGetParameterName (args);\r
+            case plugInOpcodeSetSampleRate:               return handleSetSampleRate (args);\r
+            case plugInOpcodeSetBlockSize:                return handleSetBlockSize (args);\r
+            case plugInOpcodeResumeSuspend:               return handleResumeSuspend (args);\r
+            case plugInOpcodeGetEditorBounds:             return handleGetEditorBounds (args);\r
+            case plugInOpcodeOpenEditor:                  return handleOpenEditor (args);\r
+            case plugInOpcodeCloseEditor:                 return handleCloseEditor (args);\r
+            case plugInOpcodeGetData:                     return handleGetData (args);\r
+            case plugInOpcodeSetData:                     return handleSetData (args);\r
+            case plugInOpcodePreAudioProcessingEvents:    return handlePreAudioProcessingEvents (args);\r
+            case plugInOpcodeIsParameterAutomatable:      return handleIsParameterAutomatable (args);\r
+            case plugInOpcodeParameterValueForText:       return handleParameterValueForText (args);\r
+            case plugInOpcodeGetProgramName:              return handleGetProgramName (args);\r
+            case plugInOpcodeGetInputPinProperties:       return handleGetInputPinProperties (args);\r
+            case plugInOpcodeGetOutputPinProperties:      return handleGetOutputPinProperties (args);\r
+            case plugInOpcodeGetPlugInCategory:           return handleGetPlugInCategory (args);\r
+            case plugInOpcodeSetSpeakerConfiguration:     return handleSetSpeakerConfiguration (args);\r
+            case plugInOpcodeSetBypass:                   return handleSetBypass (args);\r
+            case plugInOpcodeGetPlugInName:               return handleGetPlugInName (args);\r
+            case plugInOpcodeGetManufacturerProductName:  return handleGetPlugInName (args);\r
+            case plugInOpcodeGetManufacturerName:         return handleGetManufacturerName (args);\r
+            case plugInOpcodeGetManufacturerVersion:      return handleGetManufacturerVersion (args);\r
+            case plugInOpcodeManufacturerSpecific:        return handleManufacturerSpecific (args);\r
+            case plugInOpcodeCanPlugInDo:                 return handleCanPlugInDo (args);\r
+            case plugInOpcodeGetTailSize:                 return handleGetTailSize (args);\r
+            case plugInOpcodeKeyboardFocusRequired:       return handleKeyboardFocusRequired (args);\r
+            case plugInOpcodeGetVstInterfaceVersion:      return handleGetVstInterfaceVersion (args);\r
+            case plugInOpcodeGetCurrentMidiProgram:       return handleGetCurrentMidiProgram (args);\r
+            case plugInOpcodeGetSpeakerArrangement:       return handleGetSpeakerConfiguration (args);\r
+            case plugInOpcodeSetNumberOfSamplesToProcess: return handleSetNumberOfSamplesToProcess (args);\r
+            case plugInOpcodeSetSampleFloatType:          return handleSetSampleFloatType (args);\r
+            default:                                      return 0;\r
+        }\r
+    }\r
+\r
+    static pointer_sized_int dispatcherCB (VstEffectInterface* vstInterface, int32 opCode, int32 index,\r
+                                           pointer_sized_int value, void* ptr, float opt)\r
+    {\r
+        JuceVSTWrapper* wrapper = getWrapper (vstInterface);\r
+        VstOpCodeArguments args = { index, value, ptr, opt };\r
+\r
+        if (opCode == plugInOpcodeClose)\r
+        {\r
+            wrapper->dispatcher (opCode, args);\r
+            delete wrapper;\r
+            return 1;\r
         }\r
-        else if (opCode == effEditGetRect)\r
-        {\r
-            checkWhetherMessageThreadIsCorrect();\r
-            const MessageManagerLock mmLock;\r
-            createEditorComp();\r
-\r
-            if (editorComp != nullptr)\r
-            {\r
-                editorSize.left = 0;\r
-                editorSize.top = 0;\r
-                editorSize.right  = (VstInt16) editorComp->getWidth();\r
-                editorSize.bottom = (VstInt16) editorComp->getHeight();\r
-\r
-                *((ERect**) ptr) = &editorSize;\r
-\r
-                return (VstIntPtr) (pointer_sized_int) &editorSize;\r
-            }\r
 \r
-            return 0;\r
-        }\r
-       #endif\r
-        return AudioEffectX::dispatcher (opCode, index, value, ptr, opt);\r
+        return wrapper->dispatcher (opCode, args);\r
     }\r
 \r
-   #if ! JUCE_IOS\r
     void resizeHostWindow (int newWidth, int newHeight)\r
     {\r
         if (editorComp != nullptr)\r
         {\r
             bool sizeWasSuccessful = false;\r
 \r
-            if (canHostDo (const_cast<char*> ("sizeWindow")))\r
+            if (hostCallback != nullptr)\r
             {\r
-                isInSizeWindow = true;\r
-                sizeWasSuccessful = sizeWindow (newWidth, newHeight);\r
-                isInSizeWindow = false;\r
+                if (hostCallback (&vstEffect, hostOpcodeCanHostDo, 0, 0, const_cast<char*> ("sizeWindow"), 0))\r
+                {\r
+                    isInSizeWindow = true;\r
+                    sizeWasSuccessful = (hostCallback (&vstEffect, hostOpcodeWindowSize, newWidth, newHeight, 0, 0) != 0);\r
+                    isInSizeWindow = false;\r
+                }\r
             }\r
 \r
             if (! sizeWasSuccessful)\r
@@ -1578,7 +1228,7 @@ public:
                 addMouseListener (this, true);\r
            #endif\r
 \r
-             ignoreUnused (fakeMouseGenerator);\r
+            ignoreUnused (fakeMouseGenerator);\r
         }\r
 \r
         ~EditorCompWrapper()\r
@@ -1669,18 +1319,19 @@ public:
 \r
         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EditorCompWrapper)\r
     };\r
-   #endif\r
 \r
     //==============================================================================\r
 private:\r
+    VstHostCallback hostCallback;\r
+    float sampleRate;\r
+    int32 blockSize;\r
+    VstEffectInterface vstEffect;\r
     AudioProcessor* filter;\r
     PluginBusUtilities busUtils;\r
     juce::MemoryBlock chunkMemory;\r
     juce::uint32 chunkMemoryTime;\r
-   #if ! JUCE_IOS\r
     ScopedPointer<EditorCompWrapper> editorComp;\r
-    ERect editorSize;\r
-   #endif\r
+    VstEditorBounds editorBounds;\r
     MidiBuffer midiEvents;\r
     VSTMidiEventList outgoingEvents;\r
     bool isProcessing, isBypassed, hasShutdown, isInSizeWindow, firstProcessCallback;\r
@@ -1693,16 +1344,23 @@ private:
     void* hostWindow;\r
    #elif JUCE_LINUX\r
     Window hostWindow;\r
-   #elif JUCE_WINDOWS\r
+   #else\r
     HWND hostWindow;\r
    #endif\r
 \r
-    static inline VstInt32 convertHexVersionToDecimal (const unsigned int hexVersion)\r
+    static JuceVSTWrapper* getWrapper (VstEffectInterface* vstInterface) noexcept { return static_cast<JuceVSTWrapper*> (vstInterface->effectPointer); }\r
+\r
+    bool isProcessLevelOffline()\r
+    {\r
+        return hostCallback != nullptr && (int32) hostCallback (&vstEffect, hostOpcodeGetCurrentAudioProcessingLevel, 0, 0, 0, 0) == 4;\r
+    }\r
+\r
+    static inline int32 convertHexVersionToDecimal (const unsigned int hexVersion)\r
     {\r
        #if JUCE_VST_RETURN_HEX_VERSION_NUMBER_DIRECTLY\r
-        return (VstInt32) hexVersion;\r
+        return (int32) hexVersion;\r
        #else\r
-        return (VstInt32) (((hexVersion >> 24) & 0xff) * 1000\r
+        return (int32) (((hexVersion >> 24) & 0xff) * 1000\r
                          + ((hexVersion >> 16) & 0xff) * 100\r
                          + ((hexVersion >> 8)  & 0xff) * 10\r
                          + (hexVersion & 0xff));\r
@@ -1746,8 +1404,8 @@ private:
 \r
         if (filter != nullptr)\r
         {\r
-            int numChannels = cEffect.numInputs + cEffect.numOutputs;\r
-            tmpBuffers.tempChannels.insertMultiple (0, nullptr, numChannels);\r
+            const int nInputAndOutputChannels = vstEffect.numInputChannels + vstEffect.numOutputChannels;\r
+            tmpBuffers.tempChannels.insertMultiple (0, nullptr, nInputAndOutputChannels);\r
         }\r
     }\r
 \r
@@ -1867,7 +1525,7 @@ private:
             }\r
 \r
             for (i = 0; i < n; ++i)\r
-                if ((config[i] = (config[i] + 1) % maxChans[i]) > 0)\r
+                if ((config[i] = maxChans[i] ? (config[i] + 1) % maxChans[i] : 0) > 0)\r
                     break;\r
         }\r
 \r
@@ -1936,8 +1594,28 @@ private:
         return false;\r
     }\r
 \r
+    void allocateSpeakerArrangement (VstSpeakerConfiguration** arrangement, int32 nChannels)\r
+    {\r
+        if (*arrangement)\r
+            delete [] (char*) *arrangement;\r
+\r
+        // The last member of a full VstSpeakerConfiguration struct is an array of 8\r
+        // VstIndividualSpeakerInfo. Here we only allocate space for channels we will\r
+        // actually use.\r
+        const size_t allocationSizeToSubtract = static_cast<size_t> (8 - nChannels) * sizeof (VstIndividualSpeakerInfo);\r
+        const size_t allocationSize = sizeof (VstSpeakerConfiguration) - allocationSizeToSubtract;\r
+        char* newAllocation = new char[allocationSize];\r
+        memset (newAllocation, 0, allocationSize);\r
+\r
+        *arrangement = (VstSpeakerConfiguration*) newAllocation;\r
+        (*arrangement)->numberOfChannels = nChannels;\r
+    }\r
+\r
     //==============================================================================\r
-    bool pluginHasSidechainsOrAuxs() const { return (busUtils.getBusCount (true) > 1 || busUtils.getBusCount (false) > 1); }\r
+    bool pluginHasSidechainsOrAuxs() const\r
+    {\r
+        return (busUtils.getBusCount (true) > 1 || busUtils.getBusCount (false) > 1);\r
+    }\r
 \r
     static int sumOfConfig (const int config[], int num) noexcept\r
     {\r
@@ -1947,69 +1625,584 @@ private:
 \r
         return retval;\r
     }\r
+\r
     //==============================================================================\r
-    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVSTWrapper)\r
-};\r
+    /** Host to plug-in calls. */\r
 \r
-//==============================================================================\r
-namespace\r
-{\r
-    AEffect* pluginEntryPoint (audioMasterCallback audioMaster)\r
+    pointer_sized_int handleOpen (VstOpCodeArguments)\r
     {\r
-        JUCE_AUTORELEASEPOOL\r
-        {\r
-            initialiseJuce_GUI();\r
+        // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here.\r
+        if (filter->hasEditor())\r
+            vstEffect.flags |= vstEffectFlagHasEditor;\r
+        else\r
+            vstEffect.flags &= ~vstEffectFlagHasEditor;\r
 \r
-            try\r
-            {\r
-                if (audioMaster (0, audioMasterVersion, 0, 0, 0, 0) != 0)\r
-                {\r
-                   #if JUCE_LINUX\r
-                    MessageManagerLock mmLock;\r
-                   #endif\r
+        return 0;\r
+    }\r
 \r
-                    AudioProcessor* const filter = createPluginFilterOfType (AudioProcessor::wrapperType_VST);\r
-                    JuceVSTWrapper* const wrapper = new JuceVSTWrapper (audioMaster, filter);\r
-                    return wrapper->getAeffect();\r
-                }\r
-            }\r
-            catch (...)\r
-            {}\r
+    pointer_sized_int handleClose (VstOpCodeArguments)\r
+    {\r
+        // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here.\r
+        stopTimer();\r
+\r
+        if (MessageManager::getInstance()->isThisTheMessageThread())\r
+            deleteEditor (false);\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleSetCurrentProgram (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr && isPositiveAndBelow((int) args.value, filter->getNumPrograms()))\r
+            filter->setCurrentProgram ((int) args.value);\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetCurrentProgram (VstOpCodeArguments)\r
+    {\r
+        return (filter != nullptr && filter->getNumPrograms() > 0 ? filter->getCurrentProgram() : 0);\r
+    }\r
+\r
+    pointer_sized_int handleSetCurrentProgramName (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr && filter->getNumPrograms() > 0)\r
+            filter->changeProgramName (filter->getCurrentProgram(), (char*) args.ptr);\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetCurrentProgramName (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr && filter->getNumPrograms() > 0)\r
+            filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 ((char*) args.ptr, 24 + 1);\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetParameterLabel (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr)\r
+        {\r
+            jassert (isPositiveAndBelow (args.index, filter->getNumParameters()));\r
+            // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterLabel (args.index).copyToUTF8 ((char*) args.ptr, 24 + 1);\r
         }\r
 \r
-        return nullptr;\r
+        return 0;\r
     }\r
-}\r
 \r
-#if ! JUCE_WINDOWS\r
- #define JUCE_EXPORTED_FUNCTION extern "C" __attribute__ ((visibility("default")))\r
-#endif\r
+    pointer_sized_int handleGetParameterText (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr)\r
+        {\r
+            jassert (isPositiveAndBelow (args.index, filter->getNumParameters()));\r
+            // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterText (args.index, 24).copyToUTF8 ((char*) args.ptr, 24 + 1);\r
+        }\r
 \r
-//==============================================================================\r
-// Mac startup code..\r
-#if JUCE_MAC || JUCE_IOS\r
+        return 0;\r
+    }\r
 \r
-    JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster);\r
-    JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
+    pointer_sized_int handleGetParameterName (VstOpCodeArguments args)\r
     {\r
-        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
+        if (filter != nullptr)\r
+        {\r
+            jassert (isPositiveAndBelow (args.index, filter->getNumParameters()));\r
+            // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterName (args.index, 16).copyToUTF8 ((char*) args.ptr, 16 + 1);\r
+        }\r
 \r
-       #if JUCE_MAC\r
-        initialiseMacVST();\r
-       #endif\r
+        return 0;\r
+    }\r
 \r
-        return pluginEntryPoint (audioMaster);\r
+    pointer_sized_int handleSetSampleRate (VstOpCodeArguments args)\r
+    {\r
+        sampleRate = args.opt;\r
+        return 0;\r
     }\r
 \r
-    JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster);\r
-    JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster)\r
+    pointer_sized_int handleSetBlockSize (VstOpCodeArguments args)\r
     {\r
-        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
+        blockSize = (int32) args.value;\r
+        return 0;\r
+    }\r
 \r
-       #if JUCE_MAC\r
-        initialiseMacVST();\r
-       #endif\r
+    pointer_sized_int handleResumeSuspend (VstOpCodeArguments args)\r
+    {\r
+        if (args.value)\r
+            resume();\r
+        else\r
+            suspend();\r
 \r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetEditorBounds (VstOpCodeArguments args)\r
+    {\r
+        checkWhetherMessageThreadIsCorrect();\r
+        const MessageManagerLock mmLock;\r
+        createEditorComp();\r
+\r
+        if (editorComp != nullptr)\r
+        {\r
+            editorBounds.upper     = 0;\r
+            editorBounds.leftmost  = 0;\r
+            editorBounds.lower     = (int16) editorComp->getHeight();\r
+            editorBounds.rightmost = (int16) editorComp->getWidth();\r
+\r
+            *((VstEditorBounds**) args.ptr) = &editorBounds;\r
+\r
+            return (pointer_sized_int) (pointer_sized_int) &editorBounds;\r
+        }\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleOpenEditor (VstOpCodeArguments args)\r
+    {\r
+        checkWhetherMessageThreadIsCorrect();\r
+        const MessageManagerLock mmLock;\r
+        jassert (! recursionCheck);\r
+\r
+        startTimer (1000 / 4); // performs misc housekeeping chores\r
+\r
+        deleteEditor (true);\r
+        createEditorComp();\r
+\r
+        if (editorComp != nullptr)\r
+        {\r
+            editorComp->setOpaque (true);\r
+            editorComp->setVisible (false);\r
+\r
+           #if JUCE_WINDOWS\r
+            editorComp->addToDesktop (0, args.ptr);\r
+            hostWindow = (HWND) args.ptr;\r
+           #elif JUCE_LINUX\r
+            editorComp->addToDesktop (0, args.ptr);\r
+            hostWindow = (Window) args.ptr;\r
+            Window editorWnd = (Window) editorComp->getWindowHandle();\r
+            XReparentWindow (display, editorWnd, hostWindow, 0, 0);\r
+           #else\r
+            hostWindow = attachComponentToWindowRefVST (editorComp, args.ptr, useNSView);\r
+           #endif\r
+            editorComp->setVisible (true);\r
+\r
+            return 1;\r
+        }\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleCloseEditor (VstOpCodeArguments)\r
+    {\r
+        checkWhetherMessageThreadIsCorrect();\r
+        const MessageManagerLock mmLock;\r
+        deleteEditor (true);\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetData (VstOpCodeArguments args)\r
+    {\r
+        void** data = (void**) args.ptr;\r
+        bool onlyStoreCurrentProgramData = (args.index != 0);\r
+\r
+        if (filter == nullptr)\r
+            return 0;\r
+\r
+        chunkMemory.reset();\r
+        if (onlyStoreCurrentProgramData)\r
+            filter->getCurrentProgramStateInformation (chunkMemory);\r
+        else\r
+            filter->getStateInformation (chunkMemory);\r
+\r
+        *data = (void*) chunkMemory.getData();\r
+\r
+        // because the chunk is only needed temporarily by the host (or at least you'd\r
+        // hope so) we'll give it a while and then free it in the timer callback.\r
+        chunkMemoryTime = juce::Time::getApproximateMillisecondCounter();\r
+\r
+        return (int32) chunkMemory.getSize();\r
+    }\r
+\r
+    pointer_sized_int handleSetData (VstOpCodeArguments args)\r
+    {\r
+        void* data = args.ptr;\r
+        int32 byteSize = (int32) args.value;\r
+        bool onlyRestoreCurrentProgramData = (args.index != 0);\r
+\r
+        if (filter != nullptr)\r
+        {\r
+            chunkMemory.reset();\r
+            chunkMemoryTime = 0;\r
+\r
+            if (byteSize > 0 && data != nullptr)\r
+            {\r
+                if (onlyRestoreCurrentProgramData)\r
+                    filter->setCurrentProgramStateInformation (data, byteSize);\r
+                else\r
+                    filter->setStateInformation (data, byteSize);\r
+            }\r
+        }\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handlePreAudioProcessingEvents (VstOpCodeArguments args)\r
+    {\r
+       #if JucePlugin_WantsMidiInput\r
+        VSTMidiEventList::addEventsToMidiBuffer ((VstEventBlock*) args.ptr, midiEvents);\r
+        return 1;\r
+       #else\r
+        ignoreUnused (args);\r
+        return 0;\r
+       #endif\r
+    }\r
+\r
+    pointer_sized_int handleIsParameterAutomatable (VstOpCodeArguments args)\r
+    {\r
+        return (filter != nullptr && filter->isParameterAutomatable (args.index)) ? 1 : 0;\r
+    }\r
+\r
+    pointer_sized_int handleParameterValueForText (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr)\r
+        {\r
+            jassert (isPositiveAndBelow (args.index, filter->getNumParameters()));\r
+\r
+            if (AudioProcessorParameter* p = filter->getParameters()[args.index])\r
+            {\r
+                filter->setParameter (args.index, p->getValueForText (String::fromUTF8 ((char*) args.ptr)));\r
+                return 1;\r
+            }\r
+        }\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetProgramName (VstOpCodeArguments args)\r
+    {\r
+        if (filter != nullptr && isPositiveAndBelow (args.index, filter->getNumPrograms()))\r
+        {\r
+            filter->getProgramName (args.index).copyToUTF8 ((char*) args.ptr, 24 + 1);\r
+            return 1;\r
+        }\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetInputPinProperties (VstOpCodeArguments args)\r
+    {\r
+        return (filter != nullptr && getPinProperties (*(VstPinInfo*) args.ptr, true, args.index)) ? 1 : 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetOutputPinProperties (VstOpCodeArguments args)\r
+    {\r
+        return (filter != nullptr && getPinProperties (*(VstPinInfo*) args.ptr, false, args.index)) ? 1 : 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetPlugInCategory (VstOpCodeArguments)\r
+    {\r
+        return JucePlugin_VSTCategory;\r
+    }\r
+\r
+    pointer_sized_int handleSetSpeakerConfiguration (VstOpCodeArguments args)\r
+    {\r
+        VstSpeakerConfiguration* pluginInput = reinterpret_cast<VstSpeakerConfiguration*> (args.value);\r
+        VstSpeakerConfiguration* pluginOutput = (VstSpeakerConfiguration*) args.ptr;\r
+\r
+        const int numIns  = busUtils.getBusCount (true);\r
+        const int numOuts = busUtils.getBusCount (false);;\r
+\r
+        if (pluginInput != nullptr && numIns == 0)\r
+            return 0;\r
+\r
+        if (pluginOutput != nullptr && numOuts == 0)\r
+            return 0;\r
+\r
+        if (pluginInput != nullptr && pluginInput->type >= 0)\r
+        {\r
+            // inconsistent request?\r
+            if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numberOfChannels)\r
+                return 0;\r
+        }\r
+\r
+        if (pluginOutput != nullptr && pluginOutput->type >= 0)\r
+        {\r
+            // inconsistent request?\r
+            if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numberOfChannels)\r
+                return 0;\r
+        }\r
+\r
+        if (numIns > 1 || numOuts > 1)\r
+        {\r
+            int newNumInChannels  = (pluginInput  != nullptr && pluginInput-> numberOfChannels >= 0)\r
+                ? pluginInput-> numberOfChannels\r
+                : busUtils.findTotalNumChannels (true);\r
+            int newNumOutChannels = (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0)\r
+                ? pluginOutput->numberOfChannels\r
+                : busUtils.findTotalNumChannels (false);\r
+\r
+            newNumInChannels  = jmin (newNumInChannels,  maxNumInChannels);\r
+            newNumOutChannels = jmin (newNumOutChannels, maxNumOutChannels);\r
+\r
+            if (! setBusArrangementFromTotalChannelNum (newNumInChannels, newNumOutChannels))\r
+                return 0;\r
+        }\r
+        else\r
+        {\r
+            PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils);\r
+            AudioChannelSet inLayoutType;\r
+\r
+            if (pluginInput  != nullptr && pluginInput-> numberOfChannels >= 0)\r
+            {\r
+                inLayoutType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput);\r
+                if (busUtils.getChannelSet (true, 0) != inLayoutType)\r
+                    if (! filter->setPreferredBusArrangement (true, 0, inLayoutType))\r
+                        return 0;\r
+            }\r
+\r
+            if (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0)\r
+            {\r
+                AudioChannelSet newType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput);\r
+\r
+                if (busUtils.getChannelSet (false, 0) != newType)\r
+                    if (! filter->setPreferredBusArrangement (false, 0, newType))\r
+                        return 0;\r
+\r
+                // re-check the input\r
+                if ((! inLayoutType.isDisabled()) && busUtils.getChannelSet (true, 0) != inLayoutType)\r
+                    return 0;\r
+\r
+                busRestorer.release();\r
+            }\r
+        }\r
+\r
+        filter->setRateAndBufferSizeDetails(0, 0);\r
+        return 1;\r
+    }\r
+\r
+    pointer_sized_int handleSetBypass (VstOpCodeArguments args)\r
+    {\r
+        isBypassed = (args.value != 0);\r
+        return 1;\r
+    }\r
+\r
+    pointer_sized_int handleGetPlugInName (VstOpCodeArguments args)\r
+    {\r
+        String (JucePlugin_Name).copyToUTF8 ((char*) args.ptr, 64 + 1);\r
+        return 1;\r
+    }\r
+\r
+    pointer_sized_int handleGetManufacturerName (VstOpCodeArguments args)\r
+    {\r
+        String (JucePlugin_Manufacturer).copyToUTF8 ((char*) args.ptr, 64 + 1);\r
+        return 1;\r
+    }\r
+\r
+    pointer_sized_int handleGetManufacturerVersion (VstOpCodeArguments)\r
+    {\r
+        return convertHexVersionToDecimal (JucePlugin_VersionCode);\r
+    }\r
+\r
+    pointer_sized_int handleManufacturerSpecific (VstOpCodeArguments args)\r
+    {\r
+       #if JucePlugin_Build_VST3 && JUCE_VST3_CAN_REPLACE_VST2\r
+        if ((args.index == 'stCA' || args.index == 'stCa') && args.value == 'FUID' && args.ptr != nullptr)\r
+        {\r
+            memcpy (args.ptr, getJuceVST3ComponentIID(), 16);\r
+            return 1;\r
+        }\r
+       #else\r
+        ignoreUnused (args);\r
+       #endif\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleCanPlugInDo (VstOpCodeArguments args)\r
+    {\r
+        char* text = (char*) args.ptr;\r
+        if (strcmp (text, "receiveVstEvents") == 0\r
+             || strcmp (text, "receiveVstMidiEvent") == 0\r
+             || strcmp (text, "receiveVstMidiEvents") == 0)\r
+        {\r
+           #if JucePlugin_WantsMidiInput\r
+            return 1;\r
+           #else\r
+            return -1;\r
+           #endif\r
+        }\r
+\r
+        if (strcmp (text, "sendVstEvents") == 0\r
+             || strcmp (text, "sendVstMidiEvent") == 0\r
+             || strcmp (text, "sendVstMidiEvents") == 0)\r
+        {\r
+           #if JucePlugin_ProducesMidiOutput\r
+            return 1;\r
+           #else\r
+            return -1;\r
+           #endif\r
+        }\r
+\r
+        if (strcmp (text, "receiveVstTimeInfo") == 0\r
+             || strcmp (text, "conformsToWindowRules") == 0\r
+             || strcmp (text, "bypass") == 0)\r
+        {\r
+            return 1;\r
+        }\r
+\r
+        // This tells Wavelab to use the UI thread to invoke open/close,\r
+        // like all other hosts do.\r
+        if (strcmp (text, "openCloseAnyThread") == 0)\r
+            return -1;\r
+\r
+        if (strcmp (text, "MPE") == 0)\r
+            return filter->supportsMPE() ? 1 : 0;\r
+\r
+       #if JUCE_MAC\r
+        if (strcmp (text, "hasCockosViewAsConfig") == 0)\r
+        {\r
+            useNSView = true;\r
+            return (int32) 0xbeef0000;\r
+        }\r
+       #endif\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetTailSize (VstOpCodeArguments)\r
+    {\r
+        if (filter != nullptr)\r
+            return (pointer_sized_int) (filter->getTailLengthSeconds() * sampleRate);\r
+\r
+        return 0;\r
+    }\r
+\r
+    pointer_sized_int handleKeyboardFocusRequired (VstOpCodeArguments)\r
+    {\r
+        return (JucePlugin_EditorRequiresKeyboardFocus != 0) ? 1 : 0;\r
+    }\r
+\r
+    pointer_sized_int handleGetVstInterfaceVersion (VstOpCodeArguments)\r
+    {\r
+        return juceVstInterfaceVersion;\r
+    }\r
+\r
+    pointer_sized_int handleGetCurrentMidiProgram (VstOpCodeArguments)\r
+    {\r
+        return -1;\r
+    }\r
+\r
+    pointer_sized_int handleGetSpeakerConfiguration (VstOpCodeArguments args)\r
+    {\r
+        VstSpeakerConfiguration** pluginInput = reinterpret_cast<VstSpeakerConfiguration**> (args.value);\r
+        VstSpeakerConfiguration** pluginOutput = (VstSpeakerConfiguration**) args.ptr;\r
+        *pluginInput  = nullptr;\r
+        *pluginOutput = nullptr;\r
+\r
+        allocateSpeakerArrangement (pluginInput, busUtils.findTotalNumChannels (true));\r
+        allocateSpeakerArrangement (pluginOutput, busUtils.findTotalNumChannels (false));\r
+\r
+        if (pluginHasSidechainsOrAuxs())\r
+        {\r
+            int numIns  = busUtils.findTotalNumChannels (true);\r
+            int numOuts = busUtils.findTotalNumChannels (false);\r
+\r
+            AudioChannelSet layout = AudioChannelSet::canonicalChannelSet (numIns);\r
+            SpeakerMappings::channelSetToVstArrangement (layout,  **pluginInput);\r
+\r
+            layout = AudioChannelSet::canonicalChannelSet (numOuts);\r
+            SpeakerMappings::channelSetToVstArrangement (layout,  **pluginOutput);\r
+        }\r
+        else\r
+        {\r
+            SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (true,  0), **pluginInput);\r
+            SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (false, 0), **pluginOutput);\r
+        }\r
+\r
+        return 1;\r
+    }\r
+\r
+    pointer_sized_int handleSetNumberOfSamplesToProcess (VstOpCodeArguments args)\r
+    {\r
+        return args.value;\r
+    }\r
+\r
+    pointer_sized_int handleSetSampleFloatType (VstOpCodeArguments args)\r
+    {\r
+        if (! isProcessing)\r
+        {\r
+            if (filter != nullptr)\r
+            {\r
+                filter->setProcessingPrecision (args.value == vstProcessingSampleTypeDouble\r
+                                                && filter->supportsDoublePrecisionProcessing()\r
+                                                    ? AudioProcessor::doublePrecision\r
+                                                    : AudioProcessor::singlePrecision);\r
+\r
+                return 1;\r
+            }\r
+        }\r
+\r
+        return 0;\r
+    }\r
+\r
+    //==============================================================================\r
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVSTWrapper)\r
+};\r
+\r
+\r
+//==============================================================================\r
+namespace\r
+{\r
+    VstEffectInterface* pluginEntryPoint (VstHostCallback audioMaster)\r
+    {\r
+        JUCE_AUTORELEASEPOOL\r
+        {\r
+            initialiseJuce_GUI();\r
+\r
+            try\r
+            {\r
+                if (audioMaster (0, hostOpcodeVstVersion, 0, 0, 0, 0) != 0)\r
+                {\r
+                   #if JUCE_LINUX\r
+                    MessageManagerLock mmLock;\r
+                   #endif\r
+\r
+                    AudioProcessor* const filter = createPluginFilterOfType (AudioProcessor::wrapperType_VST);\r
+                    JuceVSTWrapper* const wrapper = new JuceVSTWrapper (audioMaster, filter);\r
+                    return wrapper->getVstEffectInterface();\r
+                }\r
+            }\r
+            catch (...)\r
+            {}\r
+        }\r
+\r
+        return nullptr;\r
+    }\r
+}\r
+\r
+#if ! JUCE_WINDOWS\r
+ #define JUCE_EXPORTED_FUNCTION extern "C" __attribute__ ((visibility("default")))\r
+#endif\r
+\r
+//==============================================================================\r
+// Mac startup code..\r
+#if JUCE_MAC\r
+\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster);\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster)\r
+    {\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
+\r
+        initialiseMacVST();\r
+        return pluginEntryPoint (audioMaster);\r
+    }\r
+\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* main_macho (VstHostCallback audioMaster);\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* main_macho (VstHostCallback audioMaster)\r
+    {\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
+\r
+        initialiseMacVST();\r
         return pluginEntryPoint (audioMaster);\r
     }\r
 \r
@@ -2017,8 +2210,8 @@ namespace
 // Linux startup code..\r
 #elif JUCE_LINUX\r
 \r
-    JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster);\r
-    JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster);\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster)\r
     {\r
         PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
@@ -2026,8 +2219,8 @@ namespace
         return pluginEntryPoint (audioMaster);\r
     }\r
 \r
-    JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster) asm ("main");\r
-    JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster)\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* main_plugin (VstHostCallback audioMaster) asm ("main");\r
+    JUCE_EXPORTED_FUNCTION VstEffectInterface* main_plugin (VstHostCallback audioMaster)\r
     {\r
         PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
@@ -2042,7 +2235,7 @@ namespace
 // Win32 startup code..\r
 #else\r
 \r
-    extern "C" __declspec (dllexport) AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
+    extern "C" __declspec (dllexport) VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster)\r
     {\r
         PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
@@ -2050,7 +2243,7 @@ namespace
     }\r
 \r
    #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4)\r
-    extern "C" __declspec (dllexport) int main (audioMasterCallback audioMaster)\r
+    extern "C" __declspec (dllexport) int main (VstHostCallback audioMaster)\r
     {\r
         PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
index 794f791a38e806750fbf805e23283ebc4fddac9c..345addae77b54c49815970d7800905d48f9fdad2 100644 (file)
@@ -40,6 +40,7 @@
 #include "../utility/juce_IncludeModuleHeaders.h"\r
 #include "../utility/juce_WindowsHooks.h"\r
 #include "../utility/juce_PluginBusUtilities.h"\r
+#include "../utility/juce_FakeMouseMoveGenerator.h"\r
 #include "../../juce_audio_processors/format_types/juce_VST3Common.h"\r
 \r
 #ifndef JUCE_VST3_CAN_REPLACE_VST2\r
@@ -224,6 +225,8 @@ public:
             if (v != valueNormalized)\r
             {\r
                 valueNormalized = v;\r
+                owner.setParameter (paramIndex, static_cast<float> (v));\r
+\r
                 changed();\r
                 return true;\r
             }\r
@@ -847,6 +850,8 @@ private:
                     setBounds (pluginEditor->getLocalBounds());\r
                     resizeHostWindow();\r
                 }\r
+\r
+                ignoreUnused (fakeMouseGenerator);\r
             }\r
 \r
             ~ContentWrapperComponent()\r
@@ -908,6 +913,7 @@ private:
 \r
         private:\r
             JuceVST3Editor& owner;\r
+            FakeMouseMoveGenerator fakeMouseGenerator;\r
 \r
             JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ContentWrapperComponent)\r
         };\r
@@ -2093,6 +2099,10 @@ private:
         {\r
             const Vst::ParamID paramID = JuceVST3EditController::generateVSTParamIDForIndex (pluginInstance, i);\r
 \r
+            // Consider yourself very unlucky if you hit this assertion. The hash code of your\r
+            // parameter ids are not unique.\r
+            jassert (! vstParamIDs.contains (static_cast<uint32> (paramID)));\r
+\r
             vstParamIDs.add (paramID);\r
             paramMap.set (static_cast<int32> (paramID), i);\r
         }\r
index 5dbbb6cc55b1ac8c35e5738b0d35c901788839c1..4cf041655e09a2976ccf23f27f54b45891cbf83e 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_plugin_client\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE audio plugin wrapper classes\r
   description:      Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins.\r
   website:          http://www.juce.com/juce\r
index cf78781f2410a5e5f33cd1fd3220f4dc5e54c236..6571e03e0d1af140e29312324bc9b95a1147091e 100644 (file)
@@ -23,7 +23,7 @@
 */\r
 \r
 #if ! JUCE_MODULE_AVAILABLE_juce_audio_utils\r
- #error To compile AudioUnitv3 and/or Standalone plug-ins, you need to add the juce_audio_utils module!\r
+ #error To compile AudioUnitv3 and/or Standalone plug-ins, you need to add the juce_audio_utils and juce_audio_devices modules!\r
 #endif\r
 \r
 #include "Standalone/juce_StandaloneFilterApp.cpp"\r
index d239cc1ecaf8407d488c21bdc86523b662a16da6..a324d3182648b92122d34238497a6557c64d7ca7 100644 (file)
 #ifndef JUCE_FAKEMOUSEMOVEGENERATOR_H_INCLUDED\r
 #define JUCE_FAKEMOUSEMOVEGENERATOR_H_INCLUDED\r
 \r
-#if JUCE_MAC && JUCE_SUPPORT_CARBON\r
+#if JUCE_MAC\r
 \r
 //==============================================================================\r
-// Helper class to workaround carbon windows not getting mouse-moves..\r
+// Helper class to workaround windows not getting mouse-moves...\r
 class FakeMouseMoveGenerator  : private Timer\r
 {\r
 public:\r
@@ -39,7 +39,7 @@ public:
 \r
     void timerCallback() override\r
     {\r
-        // workaround for carbon windows not getting mouse-moves..\r
+        // Workaround for windows not getting mouse-moves...\r
         const Point<float> screenPos (Desktop::getInstance().getMainMouseSource().getScreenPosition());\r
 \r
         if (screenPos != lastScreenPos)\r
index fcc90905c0132f9fcaab84375cc1372285fe1816..5aed3fe4b2ceaf45750cfda326f03799e3f409ce 100644 (file)
@@ -63,8 +63,10 @@ private:
 #endif\r
 \r
 //==============================================================================\r
+#if MAC_OS_X_VERSION_MAX_ALLOWED < 101200\r
 enum\r
 {\r
     /** Custom AudioUnit property used to indicate MPE support */\r
-    kAudioUnitProperty_SupportsMPE = 75001\r
+    kAudioUnitProperty_SupportsMPE = 58\r
 };\r
+#endif\r
index 552d4154f3fdf5560a4d7a6d7dac62e9dbbbed3c..14d1964e60eef3d0dfd5c2f35f854ab6423f0682 100644 (file)
@@ -399,18 +399,7 @@ public:
                               (int) (numOutputBusChannels * numOutputBusses),\r
                               rate, blockSize);\r
         setLatencySamples (0);\r
-\r
-        if (parameters.size() == 0)\r
-        {\r
-            // some plugins crash if initialiseAudioUnit() is called too soon (sigh..), so we'll\r
-            // only call it here if it seems like they it's one of the awkward plugins that can\r
-            // only create their parameters after it has been initialised.\r
-            if (! initialiseAudioUnit())\r
-                return false;\r
-\r
-            refreshParameterList();\r
-        }\r
-\r
+        refreshParameterList();\r
         setPluginCallbacks();\r
         return true;\r
     }\r
@@ -532,7 +521,7 @@ public:
             resetBusses();\r
 \r
             jassert (! prepared);\r
-            initialiseAudioUnit();\r
+            prepared = (AudioUnitInitialize (audioUnit) == noErr);\r
         }\r
     }\r
 \r
@@ -552,14 +541,6 @@ public:
         incomingMidi.clear();\r
     }\r
 \r
-    bool initialiseAudioUnit()\r
-    {\r
-        if (! prepared)\r
-            prepared = (AudioUnitInitialize (audioUnit) == noErr);\r
-\r
-        return prepared;\r
-    }\r
-\r
     void resetBusses()\r
     {\r
         for (AudioUnitElement i = 0; i < numInputBusses; ++i)   AudioUnitReset (audioUnit, kAudioUnitScope_Input, i);\r
@@ -873,8 +854,6 @@ public:
 \r
         if (propertyList != 0)\r
         {\r
-            initialiseAudioUnit();\r
-\r
             AudioUnitSetProperty (audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global,\r
                                   0, &propertyList, sizeof (propertyList));\r
 \r
@@ -1072,7 +1051,6 @@ private:
         event.mEventType = kAudioUnitEvent_PropertyChange;\r
         event.mArgument.mProperty.mPropertyID = type;\r
         event.mArgument.mProperty.mAudioUnit = audioUnit;\r
-        event.mArgument.mProperty.mPropertyID = kAudioUnitProperty_PresentPreset;\r
         event.mArgument.mProperty.mScope = kAudioUnitScope_Global;\r
         event.mArgument.mProperty.mElement = 0;\r
         AUEventListenerAddEventType (eventListenerRef, nullptr, &event);\r
@@ -1080,28 +1058,39 @@ private:
 \r
     void eventCallback (const AudioUnitEvent& event, AudioUnitParameterValue newValue)\r
     {\r
+        int paramIndex = -1;\r
+\r
+        if (event.mEventType == kAudioUnitEvent_ParameterValueChange\r
+         || event.mEventType == kAudioUnitEvent_BeginParameterChangeGesture\r
+         || event.mEventType == kAudioUnitEvent_EndParameterChangeGesture)\r
+        {\r
+            for (paramIndex = 0; paramIndex < parameters.size(); ++paramIndex)\r
+            {\r
+                const ParamInfo& p = *parameters.getUnchecked(paramIndex);\r
+\r
+                if (p.paramID == event.mArgument.mParameter.mParameterID)\r
+                    break;\r
+            }\r
+\r
+            if (! isPositiveAndBelow (paramIndex, parameters.size()))\r
+                return;\r
+        }\r
+\r
         switch (event.mEventType)\r
         {\r
             case kAudioUnitEvent_ParameterValueChange:\r
-                for (int i = 0; i < parameters.size(); ++i)\r
                 {\r
-                    const ParamInfo& p = *parameters.getUnchecked(i);\r
-\r
-                    if (p.paramID == event.mArgument.mParameter.mParameterID)\r
-                    {\r
-                        sendParamChangeMessageToListeners (i, (newValue - p.minValue) / (p.maxValue - p.minValue));\r
-                        break;\r
-                    }\r
+                    const ParamInfo& p = *parameters.getUnchecked(paramIndex);\r
+                    sendParamChangeMessageToListeners (paramIndex, (newValue - p.minValue) / (p.maxValue - p.minValue));\r
                 }\r
-\r
                 break;\r
 \r
             case kAudioUnitEvent_BeginParameterChangeGesture:\r
-                beginParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID);\r
+                beginParameterChangeGesture (paramIndex);\r
                 break;\r
 \r
             case kAudioUnitEvent_EndParameterChangeGesture:\r
-                endParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID);\r
+                endParameterChangeGesture (paramIndex);\r
                 break;\r
 \r
             default:\r
@@ -1535,9 +1524,6 @@ private:
 \r
     bool createView (const bool createGenericViewIfNeeded)\r
     {\r
-        if (! plugin.initialiseAudioUnit())\r
-            return false;\r
-\r
         JUCE_IOS_MAC_VIEW* pluginView = nil;\r
         UInt32 dataSize = 0;\r
         Boolean isWritable = false;\r
index 486bf02088087eddf71873873ee8e34781019752..2ba2b14fcf1650b830f034888f4752bb8a9910b1 100644 (file)
@@ -1664,8 +1664,8 @@ public:
         isControllerInitialised = true;\r
         editController->setComponentHandler (host);\r
         grabInformationObjects();\r
-        synchroniseStates();\r
         interconnectComponentAndController();\r
+        synchroniseStates();\r
         syncProgramNames();\r
         setupIO();\r
         return true;\r
diff --git a/modules/juce_audio_processors/format_types/juce_VSTInterface.h b/modules/juce_audio_processors/format_types/juce_VSTInterface.h
new file mode 100644 (file)
index 0000000..b0d1bd0
--- /dev/null
@@ -0,0 +1,458 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2016 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   -----------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+#ifndef JUCE_VSTINTERFACE_H_INCLUDED\r
+#define JUCE_VSTINTERFACE_H_INCLUDED\r
+\r
+#include "../../juce_core/juce_core.h"\r
+\r
+using namespace juce;\r
+\r
+#if JUCE_MSVC\r
+ #define VSTINTERFACECALL __cdecl\r
+ #pragma pack(push)\r
+ #pragma pack(8)\r
+#elif JUCE_MAC || JUCE_IOS\r
+ #define VSTINTERFACECALL\r
+ #if JUCE_64BIT\r
+  #pragma options align=power\r
+ #else\r
+  #pragma options align=mac68k\r
+ #endif\r
+#else\r
+ #define VSTINTERFACECALL\r
+ #pragma pack(push, 8)\r
+#endif\r
+\r
+const int32 juceVstInterfaceVersion = 2400;\r
+const int32 juceVstInterfaceIdentifier = 0x56737450;    // The "magic" identifier in the SDK is 'VstP'.\r
+\r
+//==============================================================================\r
+struct VstEffectInterface\r
+{\r
+    int32 interfaceIdentifier;\r
+    pointer_sized_int (VSTINTERFACECALL* dispatchFunction)          (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);\r
+    void              (VSTINTERFACECALL* processAudioFunction)      (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples);\r
+    void              (VSTINTERFACECALL* setParameterValueFunction) (VstEffectInterface*, int32 parameterIndex, float value);\r
+    float             (VSTINTERFACECALL* getParameterValueFunction) (VstEffectInterface*, int32 parameterIndex);\r
+    int32 numPrograms;\r
+    int32 numParameters;\r
+    int32 numInputChannels;\r
+    int32 numOutputChannels;\r
+    int32 flags;\r
+    pointer_sized_int hostSpace1;\r
+    pointer_sized_int hostSpace2;\r
+    int32 latency;\r
+    int32 deprecated1;\r
+    int32 deprecated2;\r
+    float deprecated3;\r
+    void* effectPointer;\r
+    void* userPointer;\r
+    int32 plugInIdentifier;\r
+    int32 plugInVersion;\r
+    void (VSTINTERFACECALL* processAudioInplaceFunction)       (VstEffectInterface*, float**  inputs, float**  outputs, int32 numSamples);\r
+    void (VSTINTERFACECALL* processDoubleAudioInplaceFunction) (VstEffectInterface*, double** inputs, double** outputs, int32 numSamples);\r
+    char emptySpace[56];\r
+};\r
+\r
+typedef pointer_sized_int (VSTINTERFACECALL* VstHostCallback) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);\r
+\r
+enum VstEffectInterfaceFlags\r
+{\r
+    vstEffectFlagHasEditor          = 1,\r
+    vstEffectFlagInplaceAudio       = 16,\r
+    vstEffectFlagDataInChunks       = 32,\r
+    vstEffectFlagIsSynth            = 256,\r
+    vstEffectFlagInplaceDoubleAudio = 4096\r
+};\r
+\r
+//==============================================================================\r
+enum VstHostToPlugInOpcodes\r
+{\r
+    plugInOpcodeOpen,\r
+    plugInOpcodeClose,\r
+    plugInOpcodeSetCurrentProgram,\r
+    plugInOpcodeGetCurrentProgram,\r
+    plugInOpcodeSetCurrentProgramName,\r
+    plugInOpcodeGetCurrentProgramName,\r
+    plugInOpcodeGetParameterLabel,\r
+    plugInOpcodeGetParameterText,\r
+    plugInOpcodeGetParameterName,\r
+    plugInOpcodeSetSampleRate = plugInOpcodeGetParameterName + 2,\r
+    plugInOpcodeSetBlockSize,\r
+    plugInOpcodeResumeSuspend,\r
+    plugInOpcodeGetEditorBounds,\r
+    plugInOpcodeOpenEditor,\r
+    plugInOpcodeCloseEditor,\r
+    plugInOpcodeDrawEditor,\r
+    plugInOpcodeGetMouse,\r
+    plugInOpcodeEditorIdle = plugInOpcodeGetMouse + 2,\r
+    plugInOpcodeeffEditorTop,\r
+    plugInOpcodeSleepEditor,\r
+    plugInOpcodeIdentify,\r
+    plugInOpcodeGetData,\r
+    plugInOpcodeSetData,\r
+    plugInOpcodePreAudioProcessingEvents,\r
+    plugInOpcodeIsParameterAutomatable,\r
+    plugInOpcodeParameterValueForText,\r
+    plugInOpcodeGetProgramName = plugInOpcodeParameterValueForText + 2,\r
+    plugInOpcodeConnectInput = plugInOpcodeGetProgramName + 2,\r
+    plugInOpcodeConnectOutput,\r
+    plugInOpcodeGetInputPinProperties,\r
+    plugInOpcodeGetOutputPinProperties,\r
+    plugInOpcodeGetPlugInCategory,\r
+    plugInOpcodeSetSpeakerConfiguration = plugInOpcodeGetPlugInCategory + 7,\r
+    plugInOpcodeSetBypass = plugInOpcodeSetSpeakerConfiguration + 2,\r
+    plugInOpcodeGetPlugInName,\r
+    plugInOpcodeGetManufacturerName = plugInOpcodeGetPlugInName + 2,\r
+    plugInOpcodeGetManufacturerProductName,\r
+    plugInOpcodeGetManufacturerVersion,\r
+    plugInOpcodeManufacturerSpecific,\r
+    plugInOpcodeCanPlugInDo,\r
+    plugInOpcodeGetTailSize,\r
+    plugInOpcodeIdle,\r
+    plugInOpcodeKeyboardFocusRequired = plugInOpcodeIdle + 4,\r
+    plugInOpcodeGetVstInterfaceVersion,\r
+    plugInOpcodeGetCurrentMidiProgram = plugInOpcodeGetVstInterfaceVersion + 5,\r
+    plugInOpcodeGetSpeakerArrangement = plugInOpcodeGetCurrentMidiProgram + 6,\r
+    plugInOpcodeNextPlugInUniqueID,\r
+    plugInOpcodeStartProcess,\r
+    plugInOpcodeStopProcess,\r
+    plugInOpcodeSetNumberOfSamplesToProcess,\r
+    plugInOpcodeSetSampleFloatType = plugInOpcodeSetNumberOfSamplesToProcess + 4,\r
+    plugInOpcodeMaximum = plugInOpcodeSetSampleFloatType\r
+};\r
+\r
+\r
+enum VstPlugInToHostOpcodes\r
+{\r
+    hostOpcodeParameterChanged,\r
+    hostOpcodeVstVersion,\r
+    hostOpcodeCurrentId,\r
+    hostOpcodeIdle,\r
+    hostOpcodePinConnected,\r
+    hostOpcodePlugInWantsMidi = hostOpcodePinConnected + 2,\r
+    hostOpcodeGetTimingInfo,\r
+    hostOpcodePreAudioProcessingEvents,\r
+    hostOpcodeSetTime,\r
+    hostOpcodeTempoAt,\r
+    hostOpcodeGetNumberOfAutomatableParameters,\r
+    hostOpcodeGetParameterInterval,\r
+    hostOpcodeIOModified,\r
+    hostOpcodeNeedsIdle,\r
+    hostOpcodeWindowSize,\r
+    hostOpcodeGetSampleRate,\r
+    hostOpcodeGetBlockSize,\r
+    hostOpcodeGetInputLatency,\r
+    hostOpcodeGetOutputLatency,\r
+    hostOpcodeGetPreviousPlugIn,\r
+    hostOpcodeGetNextPlugIn,\r
+    hostOpcodeWillReplace,\r
+    hostOpcodeGetCurrentAudioProcessingLevel,\r
+    hostOpcodeGetAutomationState,\r
+    hostOpcodeOfflineStart,\r
+    hostOpcodeOfflineReadSource,\r
+    hostOpcodeOfflineWrite,\r
+    hostOpcodeOfflineGetCurrentPass,\r
+    hostOpcodeOfflineGetCurrentMetaPass,\r
+    hostOpcodeSetOutputSampleRate,\r
+    hostOpcodeGetOutputSpeakerConfiguration,\r
+    hostOpcodeGetManufacturerName,\r
+    hostOpcodeGetProductName,\r
+    hostOpcodeGetManufacturerVersion,\r
+    hostOpcodeManufacturerSpecific,\r
+    hostOpcodeSetIcon,\r
+    hostOpcodeCanHostDo,\r
+    hostOpcodeGetLanguage,\r
+    hostOpcodeOpenEditorWindow,\r
+    hostOpcodeCloseEditorWindow,\r
+    hostOpcodeGetDirectory,\r
+    hostOpcodeUpdateView,\r
+    hostOpcodeParameterChangeGestureBegin,\r
+    hostOpcodeParameterChangeGestureEnd,\r
+};\r
+\r
+//==============================================================================\r
+enum VstProcessingSampleType\r
+{\r
+    vstProcessingSampleTypeFloat,\r
+    vstProcessingSampleTypeDouble\r
+};\r
+\r
+//==============================================================================\r
+// These names must be identical to the Steinberg SDK so JUCE users can set\r
+// exactly what they want.\r
+enum VstPlugInCategory\r
+{\r
+    kPlugCategUnknown,\r
+    kPlugCategEffect,\r
+    kPlugCategSynth,\r
+    kPlugCategAnalysis,\r
+    kPlugCategMastering,\r
+    kPlugCategSpacializer,\r
+    kPlugCategRoomFx,\r
+    kPlugSurroundFx,\r
+    kPlugCategRestoration,\r
+    kPlugCategOfflineProcess,\r
+    kPlugCategShell,\r
+    kPlugCategGenerator\r
+};\r
+\r
+//==============================================================================\r
+struct VstEditorBounds\r
+{\r
+    int16 upper;\r
+    int16 leftmost;\r
+    int16 lower;\r
+    int16 rightmost;\r
+};\r
+\r
+//==============================================================================\r
+enum VstMaxStringLengths\r
+{\r
+    vstMaxNameLength                     = 64,\r
+    vstMaxParameterOrPinLabelLength      = 64,\r
+    vstMaxParameterOrPinShortLabelLength = 8,\r
+    vstMaxCategoryLength                 = 24,\r
+    vstMaxManufacturerStringLength       = 64,\r
+    vstMaxPlugInNameStringLength         = 64\r
+};\r
+\r
+//==============================================================================\r
+struct VstPinInfo\r
+{\r
+    char text[vstMaxParameterOrPinLabelLength];\r
+    int32 flags;\r
+    int32 configurationType;\r
+    char shortText[vstMaxParameterOrPinShortLabelLength];\r
+    char unused[48];\r
+};\r
+\r
+enum VstPinInfoFlags\r
+{\r
+    vstPinInfoFlagIsActive = 1,\r
+    vstPinInfoFlagIsStereo = 2,\r
+    vstPinInfoFlagValid    = 4\r
+};\r
+\r
+//==============================================================================\r
+struct VstEvent\r
+{\r
+    int32 type;\r
+    int32 size;\r
+    int32 sampleOffset;\r
+    int32 flags;\r
+    char content[16];\r
+};\r
+\r
+enum VstEventTypes\r
+{\r
+    vstMidiEventType  = 1,\r
+    vstSysExEventType = 6\r
+};\r
+\r
+struct VstEventBlock\r
+{\r
+    int32 numberOfEvents;\r
+    pointer_sized_int future;\r
+    VstEvent* events[2];\r
+};\r
+\r
+struct VstMidiEvent\r
+{\r
+    int32 type;\r
+    int32 size;\r
+    int32 sampleOffset;\r
+    int32 flags;\r
+    int32 noteSampleLength;\r
+    int32 noteSampleOffset;\r
+    char midiData[4];\r
+    char tuning;\r
+    char noteVelocityOff;\r
+    char future1;\r
+    char future2;\r
+};\r
+\r
+enum VstMidiEventFlags\r
+{\r
+    vstMidiEventIsRealtime = 1\r
+};\r
+\r
+struct VstSysExEvent\r
+{\r
+    int32 type;\r
+    int32 size;\r
+    int32 offsetSamples;\r
+    int32 flags;\r
+    int32 sysExDumpSize;\r
+    pointer_sized_int future1;\r
+    char* sysExDump;\r
+    pointer_sized_int future2;\r
+};\r
+\r
+//==============================================================================\r
+struct VstTimingInformation\r
+{\r
+    double samplePosition;\r
+    double sampleRate;\r
+    double systemTimeNanoseconds;\r
+    double musicalPosition;\r
+    double tempoBPM;\r
+    double lastBarPosition;\r
+    double loopStartPosition;\r
+    double loopEndPosition;\r
+    int32 timeSignatureNumerator;\r
+    int32 timeSignatureDenominator;\r
+    int32 smpteOffset;\r
+    int32 smpteRate;\r
+    int32 samplesToNearestClock;\r
+    int32 flags;\r
+};\r
+\r
+enum VstTimingInformationFlags\r
+{\r
+    vstTimingInfoFlagTransportChanged          = 1,\r
+    vstTimingInfoFlagCurrentlyPlaying          = 2,\r
+    vstTimingInfoFlagLoopActive                = 4,\r
+    vstTimingInfoFlagCurrentlyRecording        = 8,\r
+    vstTimingInfoFlagAutomationWriteModeActive = 64,\r
+    vstTimingInfoFlagAutomationReadModeActive  = 128,\r
+    vstTimingInfoFlagNanosecondsValid          = 256,\r
+    vstTimingInfoFlagMusicalPositionValid      = 512,\r
+    vstTimingInfoFlagTempoValid                = 1024,\r
+    vstTimingInfoFlagLastBarPositionValid      = 2056,\r
+    vstTimingInfoFlagLoopPositionValid         = 4096,\r
+    vstTimingInfoFlagTimeSignatureValid        = 8192,\r
+    vstTimingInfoFlagSmpteValid                = 16384,\r
+    vstTimingInfoFlagNearestClockValid         = 32768\r
+};\r
+\r
+//==============================================================================\r
+enum VstSmpteRates\r
+{\r
+    vstSmpteRateFps24,\r
+    vstSmpteRateFps25,\r
+    vstSmpteRateFps2997,\r
+    vstSmpteRateFps30,\r
+    vstSmpteRateFps2997drop,\r
+    vstSmpteRateFps30drop,\r
+\r
+    vstSmpteRate16mmFilm,\r
+    vstSmpteRate35mmFilm,\r
+\r
+    vstSmpteRateFps239 = vstSmpteRate35mmFilm + 3,\r
+    vstSmpteRateFps249 ,\r
+    vstSmpteRateFps599,\r
+    vstSmpteRateFps60\r
+};\r
+\r
+//==============================================================================\r
+struct VstIndividualSpeakerInfo\r
+{\r
+    float azimuthalAngle;\r
+    float elevationAngle;\r
+    float radius;\r
+    float reserved;\r
+    char label[vstMaxNameLength];\r
+    int32 type;\r
+    char unused[28];\r
+};\r
+\r
+enum VstIndividualSpeakerType\r
+{\r
+    vstIndividualSpeakerTypeUndefined = 0x7fffffff,\r
+    vstIndividualSpeakerTypeMono = 0,\r
+    vstIndividualSpeakerTypeLeft,\r
+    vstIndividualSpeakerTypeRight,\r
+    vstIndividualSpeakerTypeCentre,\r
+    vstIndividualSpeakerTypeSubbass,\r
+    vstIndividualSpeakerTypeLeftSurround,\r
+    vstIndividualSpeakerTypeRightSurround,\r
+    vstIndividualSpeakerTypeLeftCentre,\r
+    vstIndividualSpeakerTypeRightCentre,\r
+    vstIndividualSpeakerTypeSurround,\r
+    vstIndividualSpeakerTypeCentreSurround = vstIndividualSpeakerTypeSurround,\r
+    vstIndividualSpeakerTypeLeftRearSurround,\r
+    vstIndividualSpeakerTypeRightRearSurround,\r
+    vstIndividualSpeakerTypeTopMiddle,\r
+    vstIndividualSpeakerTypeTopFrontLeft,\r
+    vstIndividualSpeakerTypeTopFrontCentre,\r
+    vstIndividualSpeakerTypeTopFrontRight,\r
+    vstIndividualSpeakerTypeTopRearLeft,\r
+    vstIndividualSpeakerTypeTopRearCentre,\r
+    vstIndividualSpeakerTypeTopRearRight,\r
+    vstIndividualSpeakerTypeSubbass2\r
+};\r
+\r
+struct VstSpeakerConfiguration\r
+{\r
+    int32 type;\r
+    int32 numberOfChannels;\r
+    VstIndividualSpeakerInfo speakers[8];\r
+};\r
+\r
+enum VstSpeakerConfigurationType\r
+{\r
+    vstSpeakerConfigTypeUser  = -2,\r
+    vstSpeakerConfigTypeEmpty = -1,\r
+    vstSpeakerConfigTypeMono  = 0,\r
+    vstSpeakerConfigTypeLR,\r
+    vstSpeakerConfigTypeLsRs,\r
+    vstSpeakerConfigTypeLcRc,\r
+    vstSpeakerConfigTypeSlSr,\r
+    vstSpeakerConfigTypeCLfe,\r
+    vstSpeakerConfigTypeLRC,\r
+    vstSpeakerConfigTypeLRS,\r
+    vstSpeakerConfigTypeLRCLfe,\r
+    vstSpeakerConfigTypeLRLfeS,\r
+    vstSpeakerConfigTypeLRCS,\r
+    vstSpeakerConfigTypeLRLsRs,\r
+    vstSpeakerConfigTypeLRCLfeS,\r
+    vstSpeakerConfigTypeLRLfeLsRs,\r
+    vstSpeakerConfigTypeLRCLsRs,\r
+    vstSpeakerConfigTypeLRCLfeLsRs,\r
+    vstSpeakerConfigTypeLRCLsRsCs,\r
+    vstSpeakerConfigTypeLRLsRsSlSr,\r
+    vstSpeakerConfigTypeLRCLfeLsRsCs,\r
+    vstSpeakerConfigTypeLRLfeLsRsSlSr,\r
+    vstSpeakerConfigTypeLRCLsRsLcRc,\r
+    vstSpeakerConfigTypeLRCLsRsSlSr,\r
+    vstSpeakerConfigTypeLRCLfeLsRsLcRc,\r
+    vstSpeakerConfigTypeLRCLfeLsRsSlSr,\r
+    vstSpeakerConfigTypeLRCLsRsLcRcCs,\r
+    vstSpeakerConfigTypeLRCLsRsCsSlSr,\r
+    vstSpeakerConfigTypeLRCLfeLsRsLcRcCs,\r
+    vstSpeakerConfigTypeLRCLfeLsRsCsSlSr,\r
+    vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2\r
+};\r
+\r
+#if JUCE_MSVC\r
+ #pragma pack(pop)\r
+#elif JUCE_MAC || JUCE_IOS\r
+ #pragma options align=reset\r
+#else\r
+ #pragma pack(pop)\r
+#endif\r
+\r
+#endif // JUCE_VSTINTERFACE_H_INCLUDED\r
index 11cbe4f7fdc7254cb1cb34d0018bbd2965740542..2d486a59b62154f4ef7f2f102408b41bcc42edbd 100644 (file)
@@ -22,7 +22,8 @@
   ==============================================================================\r
 */\r
 \r
-#ifdef __aeffect__ // NB: this must come first, *before* the header-guard.\r
+// NB: this must come first, *before* the header-guard.\r
+#ifdef JUCE_VSTINTERFACE_H_INCLUDED\r
 \r
 #ifndef JUCE_VSTMIDIEVENTLIST_H_INCLUDED\r
 #define JUCE_VSTMIDIEVENTLIST_H_INCLUDED\r
@@ -53,7 +54,7 @@ public:
         numEventsUsed = 0;\r
 \r
         if (events != nullptr)\r
-            events->numEvents = 0;\r
+            events->numberOfEvents = 0;\r
     }\r
 \r
     void addEvent (const void* const midiData, const int numBytes, const int frameOffset)\r
@@ -61,65 +62,65 @@ public:
         ensureSize (numEventsUsed + 1);\r
 \r
         VstMidiEvent* const e = (VstMidiEvent*) (events->events [numEventsUsed]);\r
-        events->numEvents = ++numEventsUsed;\r
+        events->numberOfEvents = ++numEventsUsed;\r
 \r
         if (numBytes <= 4)\r
         {\r
-            if (e->type == kVstSysExType)\r
+            if (e->type == vstSysExEventType)\r
             {\r
-                delete[] (((VstMidiSysexEvent*) e)->sysexDump);\r
-                e->type = kVstMidiType;\r
-                e->byteSize = sizeof (VstMidiEvent);\r
-                e->noteLength = 0;\r
-                e->noteOffset = 0;\r
-                e->detune = 0;\r
-                e->noteOffVelocity = 0;\r
+                delete[] (((VstSysExEvent*) e)->sysExDump);\r
+                e->type = vstMidiEventType;\r
+                e->size = sizeof (VstMidiEvent);\r
+                e->noteSampleLength = 0;\r
+                e->noteSampleOffset = 0;\r
+                e->tuning = 0;\r
+                e->noteVelocityOff = 0;\r
             }\r
 \r
-            e->deltaFrames = frameOffset;\r
+            e->sampleOffset = frameOffset;\r
             memcpy (e->midiData, midiData, (size_t) numBytes);\r
         }\r
         else\r
         {\r
-            VstMidiSysexEvent* const se = (VstMidiSysexEvent*) e;\r
+            VstSysExEvent* const se = (VstSysExEvent*) e;\r
 \r
-            if (se->type == kVstSysExType)\r
-                delete[] se->sysexDump;\r
+            if (se->type == vstSysExEventType)\r
+                delete[] se->sysExDump;\r
 \r
-            se->sysexDump = new char [numBytes];\r
-            memcpy (se->sysexDump, midiData, (size_t) numBytes);\r
+            se->sysExDump = new char [(size_t) numBytes];\r
+            memcpy (se->sysExDump, midiData, (size_t) numBytes);\r
 \r
-            se->type = kVstSysExType;\r
-            se->byteSize = sizeof (VstMidiSysexEvent);\r
-            se->deltaFrames = frameOffset;\r
+            se->type = vstSysExEventType;\r
+            se->size = sizeof (VstSysExEvent);\r
+            se->offsetSamples = frameOffset;\r
             se->flags = 0;\r
-            se->dumpBytes = numBytes;\r
-            se->resvd1 = 0;\r
-            se->resvd2 = 0;\r
+            se->sysExDumpSize = numBytes;\r
+            se->future1 = 0;\r
+            se->future2 = 0;\r
         }\r
     }\r
 \r
     //==============================================================================\r
     // Handy method to pull the events out of an event buffer supplied by the host\r
     // or plugin.\r
-    static void addEventsToMidiBuffer (const VstEvents* events, MidiBuffer& dest)\r
+    static void addEventsToMidiBuffer (const VstEventBlock* events, MidiBuffer& dest)\r
     {\r
-        for (int i = 0; i < events->numEvents; ++i)\r
+        for (int i = 0; i < events->numberOfEvents; ++i)\r
         {\r
             const VstEvent* const e = events->events[i];\r
 \r
             if (e != nullptr)\r
             {\r
-                if (e->type == kVstMidiType)\r
+                if (e->type == vstMidiEventType)\r
                 {\r
                     dest.addEvent ((const juce::uint8*) ((const VstMidiEvent*) e)->midiData,\r
-                                   4, e->deltaFrames);\r
+                                   4, e->sampleOffset);\r
                 }\r
-                else if (e->type == kVstSysExType)\r
+                else if (e->type == vstSysExEventType)\r
                 {\r
-                    dest.addEvent ((const juce::uint8*) ((const VstMidiSysexEvent*) e)->sysexDump,\r
-                                   (int) ((const VstMidiSysexEvent*) e)->dumpBytes,\r
-                                   e->deltaFrames);\r
+                    dest.addEvent ((const juce::uint8*) ((const VstSysExEvent*) e)->sysExDump,\r
+                                   (int) ((const VstSysExEvent*) e)->sysExDumpSize,\r
+                                   e->sampleOffset);\r
                 }\r
             }\r
         }\r
@@ -160,24 +161,24 @@ public:
     }\r
 \r
     //==============================================================================\r
-    HeapBlock<VstEvents> events;\r
+    HeapBlock<VstEventBlock> events;\r
 \r
 private:\r
     int numEventsUsed, numEventsAllocated;\r
 \r
     static VstEvent* allocateVSTEvent()\r
     {\r
-        VstEvent* const e = (VstEvent*) std::calloc (1, sizeof (VstMidiEvent) > sizeof (VstMidiSysexEvent) ? sizeof (VstMidiEvent)\r
-                                                                                                           : sizeof (VstMidiSysexEvent));\r
-        e->type = kVstMidiType;\r
-        e->byteSize = sizeof (VstMidiEvent);\r
+        VstEvent* const e = (VstEvent*) std::calloc (1, sizeof (VstMidiEvent) > sizeof (VstSysExEvent) ? sizeof (VstMidiEvent)\r
+                                                                                                           : sizeof (VstSysExEvent));\r
+        e->type = vstMidiEventType;\r
+        e->size = sizeof (VstMidiEvent);\r
         return e;\r
     }\r
 \r
     static void freeVSTEvent (VstEvent* e)\r
     {\r
-        if (e->type == kVstSysExType)\r
-            delete[] (((VstMidiSysexEvent*) e)->sysexDump);\r
+        if (e->type == vstSysExEventType)\r
+            delete[] (((VstSysExEvent*) e)->sysExDump);\r
 \r
         std::free (e);\r
     }\r
index 46adb5c00bebb2871a37774c4575bef70d6c5b5b..0fe2304232359146212a574141d6b4e65e8a1381 100644 (file)
@@ -31,7 +31,6 @@
 \r
 //==============================================================================\r
 #undef PRAGMA_ALIGN_SUPPORTED\r
-#define VST_FORCE_DEPRECATED 0\r
 \r
 #if JUCE_MSVC\r
  #pragma warning (push)\r
  #define __cdecl\r
 #endif\r
 \r
-/*  Obviously you're going to need the Steinberg vstsdk2.4 folder in\r
-    your include path if you want to add VST support.\r
-\r
-    If you're not interested in VSTs, you can disable them by setting the\r
-    JUCE_PLUGINHOST_VST flag to 0.\r
-*/\r
-#include "pluginterfaces/vst2.x/aeffectx.h"\r
+namespace\r
+{\r
+#include "juce_VSTInterface.h"\r
+}\r
 \r
 #if JUCE_MSVC\r
  #pragma warning (pop)\r
@@ -83,67 +79,67 @@ namespace
 \r
     struct fxProgram\r
     {\r
-        VstInt32 chunkMagic;    // 'CcnK'\r
-        VstInt32 byteSize;      // of this chunk, excl. magic + byteSize\r
-        VstInt32 fxMagic;       // 'FxCk'\r
-        VstInt32 version;\r
-        VstInt32 fxID;          // fx unique id\r
-        VstInt32 fxVersion;\r
-        VstInt32 numParams;\r
+        int32 chunkMagic;    // 'CcnK'\r
+        int32 byteSize;      // of this chunk, excl. magic + byteSize\r
+        int32 fxMagic;       // 'FxCk'\r
+        int32 version;\r
+        int32 fxID;          // fx unique id\r
+        int32 fxVersion;\r
+        int32 numParams;\r
         char prgName[28];\r
         float params[1];        // variable no. of parameters\r
     };\r
 \r
     struct fxSet\r
     {\r
-        VstInt32 chunkMagic;    // 'CcnK'\r
-        VstInt32 byteSize;      // of this chunk, excl. magic + byteSize\r
-        VstInt32 fxMagic;       // 'FxBk'\r
-        VstInt32 version;\r
-        VstInt32 fxID;          // fx unique id\r
-        VstInt32 fxVersion;\r
-        VstInt32 numPrograms;\r
+        int32 chunkMagic;    // 'CcnK'\r
+        int32 byteSize;      // of this chunk, excl. magic + byteSize\r
+        int32 fxMagic;       // 'FxBk'\r
+        int32 version;\r
+        int32 fxID;          // fx unique id\r
+        int32 fxVersion;\r
+        int32 numPrograms;\r
         char future[128];\r
         fxProgram programs[1];  // variable no. of programs\r
     };\r
 \r
     struct fxChunkSet\r
     {\r
-        VstInt32 chunkMagic;    // 'CcnK'\r
-        VstInt32 byteSize;      // of this chunk, excl. magic + byteSize\r
-        VstInt32 fxMagic;       // 'FxCh', 'FPCh', or 'FBCh'\r
-        VstInt32 version;\r
-        VstInt32 fxID;          // fx unique id\r
-        VstInt32 fxVersion;\r
-        VstInt32 numPrograms;\r
+        int32 chunkMagic;    // 'CcnK'\r
+        int32 byteSize;      // of this chunk, excl. magic + byteSize\r
+        int32 fxMagic;       // 'FxCh', 'FPCh', or 'FBCh'\r
+        int32 version;\r
+        int32 fxID;          // fx unique id\r
+        int32 fxVersion;\r
+        int32 numPrograms;\r
         char future[128];\r
-        VstInt32 chunkSize;\r
+        int32 chunkSize;\r
         char chunk[8];          // variable\r
     };\r
 \r
     struct fxProgramSet\r
     {\r
-        VstInt32 chunkMagic;    // 'CcnK'\r
-        VstInt32 byteSize;      // of this chunk, excl. magic + byteSize\r
-        VstInt32 fxMagic;       // 'FxCh', 'FPCh', or 'FBCh'\r
-        VstInt32 version;\r
-        VstInt32 fxID;          // fx unique id\r
-        VstInt32 fxVersion;\r
-        VstInt32 numPrograms;\r
+        int32 chunkMagic;    // 'CcnK'\r
+        int32 byteSize;      // of this chunk, excl. magic + byteSize\r
+        int32 fxMagic;       // 'FxCh', 'FPCh', or 'FBCh'\r
+        int32 version;\r
+        int32 fxID;          // fx unique id\r
+        int32 fxVersion;\r
+        int32 numPrograms;\r
         char name[28];\r
-        VstInt32 chunkSize;\r
+        int32 chunkSize;\r
         char chunk[8];          // variable\r
     };\r
 \r
     // Compares a magic value in either endianness.\r
-    static bool compareMagic (VstInt32 magic, const char* name) noexcept\r
+    static bool compareMagic (int32 magic, const char* name) noexcept\r
     {\r
-        return magic == (VstInt32) ByteOrder::littleEndianInt (name)\r
-            || magic == (VstInt32) ByteOrder::bigEndianInt (name);\r
+        return magic == (int32) ByteOrder::littleEndianInt (name)\r
+            || magic == (int32) ByteOrder::bigEndianInt (name);\r
     }\r
 \r
-    static VstInt32 fxbName (const char* name) noexcept   { return (VstInt32) ByteOrder::littleEndianInt (name); }\r
-    static VstInt32 fxbSwap (const VstInt32 x) noexcept   { return (VstInt32) ByteOrder::swapIfLittleEndian ((uint32) x); }\r
+    static int32 fxbName (const char* name) noexcept   { return (int32) ByteOrder::littleEndianInt (name); }\r
+    static int32 fxbSwap (const int32 x) noexcept   { return (int32) ByteOrder::swapIfLittleEndian ((uint32) x); }\r
 \r
     static float fxbSwapFloat (const float x) noexcept\r
     {\r
@@ -206,8 +202,8 @@ namespace
 }\r
 \r
 //==============================================================================\r
-typedef AEffect* (VSTCALLBACK *MainCall) (audioMasterCallback);\r
-static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);\r
+typedef VstEffectInterface* (VSTINTERFACECALL *MainCall) (VstHostCallback);\r
+static pointer_sized_int VSTINTERFACECALL audioMaster (VstEffectInterface* effect, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt);\r
 \r
 //==============================================================================\r
 // Change this to disable logging of various VST activities\r
@@ -437,9 +433,9 @@ public:
         module.close();\r
     }\r
 \r
-    void closeEffect (AEffect* eff)\r
+    void closeEffect (VstEffectInterface* eff)\r
     {\r
-        eff->dispatcher (eff, effClose, 0, 0, 0, 0);\r
+        eff->dispatchFunction (eff, plugInOpcodeClose, 0, 0, 0, 0);\r
     }\r
 \r
    #if JUCE_WINDOWS\r
@@ -564,9 +560,9 @@ public:
         }\r
     }\r
 \r
-    void closeEffect (AEffect* eff)\r
+    void closeEffect (VstEffectInterface* eff)\r
     {\r
-        eff->dispatcher (eff, effClose, 0, 0, 0, 0);\r
+        eff->dispatchFunction (eff, plugInOpcodeClose, 0, 0, 0, 0);\r
     }\r
 \r
   #endif\r
@@ -615,12 +611,12 @@ public:
                 JUCE_VST_WRAPPER_INVOKE_MAIN\r
             }\r
 \r
-            if (effect != nullptr && effect->magic == kEffectMagic)\r
+            if (effect != nullptr && effect->interfaceIdentifier == juceVstInterfaceIdentifier)\r
             {\r
-                jassert (effect->resvd2 == 0);\r
-                jassert (effect->object != 0);\r
+                jassert (effect->hostSpace2 == 0);\r
+                jassert (effect->effectPointer != 0);\r
 \r
-                _fpreset(); // some dodgy plugs fuck around with this\r
+                _fpreset(); // some dodgy plugs mess around with this\r
             }\r
             else\r
             {\r
@@ -636,7 +632,7 @@ public:
         const ScopedLock sl (lock);\r
         stopTimer();\r
 \r
-        if (effect != nullptr && effect->magic == kEffectMagic)\r
+        if (effect != nullptr && effect->interfaceIdentifier == juceVstInterfaceIdentifier)\r
         {\r
            #if JUCE_MAC\r
             if (module->resFileId != 0)\r
@@ -660,10 +656,10 @@ public:
         desc.name = name;\r
 \r
         {\r
-            char buffer [512] = { 0 };\r
-            dispatch (effGetEffectName, 0, 0, buffer, 0);\r
+            char buffer[512] = { 0 };\r
+            dispatch (plugInOpcodeGetPlugInName, 0, 0, buffer, 0);\r
 \r
-            desc.descriptiveName = String::fromUTF8 (buffer).trim();\r
+            desc.descriptiveName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim();\r
 \r
             if (desc.descriptiveName.isEmpty())\r
                 desc.descriptiveName = name;\r
@@ -677,22 +673,22 @@ public:
         desc.category = getCategory();\r
 \r
         {\r
-            char buffer [kVstMaxVendorStrLen + 8] = { 0 };\r
-            dispatch (effGetVendorString, 0, 0, buffer, 0);\r
-            desc.manufacturerName = String::fromUTF8 (buffer);\r
+            char buffer[512] = { 0 };\r
+            dispatch (plugInOpcodeGetManufacturerName, 0, 0, buffer, 0);\r
+            desc.manufacturerName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim();\r
         }\r
 \r
         desc.version = getVersion();\r
         desc.numInputChannels = getTotalNumInputChannels();\r
         desc.numOutputChannels = getTotalNumOutputChannels();\r
-        desc.isInstrument = (effect != nullptr && (effect->flags & effFlagsIsSynth) != 0);\r
+        desc.isInstrument = (effect != nullptr && (effect->flags & vstEffectFlagIsSynth) != 0);\r
     }\r
 \r
     bool initialiseEffect (double initialSampleRate, int initialBlockSize)\r
     {\r
         if (effect != nullptr)\r
         {\r
-            effect->resvd2 = (VstIntPtr) (pointer_sized_int) this;\r
+            effect->hostSpace2 = (pointer_sized_int) (pointer_sized_int) this;\r
             initialise (initialSampleRate, initialBlockSize);\r
             return true;\r
         }\r
@@ -716,29 +712,29 @@ public:
         JUCE_VST_LOG ("Initialising VST: " + module->pluginName + " (" + getVersion() + ")");\r
         initialised = true;\r
 \r
-        setPlayConfigDetails (effect->numInputs, effect->numOutputs,\r
+        setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels,\r
                               initialSampleRate, initialBlockSize);\r
 \r
-        dispatch (effIdentify, 0, 0, 0, 0);\r
+        dispatch (plugInOpcodeIdentify, 0, 0, 0, 0);\r
 \r
         if (getSampleRate() > 0)\r
-            dispatch (effSetSampleRate, 0, 0, 0, (float) getSampleRate());\r
+            dispatch (plugInOpcodeSetSampleRate, 0, 0, 0, (float) getSampleRate());\r
 \r
         if (getBlockSize() > 0)\r
-            dispatch (effSetBlockSize, 0, jmax (32, getBlockSize()), 0, 0);\r
+            dispatch (plugInOpcodeSetBlockSize, 0, jmax (32, getBlockSize()), 0, 0);\r
 \r
-        dispatch (effOpen, 0, 0, 0, 0);\r
+        dispatch (plugInOpcodeOpen, 0, 0, 0, 0);\r
 \r
-        setPlayConfigDetails (effect->numInputs, effect->numOutputs,\r
+        setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels,\r
                               getSampleRate(), getBlockSize());\r
 \r
         if (getNumPrograms() > 1)\r
             setCurrentProgram (0);\r
         else\r
-            dispatch (effSetProgram, 0, 0, 0, 0);\r
+            dispatch (plugInOpcodeSetCurrentProgram, 0, 0, 0, 0);\r
 \r
-        for (int i = effect->numInputs;  --i >= 0;)  dispatch (effConnectInput,  i, 1, 0, 0);\r
-        for (int i = effect->numOutputs; --i >= 0;)  dispatch (effConnectOutput, i, 1, 0, 0);\r
+        for (int i = effect->numInputChannels;  --i >= 0;)  dispatch (plugInOpcodeConnectInput,  i, 1, 0, 0);\r
+        for (int i = effect->numOutputChannels; --i >= 0;)  dispatch (plugInOpcodeConnectOutput, i, 1, 0, 0);\r
 \r
         if (getVstCategory() != kPlugCategShell) // (workaround for Waves 5 plugins which crash during this call)\r
             updateStoredProgramNames();\r
@@ -749,15 +745,32 @@ public:
         usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul;\r
        #endif\r
 \r
-        setLatencySamples (effect->initialDelay);\r
+        setLatencySamples (effect->latency);\r
     }\r
 \r
     void* getPlatformSpecificData() override    { return effect; }\r
-    const String getName() const override       { return name; }\r
+\r
+    const String getName() const override\r
+    {\r
+        if (effect != nullptr)\r
+        {\r
+            char buffer[512] = { 0 };\r
+\r
+            if (dispatch (plugInOpcodeGetManufacturerProductName, 0, 0, buffer, 0) != 0)\r
+            {\r
+                String productName = String::createStringFromData (buffer, (int) sizeof (buffer));\r
+\r
+                if (productName.isNotEmpty())\r
+                    return productName;\r
+            }\r
+        }\r
+\r
+        return name;\r
+    }\r
 \r
     int getUID() const\r
     {\r
-        int uid = effect != nullptr ? effect->uniqueID : 0;\r
+        int uid = effect != nullptr ? effect->plugInIdentifier : 0;\r
 \r
         if (uid == 0)\r
             uid = module->file.hashCode();\r
@@ -775,7 +788,7 @@ public:
         if (sampleRate <= 0)\r
             return 0.0;\r
 \r
-        VstIntPtr samples = dispatch (effGetTailSize, 0, 0, 0, 0);\r
+        pointer_sized_int samples = dispatch (plugInOpcodeGetTailSize, 0, 0, 0, 0);\r
         return samples / sampleRate;\r
     }\r
 \r
@@ -783,21 +796,23 @@ public:
     bool producesMidi() const override   { return pluginCanDo ("sendVstMidiEvent") > 0; }\r
     bool supportsMPE() const override    { return pluginCanDo ("MPE") > 0; }\r
 \r
-    VstPlugCategory getVstCategory() const noexcept     { return (VstPlugCategory) dispatch (effGetPlugCategory, 0, 0, 0, 0); }\r
+    VstPlugInCategory getVstCategory() const noexcept     { return (VstPlugInCategory) dispatch (plugInOpcodeGetPlugInCategory, 0, 0, 0, 0); }\r
 \r
-    int pluginCanDo (const char* text) const     { return (int) dispatch (effCanDo, 0, 0, (void*) text,  0); }\r
+    int pluginCanDo (const char* text) const     { return (int) dispatch (plugInOpcodeCanPlugInDo, 0, 0, (void*) text,  0); }\r
 \r
     //==============================================================================\r
     void prepareToPlay (double rate, int samplesPerBlockExpected) override\r
     {\r
-        setPlayConfigDetails (effect->numInputs, effect->numOutputs, rate, samplesPerBlockExpected);\r
+        setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels, rate, samplesPerBlockExpected);\r
 \r
-        vstHostTime.tempo = 120.0;\r
-        vstHostTime.timeSigNumerator = 4;\r
-        vstHostTime.timeSigDenominator = 4;\r
+        vstHostTime.tempoBPM = 120.0;\r
+        vstHostTime.timeSignatureNumerator = 4;\r
+        vstHostTime.timeSignatureDenominator    = 4;\r
         vstHostTime.sampleRate = rate;\r
-        vstHostTime.samplePos = 0;\r
-        vstHostTime.flags = kVstNanosValid | kVstAutomationWriting | kVstAutomationReading;\r
+        vstHostTime.samplePosition = 0;\r
+        vstHostTime.flags = vstTimingInfoFlagNanosecondsValid\r
+                              | vstTimingInfoFlagAutomationWriteModeActive\r
+                              | vstTimingInfoFlagAutomationReadModeActive;\r
 \r
         initialise (rate, samplesPerBlockExpected);\r
 \r
@@ -812,22 +827,22 @@ public:
 \r
             incomingMidi.clear();\r
 \r
-            dispatch (effSetSampleRate, 0, 0, 0, (float) rate);\r
-            dispatch (effSetBlockSize, 0, jmax (16, samplesPerBlockExpected), 0, 0);\r
+            dispatch (plugInOpcodeSetSampleRate, 0, 0, 0, (float) rate);\r
+            dispatch (plugInOpcodeSetBlockSize, 0, jmax (16, samplesPerBlockExpected), 0, 0);\r
 \r
             if (supportsDoublePrecisionProcessing())\r
             {\r
-                VstInt32 vstPrecision = isUsingDoublePrecision() ? kVstProcessPrecision64\r
-                                                                 : kVstProcessPrecision32;\r
+                int32 vstPrecision = isUsingDoublePrecision() ? vstProcessingSampleTypeDouble\r
+                                                              : vstProcessingSampleTypeFloat;\r
 \r
                 // if you get an assertion here then your plug-in claims it supports double precision\r
                 // but returns an error when we try to change the precision\r
-                VstIntPtr err = dispatch (effSetProcessPrecision, 0, (VstIntPtr) vstPrecision, 0, 0);\r
+                pointer_sized_int err = dispatch (plugInOpcodeSetSampleFloatType, 0, (pointer_sized_int) vstPrecision, 0, 0);\r
                 jassert (err > 0);\r
                 ignoreUnused (err);\r
             }\r
 \r
-            tempBuffer.setSize (jmax (1, effect->numOutputs), samplesPerBlockExpected);\r
+            tempBuffer.setSize (jmax (1, effect->numInputChannels), samplesPerBlockExpected);\r
 \r
             if (! isPowerOn)\r
                 setPower (true);\r
@@ -840,9 +855,9 @@ public:
                 setParameter (0, old);\r
             }\r
 \r
-            dispatch (effStartProcess, 0, 0, 0, 0);\r
+            dispatch (plugInOpcodeStartProcess, 0, 0, 0, 0);\r
 \r
-            setLatencySamples (effect->initialDelay);\r
+            setLatencySamples (effect->latency);\r
         }\r
     }\r
 \r
@@ -850,7 +865,7 @@ public:
     {\r
         if (initialised)\r
         {\r
-            dispatch (effStopProcess, 0, 0, 0, 0);\r
+            dispatch (plugInOpcodeStopProcess, 0, 0, 0, 0);\r
             setPower (false);\r
         }\r
 \r
@@ -883,15 +898,15 @@ public:
 \r
     bool supportsDoublePrecisionProcessing() const override\r
     {\r
-        return ((effect->flags & effFlagsCanReplacing) != 0\r
-             && (effect->flags & effFlagsCanDoubleReplacing) != 0);\r
+        return ((effect->flags & vstEffectFlagInplaceAudio) != 0\r
+             && (effect->flags & vstEffectFlagInplaceDoubleAudio) != 0);\r
     }\r
 \r
     //==============================================================================\r
    #if JUCE_IOS\r
     bool hasEditor() const override                  { return false; }\r
    #else\r
-    bool hasEditor() const override                  { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; }\r
+    bool hasEditor() const override                  { return effect != nullptr && (effect->flags & vstEffectFlagHasEditor) != 0; }\r
    #endif\r
 \r
     AudioProcessorEditor* createEditor() override;\r
@@ -901,9 +916,9 @@ public:
     {\r
         if (isValidChannel (index, true))\r
         {\r
-            VstPinProperties pinProps;\r
-            if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0)\r
-                return String (pinProps.label, sizeof (pinProps.label));\r
+            VstPinInfo pinProps;\r
+            if (dispatch (plugInOpcodeGetInputPinProperties, index, 0, &pinProps, 0.0f) != 0)\r
+                return String (pinProps.text, sizeof (pinProps.text));\r
         }\r
 \r
         return String();\r
@@ -914,9 +929,9 @@ public:
         if (! isValidChannel (index, true))\r
             return false;\r
 \r
-        VstPinProperties pinProps;\r
-        if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0)\r
-            return (pinProps.flags & kVstPinIsStereo) != 0;\r
+        VstPinInfo pinProps;\r
+        if (dispatch (plugInOpcodeGetInputPinProperties, index, 0, &pinProps, 0.0f) != 0)\r
+            return (pinProps.flags & vstPinInfoFlagIsStereo) != 0;\r
 \r
         return true;\r
     }\r
@@ -925,9 +940,9 @@ public:
     {\r
         if (isValidChannel (index, false))\r
         {\r
-            VstPinProperties pinProps;\r
-            if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0)\r
-                return String (pinProps.label, sizeof (pinProps.label));\r
+            VstPinInfo pinProps;\r
+            if (dispatch (plugInOpcodeGetOutputPinProperties, index, 0, &pinProps, 0.0f) != 0)\r
+                return String (pinProps.text, sizeof (pinProps.text));\r
         }\r
 \r
         return String();\r
@@ -938,9 +953,9 @@ public:
         if (! isValidChannel (index, false))\r
             return false;\r
 \r
-        VstPinProperties pinProps;\r
-        if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0)\r
-            return (pinProps.flags & kVstPinIsStereo) != 0;\r
+        VstPinInfo pinProps;\r
+        if (dispatch (plugInOpcodeGetOutputPinProperties, index, 0, &pinProps, 0.0f) != 0)\r
+            return (pinProps.flags & vstPinInfoFlagIsStereo) != 0;\r
 \r
         return true;\r
     }\r
@@ -952,14 +967,14 @@ public:
     }\r
 \r
     //==============================================================================\r
-    int getNumParameters() override      { return effect != nullptr ? effect->numParams : 0; }\r
+    int getNumParameters() override      { return effect != nullptr ? effect->numParameters : 0; }\r
 \r
     float getParameter (int index) override\r
     {\r
-        if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams))\r
+        if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParameters))\r
         {\r
             const ScopedLock sl (lock);\r
-            return effect->getParameter (effect, index);\r
+            return effect->getParameterValueFunction (effect, index);\r
         }\r
 \r
         return 0.0f;\r
@@ -967,25 +982,25 @@ public:
 \r
     void setParameter (int index, float newValue) override\r
     {\r
-        if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams))\r
+        if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParameters))\r
         {\r
             const ScopedLock sl (lock);\r
 \r
-            if (effect->getParameter (effect, index) != newValue)\r
-                effect->setParameter (effect, index, newValue);\r
+            if (effect->getParameterValueFunction (effect, index) != newValue)\r
+                effect->setParameterValueFunction (effect, index, newValue);\r
         }\r
     }\r
 \r
-    const String getParameterName (int index) override       { return getTextForOpcode (index, effGetParamName); }\r
-    const String getParameterText (int index) override       { return getTextForOpcode (index, effGetParamDisplay); }\r
-    String getParameterLabel (int index) const override      { return getTextForOpcode (index, effGetParamLabel); }\r
+    const String getParameterName (int index) override       { return getTextForOpcode (index, plugInOpcodeGetParameterName); }\r
+    const String getParameterText (int index) override       { return getTextForOpcode (index, plugInOpcodeGetParameterText); }\r
+    String getParameterLabel (int index) const override      { return getTextForOpcode (index, plugInOpcodeGetParameterLabel); }\r
 \r
     bool isParameterAutomatable (int index) const override\r
     {\r
         if (effect != nullptr)\r
         {\r
-            jassert (index >= 0 && index < effect->numParams);\r
-            return dispatch (effCanBeAutomated, index, 0, 0, 0) != 0;\r
+            jassert (index >= 0 && index < effect->numParameters);\r
+            return dispatch (plugInOpcodeIsParameterAutomatable, index, 0, 0, 0) != 0;\r
         }\r
 \r
         return false;\r
@@ -995,12 +1010,12 @@ public:
     int getNumPrograms() override          { return effect != nullptr ? jmax (0, effect->numPrograms) : 0; }\r
 \r
     // NB: some plugs return negative numbers from this function.\r
-    int getCurrentProgram() override       { return (int) dispatch (effGetProgram, 0, 0, 0, 0); }\r
+    int getCurrentProgram() override       { return (int) dispatch (plugInOpcodeGetCurrentProgram, 0, 0, 0, 0); }\r
 \r
     void setCurrentProgram (int newIndex) override\r
     {\r
         if (getNumPrograms() > 0 && newIndex != getCurrentProgram())\r
-            dispatch (effSetProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), 0, 0);\r
+            dispatch (plugInOpcodeSetCurrentProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), 0, 0);\r
     }\r
 \r
     const String getProgramName (int index) override\r
@@ -1014,7 +1029,7 @@ public:
             {\r
                 char nm[264] = { 0 };\r
 \r
-                if (dispatch (effGetProgramNameIndexed, jlimit (0, getNumPrograms(), index), -1, nm, 0) != 0)\r
+                if (dispatch (plugInOpcodeGetProgramName, jlimit (0, getNumPrograms(), index), -1, nm, 0) != 0)\r
                     return String::fromUTF8 (nm).trim();\r
             }\r
         }\r
@@ -1027,7 +1042,7 @@ public:
         if (index >= 0 && index == getCurrentProgram())\r
         {\r
             if (getNumPrograms() > 0 && newName != getCurrentProgramName())\r
-                dispatch (effSetProgramName, 0, 0, (void*) newName.substring (0, 24).toRawUTF8(), 0.0f);\r
+                dispatch (plugInOpcodeSetCurrentProgramName, 0, 0, (void*) newName.substring (0, 24).toRawUTF8(), 0.0f);\r
         }\r
         else\r
         {\r
@@ -1045,7 +1060,7 @@ public:
     //==============================================================================\r
     void timerCallback() override\r
     {\r
-        if (dispatch (effIdle, 0, 0, 0, 0) == 0)\r
+        if (dispatch (plugInOpcodeIdle, 0, 0, 0, 0) == 0)\r
             stopTimer();\r
     }\r
 \r
@@ -1055,30 +1070,30 @@ public:
         updateHostDisplay();\r
     }\r
 \r
-    VstIntPtr handleCallback (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)\r
+    pointer_sized_int handleCallback (int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)\r
     {\r
         switch (opcode)\r
         {\r
-            case audioMasterAutomate:           sendParamChangeMessageToListeners (index, opt); break;\r
-            case audioMasterProcessEvents:      handleMidiFromPlugin ((const VstEvents*) ptr); break;\r
+            case hostOpcodeParameterChanged:         sendParamChangeMessageToListeners (index, opt); break;\r
+            case hostOpcodePreAudioProcessingEvents: handleMidiFromPlugin ((const VstEventBlock*) ptr); break;\r
 \r
            #if JUCE_MSVC\r
             #pragma warning (push)\r
             #pragma warning (disable: 4311)\r
            #endif\r
-            case audioMasterGetTime:            return (VstIntPtr) &vstHostTime;\r
+            case hostOpcodeGetTimingInfo: return (pointer_sized_int) &vstHostTime;\r
            #if JUCE_MSVC\r
             #pragma warning (pop)\r
            #endif\r
 \r
-            case audioMasterIdle:\r
+            case hostOpcodeIdle:\r
                 if (insideVSTCallback == 0 && MessageManager::getInstance()->isThisTheMessageThread())\r
                 {\r
                     const IdleCallRecursionPreventer icrp;\r
 \r
                    #if JUCE_MAC\r
                     if (getActiveEditor() != nullptr)\r
-                        dispatch (effEditIdle, 0, 0, 0, 0);\r
+                        dispatch (plugInOpcodeEditorIdle, 0, 0, 0, 0);\r
                    #endif\r
 \r
                     Timer::callPendingTimersSynchronously();\r
@@ -1091,7 +1106,7 @@ public:
                 }\r
                 break;\r
 \r
-            case audioMasterSizeWindow:\r
+            case hostOpcodeWindowSize:\r
                 if (AudioProcessorEditor* ed = getActiveEditor())\r
                 {\r
                    #if JUCE_LINUX\r
@@ -1102,53 +1117,54 @@ public:
 \r
                 return 1;\r
 \r
-            case audioMasterUpdateDisplay:      triggerAsyncUpdate(); break;\r
-            case audioMasterIOChanged:          setLatencySamples (effect->initialDelay); break;\r
-            case audioMasterNeedIdle:           startTimer (50); break;\r
+            case hostOpcodeUpdateView:      triggerAsyncUpdate(); break;\r
+            case hostOpcodeIOModified:          setLatencySamples (effect->latency); break;\r
+            case hostOpcodeNeedsIdle:           startTimer (50); break;\r
 \r
-            case audioMasterGetSampleRate:      return (VstIntPtr) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue);\r
-            case audioMasterGetBlockSize:       return (VstIntPtr) (getBlockSize() > 0  ? getBlockSize()  : defaultVSTBlockSizeValue);\r
-            case audioMasterWantMidi:           wantsMidiMessages = true; break;\r
-            case audioMasterGetDirectory:       return getVstDirectory();\r
+            case hostOpcodeGetSampleRate:       return (pointer_sized_int) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue);\r
+            case hostOpcodeGetBlockSize:        return (pointer_sized_int) (getBlockSize() > 0  ? getBlockSize()  : defaultVSTBlockSizeValue);\r
+            case hostOpcodePlugInWantsMidi:     wantsMidiMessages = true; break;\r
+            case hostOpcodeGetDirectory:        return getVstDirectory();\r
 \r
-            case audioMasterTempoAt:\r
+            case hostOpcodeTempoAt:\r
                 if (extraFunctions != nullptr)\r
-                    return (VstIntPtr) extraFunctions->getTempoAt ((int64) value);\r
+                    return (pointer_sized_int) extraFunctions->getTempoAt ((int64) value);\r
 \r
                 break;\r
 \r
-            case audioMasterGetAutomationState:\r
+            case hostOpcodeGetAutomationState:\r
                 if (extraFunctions != nullptr)\r
-                    return (VstIntPtr) extraFunctions->getAutomationState();\r
+                    return (pointer_sized_int) extraFunctions->getAutomationState();\r
 \r
                 break;\r
 \r
-            case audioMasterPinConnected:\r
+            case hostOpcodePinConnected:\r
                 return isValidChannel (index, value == 0) ? 0 : 1; // (yes, 0 = true)\r
 \r
-            case audioMasterGetCurrentProcessLevel:\r
+            case hostOpcodeGetCurrentAudioProcessingLevel:\r
                 return isNonRealtime() ? 4 : 0;\r
 \r
-            // none of these are handled (yet)..\r
-            case audioMasterBeginEdit:\r
-            case audioMasterEndEdit:\r
-            case audioMasterSetTime:\r
-            case audioMasterGetParameterQuantization:\r
-            case audioMasterGetInputLatency:\r
-            case audioMasterGetOutputLatency:\r
-            case audioMasterGetPreviousPlug:\r
-            case audioMasterGetNextPlug:\r
-            case audioMasterWillReplaceOrAccumulate:\r
-            case audioMasterOfflineStart:\r
-            case audioMasterOfflineRead:\r
-            case audioMasterOfflineWrite:\r
-            case audioMasterOfflineGetCurrentPass:\r
-            case audioMasterOfflineGetCurrentMetaPass:\r
-            case audioMasterVendorSpecific:\r
-            case audioMasterSetIcon:\r
-            case audioMasterGetLanguage:\r
-            case audioMasterOpenWindow:\r
-            case audioMasterCloseWindow:\r
+            // none of these are handled (yet)...\r
+            case hostOpcodeSetTime:\r
+            case hostOpcodeGetParameterInterval:\r
+            case hostOpcodeGetInputLatency:\r
+            case hostOpcodeGetOutputLatency:\r
+            case hostOpcodeGetPreviousPlugIn:\r
+            case hostOpcodeGetNextPlugIn:\r
+            case hostOpcodeWillReplace:\r
+            case hostOpcodeOfflineStart:\r
+            case hostOpcodeOfflineReadSource:\r
+            case hostOpcodeOfflineWrite:\r
+            case hostOpcodeOfflineGetCurrentPass:\r
+            case hostOpcodeOfflineGetCurrentMetaPass:\r
+            case hostOpcodeGetOutputSpeakerConfiguration:\r
+            case hostOpcodeManufacturerSpecific:\r
+            case hostOpcodeSetIcon:\r
+            case hostOpcodeGetLanguage:\r
+            case hostOpcodeOpenEditorWindow:\r
+            case hostOpcodeCloseEditorWindow:\r
+            case hostOpcodeParameterChangeGestureBegin:\r
+            case hostOpcodeParameterChangeGestureEnd:\r
                 break;\r
 \r
             default:\r
@@ -1159,11 +1175,11 @@ public:
     }\r
 \r
     // handles non plugin-specific callbacks..\r
-    static VstIntPtr handleGeneralCallback (VstInt32 opcode, VstInt32 /*index*/, VstIntPtr /*value*/, void *ptr, float /*opt*/)\r
+    static pointer_sized_int handleGeneralCallback (int32 opcode, int32 /*index*/, pointer_sized_int /*value*/, void *ptr, float /*opt*/)\r
     {\r
         switch (opcode)\r
         {\r
-            case audioMasterCanDo:\r
+            case hostOpcodeCanHostDo:\r
             {\r
                 static const char* canDos[] = { "supplyIdle",\r
                                                 "sendVstEvents",\r
@@ -1182,27 +1198,27 @@ public:
                 return 0;\r
             }\r
 \r
-            case audioMasterVersion:                        return 2400;\r
-            case audioMasterCurrentId:                      return shellUIDToCreate;\r
-            case audioMasterGetNumAutomatableParameters:    return 0;\r
-            case audioMasterGetAutomationState:             return 1;\r
-            case audioMasterGetVendorVersion:               return 0x0101;\r
+            case hostOpcodeVstVersion:                       return 2400;\r
+            case hostOpcodeCurrentId:                        return shellUIDToCreate;\r
+            case hostOpcodeGetNumberOfAutomatableParameters: return 0;\r
+            case hostOpcodeGetAutomationState:               return 1;\r
+            case hostOpcodeGetManufacturerVersion:           return 0x0101;\r
 \r
-            case audioMasterGetVendorString:\r
-            case audioMasterGetProductString:\r
+            case hostOpcodeGetManufacturerName:\r
+            case hostOpcodeGetProductName:\r
             {\r
                 String hostName ("Juce VST Host");\r
 \r
                 if (JUCEApplicationBase* app = JUCEApplicationBase::getInstance())\r
                     hostName = app->getApplicationName();\r
 \r
-                hostName.copyToUTF8 ((char*) ptr, (size_t) jmin (kVstMaxVendorStrLen, kVstMaxProductStrLen) - 1);\r
+                hostName.copyToUTF8 ((char*) ptr, (size_t) jmin (vstMaxManufacturerStringLength, vstMaxPlugInNameStringLength) - 1);\r
                 break;\r
             }\r
 \r
-            case audioMasterGetSampleRate:          return (VstIntPtr) defaultVSTSampleRateValue;\r
-            case audioMasterGetBlockSize:           return (VstIntPtr) defaultVSTBlockSizeValue;\r
-            case audioMasterSetOutputSampleRate:    return 0;\r
+            case hostOpcodeGetSampleRate:           return (pointer_sized_int) defaultVSTSampleRateValue;\r
+            case hostOpcodeGetBlockSize:            return (pointer_sized_int) defaultVSTBlockSizeValue;\r
+            case hostOpcodeSetOutputSampleRate:     return 0;\r
 \r
             default:\r
                 DBG ("*** Unhandled VST Callback: " + String ((int) opcode));\r
@@ -1213,9 +1229,9 @@ public:
     }\r
 \r
     //==============================================================================\r
-    VstIntPtr dispatch (const int opcode, const int index, const VstIntPtr value, void* const ptr, float opt) const\r
+    pointer_sized_int dispatch (const int opcode, const int index, const pointer_sized_int value, void* const ptr, float opt) const\r
     {\r
-        VstIntPtr result = 0;\r
+        pointer_sized_int result = 0;\r
 \r
         if (effect != nullptr)\r
         {\r
@@ -1231,7 +1247,7 @@ public:
                     UseResFile (module->resFileId);\r
                #endif\r
 \r
-                result = effect->dispatcher (effect, opcode, index, value, ptr, opt);\r
+                result = effect->dispatchFunction (effect, opcode, index, value, ptr, opt);\r
 \r
                #if JUCE_MAC\r
                 const ResFileRefNum newResFile = CurResFile();\r
@@ -1361,7 +1377,7 @@ public:
                 set->fxID = fxbSwap (getUID());\r
                 set->fxVersion = fxbSwap (getVersionNumber());\r
                 set->numPrograms = fxbSwap (numPrograms);\r
-                set->chunkSize = fxbSwap ((VstInt32) chunk.getSize());\r
+                set->chunkSize = fxbSwap ((int32) chunk.getSize());\r
 \r
                 chunk.copyTo (set->chunk, 0, chunk.getSize());\r
             }\r
@@ -1378,7 +1394,7 @@ public:
                 set->fxID = fxbSwap (getUID());\r
                 set->fxVersion = fxbSwap (getVersionNumber());\r
                 set->numPrograms = fxbSwap (numPrograms);\r
-                set->chunkSize = fxbSwap ((VstInt32) chunk.getSize());\r
+                set->chunkSize = fxbSwap ((int32) chunk.getSize());\r
 \r
                 getCurrentProgramName().copyToUTF8 (set->name, sizeof (set->name) - 1);\r
                 chunk.copyTo (set->chunk, 0, chunk.getSize());\r
@@ -1433,14 +1449,14 @@ public:
         return true;\r
     }\r
 \r
-    bool usesChunks() const noexcept        { return effect != nullptr && (effect->flags & effFlagsProgramChunks) != 0; }\r
+    bool usesChunks() const noexcept        { return effect != nullptr && (effect->flags & vstEffectFlagDataInChunks) != 0; }\r
 \r
     bool getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const\r
     {\r
         if (usesChunks())\r
         {\r
             void* data = nullptr;\r
-            const size_t bytes = (size_t) dispatch (effGetChunk, isPreset ? 1 : 0, 0, &data, 0.0f);\r
+            const size_t bytes = (size_t) dispatch (plugInOpcodeGetData, isPreset ? 1 : 0, 0, &data, 0.0f);\r
 \r
             if (data != nullptr && bytes <= (size_t) maxSizeMB * 1024 * 1024)\r
             {\r
@@ -1458,7 +1474,7 @@ public:
     {\r
         if (size > 0 && usesChunks())\r
         {\r
-            dispatch (effSetChunk, isPreset ? 1 : 0, size, (void*) data, 0.0f);\r
+            dispatch (plugInOpcodeSetData, isPreset ? 1 : 0, size, (void*) data, 0.0f);\r
 \r
             if (! isPreset)\r
                 updateStoredProgramNames();\r
@@ -1469,7 +1485,7 @@ public:
         return false;\r
     }\r
 \r
-    AEffect* effect;\r
+    VstEffectInterface* effect;\r
     ModuleHandle::Ptr module;\r
 \r
     ScopedPointer<VSTPluginFormat::ExtraFunctions> extraFunctions;\r
@@ -1484,7 +1500,7 @@ private:
     CriticalSection midiInLock;\r
     MidiBuffer incomingMidi;\r
     VSTMidiEventList midiEventsToSend;\r
-    VstTimeInfo vstHostTime;\r
+    VstTimingInformation vstHostTime;\r
 \r
     //==============================================================================\r
     template <typename FloatType>\r
@@ -1501,22 +1517,26 @@ private:
                 if (currentPlayHead->getCurrentPosition (position))\r
                 {\r
 \r
-                    vstHostTime.samplePos          = (double) position.timeInSamples;\r
-                    vstHostTime.tempo              = position.bpm;\r
-                    vstHostTime.timeSigNumerator   = position.timeSigNumerator;\r
-                    vstHostTime.timeSigDenominator = position.timeSigDenominator;\r
-                    vstHostTime.ppqPos             = position.ppqPosition;\r
-                    vstHostTime.barStartPos        = position.ppqPositionOfLastBarStart;\r
-                    vstHostTime.flags |= kVstTempoValid | kVstTimeSigValid | kVstPpqPosValid | kVstBarsValid;\r
-\r
-                    VstInt32 newTransportFlags = 0;\r
-                    if (position.isPlaying)     newTransportFlags |= kVstTransportPlaying;\r
-                    if (position.isRecording)   newTransportFlags |= kVstTransportRecording;\r
-\r
-                    if (newTransportFlags != (vstHostTime.flags & (kVstTransportPlaying | kVstTransportRecording)))\r
-                        vstHostTime.flags = (vstHostTime.flags & ~(kVstTransportPlaying | kVstTransportRecording)) | newTransportFlags | kVstTransportChanged;\r
+                    vstHostTime.samplePosition           = (double) position.timeInSamples;\r
+                    vstHostTime.tempoBPM                 = position.bpm;\r
+                    vstHostTime.timeSignatureNumerator   = position.timeSigNumerator;\r
+                    vstHostTime.timeSignatureDenominator = position.timeSigDenominator;\r
+                    vstHostTime.musicalPosition          = position.ppqPosition;\r
+                    vstHostTime.lastBarPosition          = position.ppqPositionOfLastBarStart;\r
+                    vstHostTime.flags |= vstTimingInfoFlagTempoValid\r
+                                           | vstTimingInfoFlagTimeSignatureValid\r
+                                           | vstTimingInfoFlagMusicalPositionValid\r
+                                           | vstTimingInfoFlagLastBarPositionValid;\r
+\r
+                    int32 newTransportFlags = 0;\r
+                    if (position.isPlaying)     newTransportFlags |= vstTimingInfoFlagCurrentlyPlaying;\r
+                    if (position.isRecording)   newTransportFlags |= vstTimingInfoFlagCurrentlyRecording;\r
+\r
+                    if (newTransportFlags != (vstHostTime.flags & (vstTimingInfoFlagCurrentlyPlaying\r
+                                                                   | vstTimingInfoFlagCurrentlyRecording)))\r
+                        vstHostTime.flags = (vstHostTime.flags & ~(vstTimingInfoFlagCurrentlyPlaying | vstTimingInfoFlagCurrentlyRecording)) | newTransportFlags | vstTimingInfoFlagTransportChanged;\r
                     else\r
-                        vstHostTime.flags &= ~kVstTransportChanged;\r
+                        vstHostTime.flags &= ~vstTimingInfoFlagTransportChanged;\r
 \r
                     switch (position.frameRate)\r
                     {\r
@@ -1531,18 +1551,18 @@ private:
 \r
                     if (position.isLooping)\r
                     {\r
-                        vstHostTime.cycleStartPos = position.ppqLoopStart;\r
-                        vstHostTime.cycleEndPos   = position.ppqLoopEnd;\r
-                        vstHostTime.flags |= (kVstCyclePosValid | kVstTransportCycleActive);\r
+                        vstHostTime.loopStartPosition = position.ppqLoopStart;\r
+                        vstHostTime.loopEndPosition   = position.ppqLoopEnd;\r
+                        vstHostTime.flags |= (vstTimingInfoFlagLoopPositionValid | vstTimingInfoFlagLoopActive);\r
                     }\r
                     else\r
                     {\r
-                        vstHostTime.flags &= ~(kVstCyclePosValid | kVstTransportCycleActive);\r
+                        vstHostTime.flags &= ~(vstTimingInfoFlagLoopPositionValid | vstTimingInfoFlagLoopActive);\r
                     }\r
                 }\r
             }\r
 \r
-            vstHostTime.nanoSeconds = getVSTHostTimeNanoseconds();\r
+            vstHostTime.systemTimeNanoseconds = getVSTHostTimeNanoseconds();\r
 \r
             if (wantsMidiMessages)\r
             {\r
@@ -1559,7 +1579,7 @@ private:
                                                jlimit (0, numSamples - 1, samplePosition));\r
                 }\r
 \r
-                effect->dispatcher (effect, effProcessEvents, 0, 0, midiEventsToSend.events, 0);\r
+                effect->dispatchFunction (effect, plugInOpcodePreAudioProcessingEvents, 0, 0, midiEventsToSend.events, 0);\r
             }\r
 \r
             _clearfp();\r
@@ -1583,35 +1603,35 @@ private:
     }\r
 \r
     //==============================================================================\r
-    inline void invokeProcessFunction (AudioBuffer<float>& buffer, VstInt32 sampleFrames)\r
+    inline void invokeProcessFunction (AudioBuffer<float>& buffer, int32 sampleFrames)\r
     {\r
-        if ((effect->flags & effFlagsCanReplacing) != 0)\r
+        if ((effect->flags & vstEffectFlagInplaceAudio) != 0)\r
         {\r
-            effect->processReplacing (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames);\r
+            effect->processAudioInplaceFunction (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames);\r
         }\r
         else\r
         {\r
-            tempBuffer.setSize (effect->numOutputs, sampleFrames);\r
+            tempBuffer.setSize (effect->numOutputChannels, sampleFrames);\r
             tempBuffer.clear();\r
 \r
-            effect->process (effect, buffer.getArrayOfWritePointers(), tempBuffer.getArrayOfWritePointers(), sampleFrames);\r
+            effect->processAudioFunction (effect, buffer.getArrayOfWritePointers(), tempBuffer.getArrayOfWritePointers(), sampleFrames);\r
 \r
-            for (int i = effect->numOutputs; --i >= 0;)\r
+            for (int i = effect->numOutputChannels; --i >= 0;)\r
                 buffer.copyFrom (i, 0, tempBuffer.getReadPointer (i), sampleFrames);\r
         }\r
     }\r
 \r
-    inline void invokeProcessFunction (AudioBuffer<double>& buffer, VstInt32 sampleFrames)\r
+    inline void invokeProcessFunction (AudioBuffer<double>& buffer, int32 sampleFrames)\r
     {\r
-        effect->processDoubleReplacing (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames);\r
+        effect->processDoubleAudioInplaceFunction (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames);\r
     }\r
 \r
     //==============================================================================\r
     void setHostTimeFrameRate (long frameRateIndex, double frameRate, double currentTime) noexcept\r
     {\r
-        vstHostTime.flags |= kVstSmpteValid;\r
-        vstHostTime.smpteFrameRate  = (VstInt32) frameRateIndex;\r
-        vstHostTime.smpteOffset     = (VstInt32) (currentTime * 80.0 * frameRate + 0.5);\r
+        vstHostTime.flags |= vstTimingInfoFlagSmpteValid;\r
+        vstHostTime.smpteRate       = (int32) frameRateIndex;\r
+        vstHostTime.smpteOffset     = (int32) (currentTime * 80.0 * frameRate + 0.5);\r
     }\r
 \r
     bool restoreProgramSettings (const fxProgram* const prog)\r
@@ -1630,13 +1650,13 @@ private:
         return false;\r
     }\r
 \r
-    String getTextForOpcode (const int index, const AEffectOpcodes opcode) const\r
+    String getTextForOpcode (const int index, const VstHostToPlugInOpcodes opcode) const\r
     {\r
         if (effect == nullptr)\r
             return String();\r
 \r
-        jassert (index >= 0 && index < effect->numParams);\r
-        char nm [256] = { 0 };\r
+        jassert (index >= 0 && index < effect->numParameters);\r
+        char nm[256] = { 0 };\r
         dispatch (opcode, index, 0, nm, 0);\r
         return String::createStringFromData (nm, (int) sizeof (nm)).trim();\r
     }\r
@@ -1649,7 +1669,7 @@ private:
         {\r
             {\r
                 char nm[256] = { 0 };\r
-                dispatch (effGetProgramName, 0, 0, nm, 0);\r
+                dispatch (plugInOpcodeGetCurrentProgramName, 0, 0, nm, 0);\r
                 progName = String::createStringFromData (nm, (int) sizeof (nm)).trim();\r
             }\r
 \r
@@ -1692,7 +1712,7 @@ private:
             char nm[256] = { 0 };\r
 \r
             // only do this if the plugin can't use indexed names..\r
-            if (dispatch (effGetProgramNameIndexed, 0, -1, nm, 0) == 0)\r
+            if (dispatch (plugInOpcodeGetProgramName, 0, -1, nm, 0) == 0)\r
             {\r
                 const int oldProgram = getCurrentProgram();\r
                 MemoryBlock oldSettings;\r
@@ -1710,7 +1730,7 @@ private:
         }\r
     }\r
 \r
-    void handleMidiFromPlugin (const VstEvents* const events)\r
+    void handleMidiFromPlugin (const VstEventBlock* const events)\r
     {\r
         if (events != nullptr)\r
         {\r
@@ -1741,21 +1761,21 @@ private:
             setParameter (i, p[i]);\r
     }\r
 \r
-    VstIntPtr getVstDirectory() const\r
+    pointer_sized_int getVstDirectory() const\r
     {\r
        #if JUCE_MAC\r
-        return (VstIntPtr) (void*) &module->parentDirFSSpec;\r
+        return (pointer_sized_int) (void*) &module->parentDirFSSpec;\r
        #else\r
-        return (VstIntPtr) (pointer_sized_uint) module->fullParentDirectoryPathName.toRawUTF8();\r
+        return (pointer_sized_int) (pointer_sized_uint) module->fullParentDirectoryPathName.toRawUTF8();\r
        #endif\r
     }\r
 \r
     //==============================================================================\r
-    int getVersionNumber() const noexcept   { return effect != nullptr ? effect->version : 0; }\r
+    int getVersionNumber() const noexcept   { return effect != nullptr ? effect->plugInVersion : 0; }\r
 \r
     String getVersion() const\r
     {\r
-        unsigned int v = (unsigned int) dispatch (effGetVendorVersion, 0, 0, 0, 0);\r
+        unsigned int v = (unsigned int) dispatch (plugInOpcodeGetManufacturerVersion, 0, 0, 0, 0);\r
 \r
         String s;\r
 \r
@@ -1816,7 +1836,7 @@ private:
 \r
     void setPower (const bool on)\r
     {\r
-        dispatch (effMainsChanged, 0, on ? 1 : 0, 0, 0);\r
+        dispatch (plugInOpcodeResumeSuspend, 0, on ? 1 : 0, 0, 0);\r
         isPowerOn = on;\r
     }\r
 \r
@@ -1857,6 +1877,8 @@ public:
         pluginProc = None;\r
 \r
        #elif JUCE_MAC\r
+        ignoreUnused (recursiveResize, pluginRefusesToResize, alreadyInside);\r
+\r
         #if JUCE_SUPPORT_CARBON\r
         if (! plug.usesCocoaNSView)\r
             addAndMakeVisible (carbonWrapper = new CarbonWrapperComponent (*this));\r
@@ -2022,7 +2044,7 @@ public:
             if (! reentrantGuard)\r
             {\r
                 reentrantGuard = true;\r
-                plugin.dispatch (effEditIdle, 0, 0, 0, 0);\r
+                plugin.dispatch (plugInOpcodeEditorIdle, 0, 0, 0, 0);\r
                 reentrantGuard = false;\r
             }\r
 \r
@@ -2066,7 +2088,7 @@ public:
         activeVSTWindows.add (this);\r
 \r
        #if JUCE_MAC\r
-        dispatch (effEditTop, 0, 0, 0, 0);\r
+        dispatch (plugInOpcodeeffEditorTop, 0, 0, 0, 0);\r
        #endif\r
     }\r
 \r
@@ -2109,24 +2131,24 @@ private:
 \r
         isOpen = true;\r
 \r
-        ERect* rect = nullptr;\r
-        dispatch (effEditGetRect, 0, 0, &rect, 0);\r
-        dispatch (effEditOpen, 0, 0, parentWindow, 0);\r
+        VstEditorBounds* rect = nullptr;\r
+        dispatch (plugInOpcodeGetEditorBounds, 0, 0, &rect, 0);\r
+        dispatch (plugInOpcodeOpenEditor, 0, 0, parentWindow, 0);\r
 \r
         // do this before and after like in the steinberg example\r
-        dispatch (effEditGetRect, 0, 0, &rect, 0);\r
-        dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code\r
+        dispatch (plugInOpcodeGetEditorBounds, 0, 0, &rect, 0);\r
+        dispatch (plugInOpcodeGetCurrentProgram, 0, 0, 0, 0); // also in steinberg code\r
 \r
         // Install keyboard hooks\r
-        pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0);\r
+        pluginWantsKeys = (dispatch (plugInOpcodeKeyboardFocusRequired, 0, 0, 0, 0) == 0);\r
 \r
         // double-check it's not too tiny\r
         int w = 250, h = 150;\r
 \r
         if (rect != nullptr)\r
         {\r
-            w = rect->right - rect->left;\r
-            h = rect->bottom - rect->top;\r
+            w = rect->rightmost - rect->leftmost;\r
+            h = rect->lower - rect->upper;\r
 \r
             if (w == 0 || h == 0)\r
             {\r
@@ -2153,16 +2175,16 @@ private:
         JUCE_VST_LOG ("Opening VST UI: " + plugin.getName());\r
         isOpen = true;\r
 \r
-        ERect* rect = nullptr;\r
-        dispatch (effEditGetRect, 0, 0, &rect, 0);\r
-        dispatch (effEditOpen, 0, 0, getWindowHandle(), 0);\r
+        VstEditorBounds* rect = nullptr;\r
+        dispatch (plugInOpcodeGetEditorBounds, 0, 0, &rect, 0);\r
+        dispatch (plugInOpcodeOpenEditor, 0, 0, getWindowHandle(), 0);\r
 \r
         // do this before and after like in the steinberg example\r
-        dispatch (effEditGetRect, 0, 0, &rect, 0);\r
-        dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code\r
+        dispatch (plugInOpcodeGetEditorBounds, 0, 0, &rect, 0);\r
+        dispatch (plugInOpcodeGetCurrentProgram, 0, 0, 0, 0); // also in steinberg code\r
 \r
         // Install keyboard hooks\r
-        pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0);\r
+        pluginWantsKeys = (dispatch (plugInOpcodeKeyboardFocusRequired, 0, 0, 0, 0) == 0);\r
 \r
        #if JUCE_WINDOWS\r
         originalWndProc = 0;\r
@@ -2193,8 +2215,8 @@ private:
 \r
         if (rect != nullptr)\r
         {\r
-            const int rw = rect->right - rect->left;\r
-            const int rh = rect->bottom - rect->top;\r
+            const int rw = rect->rightmost - rect->leftmost;\r
+            const int rh = rect->lower - rect->upper;\r
 \r
             if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && rw != w && rh != h)\r
                 || ((w == 0 && rw > 0) || (h == 0 && rh > 0)))\r
@@ -2226,8 +2248,8 @@ private:
 \r
         if (rect != nullptr)\r
         {\r
-            w = rect->right - rect->left;\r
-            h = rect->bottom - rect->top;\r
+            w = rect->rightmost - rect->leftmost;\r
+            h = rect->lower - rect->upper;\r
 \r
             if (w == 0 || h == 0)\r
             {\r
@@ -2266,7 +2288,7 @@ private:
 \r
             JUCE_VST_LOG ("Closing VST UI: " + plugin.getName());\r
             isOpen = false;\r
-            dispatch (effEditClose, 0, 0, 0, 0);\r
+            dispatch (plugInOpcodeCloseEditor, 0, 0, 0, 0);\r
             stopTimer();\r
 \r
            #if JUCE_WINDOWS\r
@@ -2286,7 +2308,7 @@ private:
     }\r
 \r
     //==============================================================================\r
-    VstIntPtr dispatch (const int opcode, const int index, const int value, void* const ptr, float opt)\r
+    pointer_sized_int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt)\r
     {\r
         return plugin.dispatch (opcode, index, value, ptr, opt);\r
     }\r
@@ -2492,17 +2514,17 @@ private:
             if (owner.isOpen)\r
             {\r
                 owner.isOpen = false;\r
-                owner.dispatch (effEditClose, 0, 0, 0, 0);\r
-                owner.dispatch (effEditSleep, 0, 0, 0, 0);\r
+                owner.dispatch (plugInOpcodeCloseEditor, 0, 0, 0, 0);\r
+                owner.dispatch (plugInOpcodeSleepEditor, 0, 0, 0, 0);\r
             }\r
         }\r
 \r
         bool getEmbeddedViewSize (int& w, int& h) override\r
         {\r
-            ERect* rect = nullptr;\r
-            owner.dispatch (effEditGetRect, 0, 0, &rect, 0);\r
-            w = rect->right - rect->left;\r
-            h = rect->bottom - rect->top;\r
+            VstEditorBounds* rect = nullptr;\r
+            owner.dispatch (plugInOpcodeGetEditorBounds, 0, 0, &rect, 0);\r
+            w = rect->rightmost - rect->leftmost;\r
+            h = rect->lower - rect->upper;\r
             return true;\r
         }\r
 \r
@@ -2512,7 +2534,7 @@ private:
             {\r
                 alreadyInside = true;\r
                 getTopLevelComponent()->toFront (true);\r
-                owner.dispatch (effEditMouse, x, y, 0, 0);\r
+                owner.dispatch (plugInOpcodeGetMouse, x, y, 0, 0);\r
                 alreadyInside = false;\r
             }\r
             else\r
@@ -2526,13 +2548,13 @@ private:
             if (ComponentPeer* const peer = getPeer())\r
             {\r
                 const Point<int> pos (peer->globalToLocal (getScreenPosition()));\r
-                ERect r;\r
-                r.left   = (VstInt16) pos.getX();\r
-                r.top    = (VstInt16) pos.getY();\r
-                r.right  = (VstInt16) (r.left + getWidth());\r
-                r.bottom = (VstInt16) (r.top + getHeight());\r
+                VstEditorBounds r;\r
+                r.leftmost  = (int16) pos.getX();\r
+                r.upper     = (int16) pos.getY();\r
+                r.rightmost = (int16) (r.leftmost + getWidth());\r
+                r.lower     = (int16) (r.upper + getHeight());\r
 \r
-                owner.dispatch (effEditDraw, 0, 0, &r, 0);\r
+                owner.dispatch (plugInOpcodeDrawEditor, 0, 0, &r, 0);\r
             }\r
         }\r
 \r
@@ -2581,10 +2603,10 @@ AudioProcessorEditor* VSTPluginInstance::createEditor()
 \r
 //==============================================================================\r
 // entry point for all callbacks from the plugin\r
-static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)\r
+static pointer_sized_int VSTINTERFACECALL audioMaster (VstEffectInterface* effect, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)\r
 {\r
     if (effect != nullptr)\r
-        if (VSTPluginInstance* instance = (VSTPluginInstance*) (effect->resvd2))\r
+        if (VSTPluginInstance* instance = (VSTPluginInstance*) (effect->hostSpace2))\r
             return instance->handleCallback (opcode, index, value, ptr, opt);\r
 \r
     return VSTPluginInstance::handleGeneralCallback (opcode, index, value, ptr, opt);\r
@@ -2635,7 +2657,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray<PluginDescription>& result
         // Normal plugin...\r
         results.add (new PluginDescription (desc));\r
 \r
-        instance->dispatch (effOpen, 0, 0, 0, 0);\r
+        instance->dispatch (plugInOpcodeOpen, 0, 0, 0, 0);\r
     }\r
     else\r
     {\r
@@ -2643,7 +2665,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray<PluginDescription>& result
         for (;;)\r
         {\r
             char shellEffectName [256] = { 0 };\r
-            const int uid = (int) instance->dispatch (effShellGetNextPlugin, 0, 0, shellEffectName, 0);\r
+            const int uid = (int) instance->dispatch (plugInOpcodeNextPlugInUniqueID, 0, 0, shellEffectName, 0);\r
 \r
             if (uid == 0)\r
                 break;\r
@@ -2869,7 +2891,7 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct
         vst->extraFunctions = f;\r
 }\r
 \r
-VSTPluginFormat::VstIntPtr JUCE_CALLTYPE VSTPluginFormat::dispatcher (AudioPluginInstance* plugin, int32 opcode, int32 index, VstIntPtr value, void* ptr, float opt)\r
+pointer_sized_int JUCE_CALLTYPE VSTPluginFormat::dispatcher (AudioPluginInstance* plugin, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)\r
 {\r
     if (VSTPluginInstance* vst = dynamic_cast<VSTPluginInstance*> (plugin))\r
         return vst->dispatch (opcode, index, value, ptr, opt);\r
index 02f4a57f57afd7a6e5706622593ea9986ff49ad4..5bfa58c682ff2e39273e38d13e42f9a9f5485607 100644 (file)
@@ -82,14 +82,8 @@ public:
     static void setExtraFunctions (AudioPluginInstance* plugin, ExtraFunctions* functions);\r
 \r
     //==============================================================================\r
-   #if JUCE_64BIT\r
-    typedef int64 VstIntPtr;\r
-   #else\r
-    typedef int32 VstIntPtr;\r
-   #endif\r
-\r
     /** This simply calls directly to the VST's AEffect::dispatcher() function. */\r
-    static VstIntPtr JUCE_CALLTYPE dispatcher (AudioPluginInstance*, int32, int32, VstIntPtr, void*, float);\r
+    static pointer_sized_int JUCE_CALLTYPE dispatcher (AudioPluginInstance*, int32, int32, pointer_sized_int, void*, float);\r
 \r
     //==============================================================================\r
     String getName() const override                { return "VST"; }\r
index 3d72d4b0feb1bd3f2f08f2247b46d0f1eac8f991..ff73be0c8dacff66ada7828fbc6325a48d2901c2 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_processors\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE audio processor classes\r
   description:      Classes for loading and playing VST, AU, or internally-generated audio processors.\r
   website:          http://www.juce.com/juce\r
@@ -57,8 +57,7 @@
 \r
 //==============================================================================\r
 /** Config: JUCE_PLUGINHOST_VST\r
-    Enables the VST audio plugin hosting classes. This requires the Steinberg VST SDK to be\r
-    installed on your machine.\r
+    Enables the VST audio plugin hosting classes.\r
 \r
     @see VSTPluginFormat, VST3PluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU, JUCE_PLUGINHOST_VST3\r
 */\r
@@ -89,7 +88,7 @@
 // #error "You need to set either the JUCE_PLUGINHOST_AU and/or JUCE_PLUGINHOST_VST and/or JUCE_PLUGINHOST_VST3 flags if you're using this module!"\r
 #endif\r
 \r
-#if ! (defined (JUCE_SUPPORT_CARBON) || JUCE_64BIT)\r
+#if ! (defined (JUCE_SUPPORT_CARBON) || JUCE_64BIT || JUCE_IOS)\r
  #define JUCE_SUPPORT_CARBON 1\r
 #endif\r
 \r
index b7eed3b59bb3e582d3fdc496a83f4833cf9572cd..cfba06221b1be619d6b003972a831d596d5100fe 100644 (file)
@@ -62,7 +62,9 @@ AudioProcessor::AudioProcessor()
    #endif\r
     ignoreUnused (maxOutChannels);\r
 \r
- #if ! JucePlugin_IsMidiEffect\r
+ #if JucePlugin_IsMidiEffect\r
+    ignoreUnused (channelConfigs);\r
+ #else\r
    #if ! JucePlugin_IsSynth\r
     const int numInChannels = jmin (maxInChannels, (int) channelConfigs[0][0]);\r
 \r
index e28de0a348cca1aa9c70f8aec1a7b7262f9472bb..e6be249be34c259cbbdc5f0535947cdd934ad231 100644 (file)
@@ -85,14 +85,22 @@ public:
     virtual int getControlParameterIndex (Component&);\r
 \r
     //==============================================================================\r
-    /** Make the editor resizable or fixed.\r
-\r
-        @param shouldBeResizable   whether it's resizable at all\r
+    /** Marks the host's editor window as resizable\r
+\r
+        @param allowHostToResize   whether the editor's parent window can be resized\r
+                                   by the user or the host. Even if this is false, you\r
+                                   can still resize your window yourself by calling\r
+                                   setBounds (for example, when a user clicks on a button\r
+                                   in your editor to drop out a panel) which will bypass any\r
+                                   resizable/constraints checks. If you are using\r
+                                   your own corner resizer than this will also bypass\r
+                                   any checks.\r
+        @param useBottomRightCornerResizer\r
         @see setResizeLimits, isResizable\r
     */\r
-    void setResizable (bool shouldBeResizable, bool useBottomRightCornerResizer);\r
+    void setResizable (bool allowHostToResize, bool useBottomRightCornerResizer);\r
 \r
-    /** Returns true if resizing is enabled.\r
+    /** Returns true if the host is allowed to resize editor's parent window\r
 \r
         @see setResizable\r
     */\r
index 75bab69aefa3d929db90116aa4740000160cd455..a493ce1d588d30c7008eddf7c40da5dca3d0554f 100644 (file)
@@ -264,7 +264,14 @@ struct ProcessBufferOp   : public AudioGraphRenderingOp<ProcessBufferOp>
 \r
         AudioBuffer<FloatType> buffer (channels, totalChans, numSamples);\r
 \r
-        callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse));\r
+        {\r
+            ScopedLock callbackLock (processor->getCallbackLock());\r
+\r
+            if (processor->isSuspended())\r
+                buffer.clear();\r
+            else\r
+                callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse));\r
+        }\r
     }\r
 \r
     void callProcess (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)\r
@@ -1035,7 +1042,7 @@ struct AudioProcessorGraph::AudioProcessorGraphBufferHelpers
 //==============================================================================\r
 AudioProcessorGraph::AudioProcessorGraph()\r
     : lastNodeId (0), audioBuffers (new AudioProcessorGraphBufferHelpers),\r
-      currentMidiInputBuffer (nullptr)\r
+      currentMidiInputBuffer (nullptr), isPrepared (false)\r
 {\r
 }\r
 \r
@@ -1102,7 +1109,9 @@ AudioProcessorGraph::Node* AudioProcessorGraph::addNode (AudioProcessor* const n
 \r
     Node* const n = new Node (nodeId, newProcessor);\r
     nodes.add (n);\r
-    triggerAsyncUpdate();\r
+\r
+    if (isPrepared)\r
+        triggerAsyncUpdate();\r
 \r
     n->setParentGraph (this);\r
     return n;\r
@@ -1117,7 +1126,9 @@ bool AudioProcessorGraph::removeNode (const uint32 nodeId)
         if (nodes.getUnchecked(i)->nodeId == nodeId)\r
         {\r
             nodes.remove (i);\r
-            triggerAsyncUpdate();\r
+\r
+            if (isPrepared)\r
+                triggerAsyncUpdate();\r
 \r
             return true;\r
         }\r
@@ -1203,14 +1214,19 @@ bool AudioProcessorGraph::addConnection (const uint32 sourceNodeId,
     GraphRenderingOps::ConnectionSorter sorter;\r
     connections.addSorted (sorter, new Connection (sourceNodeId, sourceChannelIndex,\r
                                                    destNodeId, destChannelIndex));\r
-    triggerAsyncUpdate();\r
+\r
+    if (isPrepared)\r
+        triggerAsyncUpdate();\r
+\r
     return true;\r
 }\r
 \r
 void AudioProcessorGraph::removeConnection (const int index)\r
 {\r
     connections.remove (index);\r
-    triggerAsyncUpdate();\r
+\r
+    if (isPrepared)\r
+        triggerAsyncUpdate();\r
 }\r
 \r
 bool AudioProcessorGraph::removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex,\r
@@ -1392,6 +1408,8 @@ void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSam
 \r
     clearRenderingSequence();\r
     buildRenderingSequence();\r
+\r
+    isPrepared = true;\r
 }\r
 \r
 bool AudioProcessorGraph::supportsDoublePrecisionProcessing() const\r
@@ -1401,6 +1419,8 @@ bool AudioProcessorGraph::supportsDoublePrecisionProcessing() const
 \r
 void AudioProcessorGraph::releaseResources()\r
 {\r
+    isPrepared = false;\r
+\r
     for (int i = 0; i < nodes.size(); ++i)\r
         nodes.getUnchecked(i)->unprepare();\r
 \r
index 00c09d98fed064922824f138df6a669eca16041b..b3676e0050d84dd146ff089f4ddb2538d75dbe74 100644 (file)
@@ -392,6 +392,8 @@ private:
     MidiBuffer* currentMidiInputBuffer;\r
     MidiBuffer currentMidiOutputBuffer;\r
 \r
+    bool isPrepared;\r
+\r
     void handleAsyncUpdate() override;\r
     void clearRenderingSequence();\r
     void buildRenderingSequence();\r
index 9bbfdab889c38bcf3204df4aeb6a587231699c2c..4f40981bf607851578942ee724b2d516a6e7f1fa 100644 (file)
@@ -44,12 +44,11 @@ public:
         @param formatToLookFor          this is the type of format that you want to look for\r
         @param directoriesToSearch      the path to search\r
         @param searchRecursively        true to search recursively\r
-        @param deadMansPedalFile        if this isn't File::nonexistent, then it will\r
-                                        be used as a file to store the names of any plugins\r
-                                        that crash during initialisation. If there are\r
-                                        any plugins listed in it, then these will always\r
-                                        be scanned after all other possible files have\r
-                                        been tried - in this way, even if there's a few\r
+        @param deadMansPedalFile        if this isn't File(), then it will be used as a file\r
+                                        to store the names of any plugins that crash during\r
+                                        initialisation. If there are any plugins listed in it,\r
+                                        then these will always be scanned after all other possible\r
+                                        files have been tried - in this way, even if there's a few\r
                                         dodgy plugins in your path, then a couple of rescans\r
                                         will still manage to find all the proper plugins.\r
                                         It's probably best to choose a file in the user's\r
index a321a5da3032307bca61433a829c26f666650ed4..790ee1e17bce34d5f36c6b7869fbfccf5fb5c9c8 100644 (file)
@@ -336,7 +336,7 @@ public:
              bool allowPluginsWhichRequireAsynchronousInstantiation, int threads,\r
              const String& title, const String& text)\r
         : owner (plc), formatToScan (format), propertiesToUse (properties),\r
-          pathChooserWindow (TRANS("Select folders to scan..."), String::empty, AlertWindow::NoIcon),\r
+          pathChooserWindow (TRANS("Select folders to scan..."), String(), AlertWindow::NoIcon),\r
           progressWindow (title, text, AlertWindow::NoIcon),\r
           progress (0.0), numThreads (threads), allowAsync (allowPluginsWhichRequireAsynchronousInstantiation),\r
           finished (false)\r
@@ -422,7 +422,7 @@ private:
                                                 + TRANS ("Are you sure you want to scan the folder \"XYZ\"?")\r
                                                    .replace ("XYZ", f.getFullPathName()),\r
                                               TRANS ("Scan"),\r
-                                              String::empty,\r
+                                              String(),\r
                                               nullptr,\r
                                               ModalCallbackFunction::create (warnAboutStupidPathsCallback, this));\r
                 return;\r
index a1d877a2cb71e28e7d41570ed6dc710ffdd4cb11..8fd62d1a98209b3fed4812f8257a6d05907bb2ef 100644 (file)
@@ -44,9 +44,10 @@ public:
     /** Provides access to the parameter's name. */\r
     const String name;\r
 \r
-private:\r
-    String label;\r
+    /** Provides access to the parameter's label. */\r
+    const String label;\r
 \r
+private:\r
     String getName (int) const override;\r
     String getLabel() const override;\r
 \r
index 1cbbadd92cc9e07f3856fbf6a587ad07d844e62d..b7ed1f9ab59ceb928ef499692d4b361ef5a76bf3 100644 (file)
@@ -66,6 +66,14 @@ struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParamete
                                               : AudioProcessorParameter::getText (v, length);\r
     }\r
 \r
+    int getNumSteps () const override\r
+    {\r
+        if (range.interval > 0)\r
+            return (static_cast<int> ((range.end - range.start) / range.interval) + 1);\r
+        else\r
+            return AudioProcessor::getDefaultNumParameterSteps ();\r
+    }\r
+\r
     void setValue (float newValue) override\r
     {\r
         newValue = range.snapToLegalValue (range.convertFrom0to1 (newValue));\r
@@ -358,6 +366,18 @@ struct AttachedControlBase  : public AudioProcessorValueTreeState::Listener,
         }\r
     }\r
 \r
+    void beginParameterChange()\r
+    {\r
+        if (AudioProcessorParameter* p = state.getParameter (paramID))\r
+            p->beginChangeGesture();\r
+    }\r
+\r
+    void endParameterChange()\r
+    {\r
+        if (AudioProcessorParameter* p = state.getParameter (paramID))\r
+            p->endChangeGesture();\r
+    }\r
+\r
     void handleAsyncUpdate() override\r
     {\r
         setValue (lastValue);\r
@@ -381,6 +401,7 @@ struct AudioProcessorValueTreeState::SliderAttachment::Pimpl  : private Attached
     {\r
         NormalisableRange<float> range (s.getParameterRange (paramID));\r
         slider.setRange (range.start, range.end, range.interval);\r
+        slider.setSkewFactor (range.skew, range.symmetricSkew);\r
 \r
         if (AudioProcessorParameter* param = state.getParameter (paramID))\r
             slider.setDoubleClickReturnValue (true, range.convertFrom0to1 (param->getDefaultValue()));\r
@@ -406,17 +427,8 @@ struct AudioProcessorValueTreeState::SliderAttachment::Pimpl  : private Attached
             setNewUnnormalisedValue ((float) s->getValue());\r
     }\r
 \r
-    void sliderDragStarted (Slider*) override\r
-    {\r
-        if (AudioProcessorParameter* p = state.getParameter (paramID))\r
-            p->beginChangeGesture();\r
-    }\r
-\r
-    void sliderDragEnded (Slider*) override\r
-    {\r
-        if (AudioProcessorParameter* p = state.getParameter (paramID))\r
-            p->endChangeGesture();\r
-    }\r
+    void sliderDragStarted (Slider*) override { beginParameterChange(); }\r
+    void sliderDragEnded   (Slider*) override { endParameterChange();   }\r
 \r
     Slider& slider;\r
 \r
@@ -454,7 +466,9 @@ struct AudioProcessorValueTreeState::ComboBoxAttachment::Pimpl  : private Attach
 \r
     void comboBoxChanged (ComboBox* comboBox) override\r
     {\r
+        beginParameterChange();\r
         setNewUnnormalisedValue ((float) comboBox->getSelectedId() - 1.0f);\r
+        endParameterChange();\r
     }\r
 \r
     ComboBox& combo;\r
@@ -493,7 +507,9 @@ struct AudioProcessorValueTreeState::ButtonAttachment::Pimpl  : private Attached
 \r
     void buttonClicked (Button* b) override\r
     {\r
+        beginParameterChange();\r
         setNewUnnormalisedValue (b->getToggleState() ? 1.0f : 0.0f);\r
+        endParameterChange();\r
     }\r
 \r
     Button& button;\r
index d5e53d6a92eb768a031c381140b289f9d80741c4..0f26106ebe7526503cb2e5731455f9a4c73816f1 100644 (file)
@@ -158,7 +158,7 @@ public:
     /** An object of this class maintains a connection between a ComboBox and a parameter\r
         in an AudioProcessorValueTreeState.\r
 \r
-        During the lifetime of this SliderAttachment object, it keeps the two things in\r
+        During the lifetime of this ComboBoxAttachment object, it keeps the two things in\r
         sync, making it easy to connect a combo box to a parameter. When this object is\r
         deleted, the connection is broken. Make sure that your AudioProcessorValueTreeState\r
         and ComboBox aren't deleted before this object!\r
@@ -182,7 +182,7 @@ public:
     /** An object of this class maintains a connection between a Button and a parameter\r
         in an AudioProcessorValueTreeState.\r
 \r
-        During the lifetime of this SliderAttachment object, it keeps the two things in\r
+        During the lifetime of this ButtonAttachment object, it keeps the two things in\r
         sync, making it easy to connect a button to a parameter. When this object is\r
         deleted, the connection is broken. Make sure that your AudioProcessorValueTreeState\r
         and Button aren't deleted before this object!\r
index eaf43b2c8c002356cffa2e6cf9b22373ebf5f4f2..ffae2bca93d2143f8a79f45a35164ac6fedcf113 100644 (file)
@@ -34,8 +34,8 @@
     getNextAudioBlock(). The base class provides a basic AudioDeviceManager object\r
     and runs audio through the default output device.\r
 */\r
-class AudioAppComponent   : public Component,\r
-                            public AudioSource\r
+class JUCE_API AudioAppComponent   : public Component,\r
+                                     public AudioSource\r
 {\r
 public:\r
     AudioAppComponent();\r
index 3cd89420034c4be444ea65f415c132775bf76c35..3c2615cd7d0e094b656af20479e1228382580323 100644 (file)
@@ -76,7 +76,7 @@ class AudioDeviceSelectorComponent::MidiInputSelectorComponentListBox  : public
 {\r
 public:\r
     MidiInputSelectorComponentListBox (AudioDeviceManager& dm, const String& noItems)\r
-        : ListBox (String::empty, nullptr),\r
+        : ListBox (String(), nullptr),\r
           deviceManager (dm),\r
           noItemsMessage (noItems)\r
     {\r
@@ -340,11 +340,11 @@ public:
               || comboBoxThatHasChanged == inputDeviceDropDown)\r
         {\r
             if (outputDeviceDropDown != nullptr)\r
-                config.outputDeviceName = outputDeviceDropDown->getSelectedId() < 0 ? String::empty\r
+                config.outputDeviceName = outputDeviceDropDown->getSelectedId() < 0 ? String()\r
                                                                                     : outputDeviceDropDown->getText();\r
 \r
             if (inputDeviceDropDown != nullptr)\r
-                config.inputDeviceName = inputDeviceDropDown->getSelectedId() < 0 ? String::empty\r
+                config.inputDeviceName = inputDeviceDropDown->getSelectedId() < 0 ? String()\r
                                                                                   : inputDeviceDropDown->getText();\r
 \r
             if (! type.hasSeparateInputsAndOutputs())\r
@@ -390,7 +390,7 @@ public:
     {\r
         if (AudioIODevice* const device = setup.manager->getCurrentAudioDevice())\r
         {\r
-            Component modalWindow (String::empty);\r
+            Component modalWindow;\r
             modalWindow.setOpaque (true);\r
             modalWindow.addToDesktop (0);\r
             modalWindow.enterModalState();\r
@@ -445,7 +445,7 @@ public:
                     addAndMakeVisible (outputChanList\r
                         = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioOutputType,\r
                                                       TRANS ("(no audio output channels found)")));\r
-                    outputChanLabel = new Label (String::empty, TRANS("Active output channels:"));\r
+                    outputChanLabel = new Label (String(), TRANS("Active output channels:"));\r
                     outputChanLabel->setJustificationType (Justification::centredRight);\r
                     outputChanLabel->attachToComponent (outputChanList, true);\r
                 }\r
@@ -466,7 +466,7 @@ public:
                     addAndMakeVisible (inputChanList\r
                         = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioInputType,\r
                                                       TRANS("(no audio input channels found)")));\r
-                    inputChanLabel = new Label (String::empty, TRANS("Active input channels:"));\r
+                    inputChanLabel = new Label (String(), TRANS("Active input channels:"));\r
                     inputChanLabel->setJustificationType (Justification::centredRight);\r
                     inputChanLabel->attachToComponent (inputChanList, true);\r
                 }\r
@@ -605,11 +605,11 @@ private:
         {\r
             if (outputDeviceDropDown == nullptr)\r
             {\r
-                outputDeviceDropDown = new ComboBox (String::empty);\r
+                outputDeviceDropDown = new ComboBox (String());\r
                 outputDeviceDropDown->addListener (this);\r
                 addAndMakeVisible (outputDeviceDropDown);\r
 \r
-                outputDeviceLabel = new Label (String::empty,\r
+                outputDeviceLabel = new Label (String(),\r
                                                type.hasSeparateInputsAndOutputs() ? TRANS("Output:")\r
                                                                                   : TRANS("Device:"));\r
                 outputDeviceLabel->attachToComponent (outputDeviceDropDown, true);\r
@@ -634,11 +634,11 @@ private:
         {\r
             if (inputDeviceDropDown == nullptr)\r
             {\r
-                inputDeviceDropDown = new ComboBox (String::empty);\r
+                inputDeviceDropDown = new ComboBox (String());\r
                 inputDeviceDropDown->addListener (this);\r
                 addAndMakeVisible (inputDeviceDropDown);\r
 \r
-                inputDeviceLabel = new Label (String::empty, TRANS("Input:"));\r
+                inputDeviceLabel = new Label (String(), TRANS("Input:"));\r
                 inputDeviceLabel->attachToComponent (inputDeviceDropDown, true);\r
 \r
                 addAndMakeVisible (inputLevelMeter\r
@@ -655,9 +655,9 @@ private:
     {\r
         if (sampleRateDropDown == nullptr)\r
         {\r
-            addAndMakeVisible (sampleRateDropDown = new ComboBox (String::empty));\r
+            addAndMakeVisible (sampleRateDropDown = new ComboBox (String()));\r
 \r
-            sampleRateLabel = new Label (String::empty, TRANS("Sample rate:"));\r
+            sampleRateLabel = new Label (String(), TRANS("Sample rate:"));\r
             sampleRateLabel->attachToComponent (sampleRateDropDown, true);\r
         }\r
         else\r
@@ -682,9 +682,9 @@ private:
     {\r
         if (bufferSizeDropDown == nullptr)\r
         {\r
-            addAndMakeVisible (bufferSizeDropDown = new ComboBox (String::empty));\r
+            addAndMakeVisible (bufferSizeDropDown = new ComboBox (String()));\r
 \r
-            bufferSizeLabel = new Label (String::empty, TRANS("Audio buffer size:"));\r
+            bufferSizeLabel = new Label (String(), TRANS("Audio buffer size:"));\r
             bufferSizeLabel->attachToComponent (bufferSizeDropDown, true);\r
         }\r
         else\r
@@ -724,7 +724,7 @@ public:
         //==============================================================================\r
         ChannelSelectorListBox (const AudioDeviceSetupDetails& setupDetails,\r
                                 const BoxType boxType, const String& noItemsText)\r
-            : ListBox (String::empty, nullptr),\r
+            : ListBox (String(), nullptr),\r
               setup (setupDetails), type (boxType), noItemsMessage (noItemsText)\r
         {\r
             refresh();\r
@@ -993,7 +993,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager&
 \r
     if (types.size() > 1)\r
     {\r
-        deviceTypeDropDown = new ComboBox (String::empty);\r
+        deviceTypeDropDown = new ComboBox (String());\r
 \r
         for (int i = 0; i < types.size(); ++i)\r
             deviceTypeDropDown->addItem (types.getUnchecked(i)->getTypeName(), i + 1);\r
@@ -1001,7 +1001,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager&
         addAndMakeVisible (deviceTypeDropDown);\r
         deviceTypeDropDown->addListener (this);\r
 \r
-        deviceTypeDropDownLabel = new Label (String::empty, TRANS("Audio device type:"));\r
+        deviceTypeDropDownLabel = new Label (String(), TRANS("Audio device type:"));\r
         deviceTypeDropDownLabel->setJustificationType (Justification::centredRight);\r
         deviceTypeDropDownLabel->attachToComponent (deviceTypeDropDown, true);\r
     }\r
@@ -1012,7 +1012,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager&
                             = new MidiInputSelectorComponentListBox (deviceManager,\r
                                                                      "(" + TRANS("No MIDI inputs available") + ")"));\r
 \r
-        midiInputsLabel = new Label (String::empty, TRANS ("Active MIDI inputs:"));\r
+        midiInputsLabel = new Label (String(), TRANS ("Active MIDI inputs:"));\r
         midiInputsLabel->setJustificationType (Justification::topRight);\r
         midiInputsLabel->attachToComponent (midiInputsList, true);\r
 \r
@@ -1032,7 +1032,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager&
 \r
     if (showMidiOutputSelector)\r
     {\r
-        addAndMakeVisible (midiOutputSelector = new ComboBox (String::empty));\r
+        addAndMakeVisible (midiOutputSelector = new ComboBox (String()));\r
         midiOutputSelector->addListener (this);\r
 \r
         midiOutputLabel = new Label ("lm", TRANS("MIDI Output:"));\r
index 00039eb970fc6b335bb795aaa6530d35025f72e6..61744f0a838a02d0061eb56542d89997459c7219 100644 (file)
@@ -40,8 +40,8 @@
     real-world app that requires more powerful waveform display, you'll probably want to\r
     create your own component instead.\r
 */\r
-class AudioVisualiserComponent  : public Component,\r
-                                  private Timer\r
+class JUCE_API AudioVisualiserComponent  : public Component,\r
+                                           private Timer\r
 {\r
 public:\r
     /** Creates a visualiser with the given number of channels. */\r
index 1f7e7614a8474f9e613e9163c6b4a30aa53e3b24..d6a3e946ad0596dc62fc8668079d72342cf3dd92 100644 (file)
@@ -42,7 +42,7 @@
     supported.\r
 */\r
 \r
-class BluetoothMidiDevicePairingDialogue\r
+class JUCE_API BluetoothMidiDevicePairingDialogue\r
 {\r
 public:\r
 \r
index 1c1c9d9db2222cd224fcbfb1af8535ffdd48477f..23016d075f73f54270de4b0d3ce87dace597f29d 100644 (file)
@@ -26,7 +26,7 @@ class MidiKeyboardUpDownButton  : public Button
 {\r
 public:\r
     MidiKeyboardUpDownButton (MidiKeyboardComponent& comp, const int d)\r
-        : Button (String::empty), owner (comp), delta (d)\r
+        : Button (String()), owner (comp), delta (d)\r
     {\r
     }\r
 \r
index 2de78b5eb250a115c64177e77ba3bd9a23e55b05..9da124e20327bdd34a804e761d5e30246b0c592c 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_utils\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE extra audio utility classes\r
   description:      Classes for audio-related GUI and miscellaneous tasks.\r
   website:          http://www.juce.com/juce\r
index bf5f9da8b3764254066beef22a52484d50835319..dc3e53af139445e77b1f41b4f73e902ba9d9f8c2 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_box2d\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE wrapper for the Box2D physics engine\r
   description:      The Box2D physics engine and some utility classes.\r
   website:          http://www.juce.com/juce\r
index 7b536e26b1ae1d3d210937f31dc451488969ab95..b5881b86b23b40ffdea5fcf135e40a44b5c662a6 100644 (file)
@@ -519,7 +519,7 @@ public:
             {\r
                 insertPos += indexToInsertAt;\r
                 const int numberToMove = numUsed - indexToInsertAt;\r
-                memmove (insertPos + numberOfElements, insertPos, numberToMove * sizeof (ElementType));\r
+                memmove (insertPos + numberOfElements, insertPos, (size_t) numberToMove * sizeof (ElementType));\r
             }\r
             else\r
             {\r
@@ -791,6 +791,26 @@ public:
     }\r
 \r
     //==============================================================================\r
+    /** Removes an element from the array.\r
+\r
+        This will remove the element at a given index, and move back\r
+        all the subsequent elements to close the gap.\r
+        If the index passed in is out-of-range, nothing will happen.\r
+\r
+        @param indexToRemove    the index of the element to remove\r
+        @see removeAndReturn, removeFirstMatchingValue, removeAllInstancesOf, removeRange\r
+    */\r
+    void remove (int indexToRemove)\r
+    {\r
+        const ScopedLockType lock (getLock());\r
+\r
+        if (isPositiveAndBelow (indexToRemove, numUsed))\r
+        {\r
+            jassert (data.elements != nullptr);\r
+            removeInternal (indexToRemove);\r
+        }\r
+    }\r
+\r
     /** Removes an element from the array.\r
 \r
         This will remove the element at a given index, and move back\r
@@ -801,7 +821,7 @@ public:
         @returns                the element that has been removed\r
         @see removeFirstMatchingValue, removeAllInstancesOf, removeRange\r
     */\r
-    ElementType remove (const int indexToRemove)\r
+    ElementType removeAndReturn (const int indexToRemove)\r
     {\r
         const ScopedLockType lock (getLock());\r
 \r
@@ -824,7 +844,7 @@ public:
         array, behaviour is undefined.\r
 \r
         @param elementToRemove  a pointer to the element to remove\r
-        @see removeFirstMatchingValue, removeAllInstancesOf, removeRange\r
+        @see removeFirstMatchingValue, removeAllInstancesOf, removeRange, removeIf\r
     */\r
     void remove (const ElementType* elementToRemove)\r
     {\r
@@ -844,7 +864,7 @@ public:
         If the item isn't found, no action is taken.\r
 \r
         @param valueToRemove   the object to try to remove\r
-        @see remove, removeRange\r
+        @see remove, removeRange, removeIf\r
     */\r
     void removeFirstMatchingValue (ParameterType valueToRemove)\r
     {\r
@@ -861,21 +881,59 @@ public:
         }\r
     }\r
 \r
-    /** Removes an item from the array.\r
+    /** Removes items from the array.\r
 \r
         This will remove all occurrences of the given element from the array.\r
         If no such items are found, no action is taken.\r
 \r
         @param valueToRemove   the object to try to remove\r
-        @see remove, removeRange\r
+        @return how many objects were removed.\r
+        @see remove, removeRange, removeIf\r
     */\r
-    void removeAllInstancesOf (ParameterType valueToRemove)\r
+    int removeAllInstancesOf (ParameterType valueToRemove)\r
     {\r
+        int numRemoved = 0;\r
         const ScopedLockType lock (getLock());\r
 \r
         for (int i = numUsed; --i >= 0;)\r
+        {\r
             if (valueToRemove == data.elements[i])\r
+            {\r
                 removeInternal (i);\r
+                ++numRemoved;\r
+            }\r
+        }\r
+\r
+        return numRemoved;\r
+    }\r
+\r
+    /** Removes items from the array.\r
+\r
+        This will remove all objects from the array that match a condition.\r
+        If no such items are found, no action is taken.\r
+\r
+        @param predicate   the condition when to remove an item. Must be a callable\r
+                           type that takes an ElementType and returns a bool\r
+\r
+        @return how many objects were removed.\r
+        @see remove, removeRange, removeAllInstancesOf\r
+    */\r
+    template <typename PredicateType>\r
+    int removeIf (PredicateType predicate)\r
+    {\r
+        int numRemoved = 0;\r
+        const ScopedLockType lock (getLock());\r
+\r
+        for (int i = numUsed; --i >= 0;)\r
+        {\r
+            if (predicate (data.elements[i]) == true)\r
+            {\r
+                removeInternal (i);\r
+                ++numRemoved;\r
+            }\r
+        }\r
+\r
+        return numRemoved;\r
     }\r
 \r
     /** Removes a range of elements from the array.\r
@@ -888,7 +946,7 @@ public:
 \r
         @param startIndex       the index of the first element to remove\r
         @param numberToRemove   how many elements should be removed\r
-        @see remove, removeFirstMatchingValue, removeAllInstancesOf\r
+        @see remove, removeFirstMatchingValue, removeAllInstancesOf, removeIf\r
     */\r
     void removeRange (int startIndex, int numberToRemove)\r
     {\r
index edc08771b75c0258def97c3fc76f2032ed80ccae..405ddc87706b6c8eb3ac4873aeb3bbabc050c9cb 100644 (file)
@@ -292,10 +292,9 @@ public:
     /** A dummy bail-out checker that always returns false.\r
         See the ListenerList notes for more info about bail-out checkers.\r
     */\r
-    class DummyBailOutChecker\r
+    struct DummyBailOutChecker\r
     {\r
-    public:\r
-        inline bool shouldBailOut() const noexcept     { return false; }\r
+        bool shouldBailOut() const noexcept                 { return false; }\r
     };\r
 \r
     //==============================================================================\r
index 1c3efa4a2cf57cb34f7d5c03800cdcaa95d4d61a..68afddde8d91bdc67bc7d31c04b5ebfce960251c 100644 (file)
   ==============================================================================\r
 */\r
 \r
-struct NamedValueSet::NamedValue\r
-{\r
-    NamedValue() noexcept {}\r
-    NamedValue (const Identifier& n, const var& v)  : name (n), value (v) {}\r
-    NamedValue (const NamedValue& other) : name (other.name), value (other.value) {}\r
-\r
-   #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS\r
-    NamedValue (NamedValue&& other) noexcept\r
-        : name (static_cast<Identifier&&> (other.name)),\r
-          value (static_cast<var&&> (other.value))\r
-    {\r
-    }\r
-\r
-    NamedValue (Identifier&& n, var&& v) noexcept\r
-        : name (static_cast<Identifier&&> (n)),\r
-          value (static_cast<var&&> (v))\r
-    {\r
-    }\r
-\r
-    NamedValue& operator= (NamedValue&& other) noexcept\r
-    {\r
-        name = static_cast<Identifier&&> (other.name);\r
-        value = static_cast<var&&> (other.value);\r
-        return *this;\r
-    }\r
-   #endif\r
-\r
-    bool operator== (const NamedValue& other) const noexcept   { return name == other.name && value == other.value; }\r
-    bool operator!= (const NamedValue& other) const noexcept   { return ! operator== (other); }\r
-\r
-    Identifier name;\r
-    var value;\r
-};\r
-\r
 //==============================================================================\r
 NamedValueSet::NamedValueSet() noexcept\r
 {\r
@@ -119,12 +85,22 @@ bool NamedValueSet::isEmpty() const noexcept
     return values.isEmpty();\r
 }\r
 \r
+static const var& getNullVarRef() noexcept\r
+{\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    return var::null;\r
+   #else\r
+    static var nullVar;\r
+    return nullVar;\r
+   #endif\r
+}\r
+\r
 const var& NamedValueSet::operator[] (const Identifier& name) const noexcept\r
 {\r
     if (const var* v = getVarPointer (name))\r
         return *v;\r
 \r
-    return var::null;\r
+    return getNullVarRef();\r
 }\r
 \r
 var NamedValueSet::getWithDefault (const Identifier& name, const var& defaultReturnValue) const\r
@@ -223,7 +199,7 @@ const var& NamedValueSet::getValueAt (const int index) const noexcept
         return values.getReference (index).value;\r
 \r
     jassertfalse;\r
-    return var::null;\r
+    return getNullVarRef();\r
 }\r
 \r
 var* NamedValueSet::getVarPointerAt (int index) const noexcept\r
index 80f99ed12ab342e547caed8e7609c0b307e0a346..a62ffc23b240cfc9c1ee418495f4d0651009282a 100644 (file)
@@ -60,6 +60,45 @@ public:
     bool operator!= (const NamedValueSet&) const;\r
 \r
     //==============================================================================\r
+    struct NamedValue\r
+    {\r
+        NamedValue() noexcept {}\r
+        NamedValue (const Identifier& n, const var& v)  : name (n), value (v) {}\r
+        NamedValue (const NamedValue& other) : name (other.name), value (other.value) {}\r
+\r
+    #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS\r
+        NamedValue (NamedValue&& other) noexcept\r
+        : name (static_cast<Identifier&&> (other.name)),\r
+          value (static_cast<var&&> (other.value))\r
+        {\r
+        }\r
+\r
+        NamedValue (Identifier&& n, var&& v) noexcept\r
+        : name (static_cast<Identifier&&> (n)),\r
+          value (static_cast<var&&> (v))\r
+        {\r
+        }\r
+\r
+        NamedValue& operator= (NamedValue&& other) noexcept\r
+        {\r
+            name = static_cast<Identifier&&> (other.name);\r
+            value = static_cast<var&&> (other.value);\r
+            return *this;\r
+        }\r
+     #endif\r
+\r
+        bool operator== (const NamedValue& other) const noexcept   { return name == other.name && value == other.value; }\r
+        bool operator!= (const NamedValue& other) const noexcept   { return ! operator== (other); }\r
+\r
+        Identifier name;\r
+        var value;\r
+    };\r
+\r
+    NamedValueSet::NamedValue* begin() { return values.begin(); }\r
+    NamedValueSet::NamedValue* end()   { return values.end();   }\r
+\r
+    //==============================================================================\r
+\r
     /** Returns the total number of values that the set contains. */\r
     int size() const noexcept;\r
 \r
@@ -140,7 +179,6 @@ public:
 \r
 private:\r
     //==============================================================================\r
-    struct NamedValue;\r
     Array<NamedValue> values;\r
 };\r
 \r
index 88284e6d6a95ef15c4a8ff13d20d610318d280e2..310810f7e6ef3103506e73d469950ec1e2ad0bbc 100644 (file)
@@ -131,8 +131,8 @@ public:
     /** Sets a named property to an XML element.\r
 \r
         @param keyName      the name of the property to set. (This mustn't be an empty string)\r
-        @param xml          the new element to set it to. If this is zero, the value will be set to\r
-                            an empty string\r
+        @param xml          the new element to set it to. If this is a nullptr, the value will\r
+                            be set to an empty string\r
         @see getXmlValue\r
     */\r
     void setValue (const String& keyName, const XmlElement* xml);\r
index 01c65edf1894e356d6edb3802a1c72a5b9bfa344..52a8e81afd3a1382d2649e4a2dc3ad9850835f86 100644 (file)
@@ -434,7 +434,9 @@ var::var() noexcept : type (&VariantType_Void::instance) {}
 var::var (const VariantType& t) noexcept  : type (&t) {}\r
 var::~var() noexcept  { type->cleanUp (value); }\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const var var::null;\r
+#endif\r
 \r
 //==============================================================================\r
 var::var (const var& valueToCopy)  : type (valueToCopy.type)\r
@@ -582,7 +584,7 @@ const var& var::operator[] (const Identifier& propertyName) const
     if (DynamicObject* const o = getDynamicObject())\r
         return o->getProperty (propertyName);\r
 \r
-    return var::null;\r
+    return getNullVarRef();\r
 }\r
 \r
 const var& var::operator[] (const char* const propertyName) const\r
index 4b57c6a3552746e586cdbf38740f4b706bbb99b1..f5c77cb6447d1de22f7d95eaa7fa3a37936f5e7e 100644 (file)
@@ -70,8 +70,10 @@ public:
     /** Destructor. */\r
     ~var() noexcept;\r
 \r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
     /** A static var object that can be used where you need an empty variant object. */\r
     static const var null;\r
+   #endif\r
 \r
     var (const var& valueToCopy);\r
     var (int value) noexcept;\r
index bebdeed5085b8899b1492cc5755daac746781ab8..e2a23beb958e37b09172c453e706dbb63f6c70fc 100644 (file)
@@ -68,7 +68,9 @@ File& File::operator= (File&& other) noexcept
 }\r
 #endif\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const File File::nonexistent;\r
+#endif\r
 \r
 //==============================================================================\r
 static String removeEllipsis (const String& path)\r
@@ -300,6 +302,21 @@ bool File::copyFileTo (const File& newFile) const
             || (exists() && newFile.deleteFile() && copyInternal (newFile));\r
 }\r
 \r
+bool File::replaceFileIn (const File& newFile) const\r
+{\r
+    if (newFile.fullPath == fullPath)\r
+        return true;\r
+\r
+    if (! newFile.exists())\r
+        return moveFileTo (newFile);\r
+\r
+    if (! replaceInternal (newFile))\r
+        return false;\r
+\r
+    deleteFile();\r
+    return true;\r
+}\r
+\r
 bool File::copyDirectoryTo (const File& newDirectory) const\r
 {\r
     if (isDirectory() && newDirectory.createDirectory())\r
@@ -966,16 +983,16 @@ bool File::createSymbolicLink (const File& linkFileToCreate, bool overwriteExist
 }\r
 \r
 //==============================================================================\r
-MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)\r
+MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode, bool exclusive)\r
     : address (nullptr), range (0, file.getSize()), fileHandle (0)\r
 {\r
-    openInternal (file, mode);\r
+    openInternal (file, mode, exclusive);\r
 }\r
 \r
-MemoryMappedFile::MemoryMappedFile (const File& file, const Range<int64>& fileRange, AccessMode mode)\r
+MemoryMappedFile::MemoryMappedFile (const File& file, const Range<int64>& fileRange, AccessMode mode, bool exclusive)\r
     : address (nullptr), range (fileRange.getIntersectionWith (Range<int64> (0, file.getSize()))), fileHandle (0)\r
 {\r
-    openInternal (file, mode);\r
+    openInternal (file, mode, exclusive);\r
 }\r
 \r
 \r
@@ -994,9 +1011,9 @@ public:
         const File home (File::getSpecialLocation (File::userHomeDirectory));\r
         const File temp (File::getSpecialLocation (File::tempDirectory));\r
 \r
-        expect (! File::nonexistent.exists());\r
-        expect (! File::nonexistent.existsAsFile());\r
-        expect (! File::nonexistent.isDirectory());\r
+        expect (! File().exists());\r
+        expect (! File().existsAsFile());\r
+        expect (! File().isDirectory());\r
        #if ! JUCE_WINDOWS\r
         expect (File("/").isDirectory());\r
        #endif\r
index 9848c13dad44b032c0752b8211e5620ba4a7fa5f..dbe01c5a97b0754621ee4945a32be7cd326b1148 100644 (file)
@@ -49,8 +49,7 @@ public:
     /** Creates an (invalid) file object.\r
 \r
         The file is initially set to an empty path, so getFullPathName() will return\r
-        an empty string, and comparing the file to File::nonexistent will return\r
-        true.\r
+        an empty string.\r
 \r
         You can use its operator= method to point it at a proper file.\r
     */\r
@@ -95,8 +94,13 @@ public:
    #endif\r
 \r
     //==============================================================================\r
-    /** This static constant is used for referring to an 'invalid' file. */\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    /** This static constant is used for referring to an 'invalid' file.\r
+        Bear in mind that you should avoid this kind of static variable, and always prefer\r
+        to use File() or {} if you need a default-constructed File object.\r
+    */\r
     static const File nonexistent;\r
+   #endif\r
 \r
     //==============================================================================\r
     /** Checks whether the file actually exists.\r
@@ -503,6 +507,18 @@ public:
     */\r
     bool copyFileTo (const File& targetLocation) const;\r
 \r
+    /** Replaces a file.\r
+\r
+        Replace the file in the given location, assuming the replaced files identity.\r
+        Depending on the file system this will preserve file attributes such as\r
+        creation date, short file name, etc.\r
+\r
+        If replacement succeeds the original file is deleted.\r
+\r
+        @returns    true if the operation succeeds\r
+    */\r
+    bool replaceFileIn (const File& targetLocation) const;\r
+\r
     /** Copies a directory.\r
 \r
         Tries to copy an entire directory, recursively.\r
@@ -982,6 +998,7 @@ private:
     Result createDirectoryInternal (const String&) const;\r
     bool copyInternal (const File&) const;\r
     bool moveInternal (const File&) const;\r
+    bool replaceInternal (const File&) const;\r
     bool setFileTimesInternal (int64 m, int64 a, int64 c) const;\r
     void getFileTimesInternal (int64& m, int64& a, int64& c) const;\r
     bool setFileReadOnlyInternal (bool) const;\r
index 48e0eb6a088916fc0dd6c7522ec0852bb5698458..fdfae689341f665e586a339bda5c3d965f7282b1 100644 (file)
@@ -56,8 +56,13 @@ public:
         will lazily pull the data into memory when blocks are accessed.\r
 \r
         If the file can't be opened for some reason, the getData() method will return a null pointer.\r
+\r
+        If exclusive is false then other apps can also open the same memory mapped file and use this\r
+        mapping as an effective way of communicating. If exclusive is true then the mapped file will\r
+        be opened exclusively - preventing other apps to access the file which may improve the\r
+        performance of accessing the file.\r
     */\r
-    MemoryMappedFile (const File& file, AccessMode mode);\r
+    MemoryMappedFile (const File& file, AccessMode mode, bool exclusive = false);\r
 \r
     /** Opens a section of a file and maps it to an area of virtual memory.\r
 \r
@@ -77,7 +82,8 @@ public:
     */\r
     MemoryMappedFile (const File& file,\r
                       const Range<int64>& fileRange,\r
-                      AccessMode mode);\r
+                      AccessMode mode,\r
+                      bool exclusive = false);\r
 \r
     /** Destructor. */\r
     ~MemoryMappedFile();\r
@@ -106,7 +112,7 @@ private:
     int fileHandle;\r
    #endif\r
 \r
-    void openInternal (const File&, AccessMode);\r
+    void openInternal (const File&, AccessMode, bool);\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryMappedFile)\r
 };\r
index acb1af0c9a7f6b05f2c6d0f8f87ce131c049a992..337f7f3b2e3d194127588935d2055a963e7e4415 100644 (file)
@@ -86,7 +86,7 @@ bool TemporaryFile::overwriteTargetFileWithTemporary() const
         // Have a few attempts at overwriting the file before giving up..\r
         for (int i = 5; --i >= 0;)\r
         {\r
-            if (temporaryFile.moveFileTo (targetFile))\r
+            if (temporaryFile.replaceFileIn (targetFile))\r
                 return true;\r
 \r
             Thread::sleep (100);\r
index 455412c417fc9ada228d0dad809506012b5fd725..4a4e13445739a3540ccbc8a020ca978d3f274a43 100644 (file)
@@ -625,7 +625,7 @@ public:
         beginTest ("JSON");\r
         Random r = getRandom();\r
 \r
-        expect (JSON::parse (String::empty) == var());\r
+        expect (JSON::parse (String()) == var());\r
         expect (JSON::parse ("{}").isObject());\r
         expect (JSON::parse ("[]").isArray());\r
         expect (JSON::parse ("[ 1234 ]")[0].isInt());\r
index 2fa845fa8e1c901cef75199ad52d968a71d3d507..13d572c30db192a373badf8ed13c223b4248b3ad 100644 (file)
@@ -412,9 +412,16 @@ struct JavascriptEngine::RootObject   : public DynamicObject
         var getResult (const Scope& s) const override\r
         {\r
             var arrayVar (object->getResult (s)); // must stay alive for the scope of this method\r
+            var key = index->getResult (s);\r
 \r
             if (const Array<var>* array = arrayVar.getArray())\r
-                return (*array) [static_cast<int> (index->getResult (s))];\r
+                if (key.isInt() || key.isInt64() || key.isDouble())\r
+                    return (*array) [static_cast<int> (key)];\r
+\r
+            if (DynamicObject* o = arrayVar.getDynamicObject())\r
+                if (key.isString())\r
+                    if (const var* v = getPropertyPointer (o, Identifier (key)))\r
+                        return *v;\r
 \r
             return var::undefined();\r
         }\r
@@ -422,15 +429,28 @@ struct JavascriptEngine::RootObject   : public DynamicObject
         void assign (const Scope& s, const var& newValue) const override\r
         {\r
             var arrayVar (object->getResult (s)); // must stay alive for the scope of this method\r
+            var key = index->getResult (s);\r
 \r
             if (Array<var>* array = arrayVar.getArray())\r
             {\r
-                const int i = index->getResult (s);\r
-                while (array->size() < i)\r
-                    array->add (var::undefined());\r
+                if (key.isInt() || key.isInt64() || key.isDouble())\r
+                {\r
+                    const int i = key;\r
+                    while (array->size() < i)\r
+                        array->add (var::undefined());\r
+\r
+                    array->set (i, newValue);\r
+                    return;\r
+                }\r
+            }\r
 \r
-                array->set (i, newValue);\r
-                return;\r
+            if (DynamicObject* o = arrayVar.getDynamicObject())\r
+            {\r
+                if (key.isString())\r
+                {\r
+                    o->setProperty (Identifier (key), newValue);\r
+                    return;\r
+                }\r
             }\r
 \r
             Expression::assign (s, newValue);\r
index e27cdc89df400f1c97bd0049a7c41552e10fbd96..b1ed23b2957e4e70a3443dffa6a860a01ad2088a 100644 (file)
@@ -38,7 +38,7 @@
 \r
   ID:               juce_core\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE core classes\r
   description:      The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality.\r
   website:          http://www.juce.com/juce\r
@@ -48,6 +48,7 @@
   OSXFrameworks:    Cocoa IOKit\r
   iOSFrameworks:    Foundation\r
   linuxLibs:        rt dl pthread\r
+  linuxPackages:    libcurl\r
   mingwLibs:        uuid wsock32 wininet version ole32 ws2_32 oleaut32 imm32 comdlg32 shlwapi rpcrt4 winmm\r
 \r
  END_JUCE_MODULE_DECLARATION\r
 \r
 /** Config: JUCE_USE_CURL\r
     Enables http/https support via libcurl (Linux only). Enabling this will add an additional\r
-    run-time dynmic dependency to libcurl.\r
+    run-time dynamic dependency to libcurl.\r
 \r
     If you disable this then https/ssl support will not be available on linux.\r
 */\r
 #endif\r
 \r
 \r
-/*  Config: JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
+/** Config: JUCE_CATCH_UNHANDLED_EXCEPTIONS\r
     If enabled, this will add some exception-catching code to forward unhandled exceptions\r
     to your JUCEApplicationBase::unhandledException() callback.\r
 */\r
  //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1\r
 #endif\r
 \r
+/** Config: JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    If disabled, this will turn off dangerous static globals like String::empty, var::null, etc\r
+    which can cause nasty order-of-initialisation problems if they are referenced during static\r
+    constructor code.\r
+*/\r
+#ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+ #define JUCE_ALLOW_STATIC_NULL_VARIABLES 1\r
+#endif\r
+\r
+\r
 #ifndef JUCE_STRING_UTF_TYPE\r
  #define JUCE_STRING_UTF_TYPE 8\r
 #endif\r
index d55124506fe5f19b63c5edff8e64806069e706e7..96819cac5d2bc156a8c6a7942895d331f977f461 100644 (file)
 \r
 namespace\r
 {\r
-    inline size_t bitToIndex (const int bit) noexcept   { return (size_t) (bit >> 5); }\r
-    inline uint32 bitToMask  (const int bit) noexcept   { return (uint32) 1 << (bit & 31); }\r
+    inline uint32 bitToMask  (const int bit) noexcept           { return (uint32) 1 << (bit & 31); }\r
+    inline size_t bitToIndex (const int bit) noexcept           { return (size_t) (bit >> 5); }\r
+    inline size_t sizeNeededToHold (int highestBit) noexcept    { return (size_t) (highestBit >> 5) + 1; }\r
+\r
+    inline int highestBitInInt (uint32 n) noexcept\r
+    {\r
+        jassert (n != 0); // (the built-in functions may not work for n = 0)\r
+\r
+      #if JUCE_GCC || JUCE_CLANG\r
+        return 31 - __builtin_clz (n);\r
+      #elif JUCE_MSVC\r
+        unsigned long highest;\r
+        _BitScanReverse (&highest, n);\r
+        return (int) highest;\r
+      #else\r
+        n |= (n >> 1);\r
+        n |= (n >> 2);\r
+        n |= (n >> 4);\r
+        n |= (n >> 8);\r
+        n |= (n >> 16);\r
+        return countBitsInInt32 (n >> 1);\r
+      #endif\r
+    }\r
 }\r
 \r
 //==============================================================================\r
 BigInteger::BigInteger()\r
-    : numValues (4),\r
+    : allocatedSize (numPreallocatedInts),\r
       highestBit (-1),\r
       negative (false)\r
 {\r
-    values.calloc (numValues + 1);\r
+    for (int i = 0; i < numPreallocatedInts; ++i)\r
+        preallocated[i] = 0;\r
 }\r
 \r
 BigInteger::BigInteger (const int32 value)\r
-    : numValues (4),\r
+    : allocatedSize (numPreallocatedInts),\r
       highestBit (31),\r
       negative (value < 0)\r
 {\r
-    values.calloc (numValues + 1);\r
-    values[0] = (uint32) std::abs (value);\r
+    preallocated[0] = (uint32) std::abs (value);\r
+\r
+    for (int i = 1; i < numPreallocatedInts; ++i)\r
+        preallocated[i] = 0;\r
+\r
     highestBit = getHighestBit();\r
 }\r
 \r
 BigInteger::BigInteger (const uint32 value)\r
-    : numValues (4),\r
+    : allocatedSize (numPreallocatedInts),\r
       highestBit (31),\r
       negative (false)\r
 {\r
-    values.calloc (numValues + 1);\r
-    values[0] = value;\r
+    preallocated[0] = value;\r
+\r
+    for (int i = 1; i < numPreallocatedInts; ++i)\r
+        preallocated[i] = 0;\r
+\r
     highestBit = getHighestBit();\r
 }\r
 \r
 BigInteger::BigInteger (int64 value)\r
-    : numValues (4),\r
+    : allocatedSize (numPreallocatedInts),\r
       highestBit (63),\r
       negative (value < 0)\r
 {\r
-    values.calloc (numValues + 1);\r
-\r
     if (value < 0)\r
         value = -value;\r
 \r
-    values[0] = (uint32) value;\r
-    values[1] = (uint32) (value >> 32);\r
+    preallocated[0] = (uint32) value;\r
+    preallocated[1] = (uint32) (value >> 32);\r
+\r
+    for (int i = 2; i < numPreallocatedInts; ++i)\r
+        preallocated[i] = 0;\r
+\r
     highestBit = getHighestBit();\r
 }\r
 \r
 BigInteger::BigInteger (const BigInteger& other)\r
-    : numValues ((size_t) jmax ((size_t) 4, bitToIndex (other.highestBit) + 1)),\r
+    : allocatedSize (other.allocatedSize),\r
       highestBit (other.getHighestBit()),\r
       negative (other.negative)\r
 {\r
-    values.malloc (numValues + 1);\r
-    memcpy (values, other.values, sizeof (uint32) * (numValues + 1));\r
+    if (allocatedSize > numPreallocatedInts)\r
+        heapAllocation.malloc (allocatedSize);\r
+\r
+    memcpy (getValues(), other.getValues(), sizeof (uint32) * allocatedSize);\r
 }\r
 \r
 #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS\r
 BigInteger::BigInteger (BigInteger&& other) noexcept\r
-    : values (static_cast<HeapBlock<uint32>&&> (other.values)),\r
-      numValues (other.numValues),\r
+    : heapAllocation (static_cast<HeapBlock<uint32>&&> (other.heapAllocation)),\r
+      allocatedSize (other.allocatedSize),\r
       highestBit (other.highestBit),\r
       negative (other.negative)\r
 {\r
+    memcpy (preallocated, other.preallocated, sizeof (preallocated));\r
 }\r
 \r
 BigInteger& BigInteger::operator= (BigInteger&& other) noexcept\r
 {\r
-    values = static_cast<HeapBlock<uint32>&&> (other.values);\r
-    numValues = other.numValues;\r
+    heapAllocation = static_cast<HeapBlock<uint32>&&> (other.heapAllocation);\r
+    memcpy (preallocated, other.preallocated, sizeof (preallocated));\r
+    allocatedSize = other.allocatedSize;\r
     highestBit = other.highestBit;\r
     negative = other.negative;\r
     return *this;\r
@@ -110,8 +144,11 @@ BigInteger::~BigInteger()
 \r
 void BigInteger::swapWith (BigInteger& other) noexcept\r
 {\r
-    values.swapWith (other.values);\r
-    std::swap (numValues, other.numValues);\r
+    for (int i = 0; i < numPreallocatedInts; ++i)\r
+        std::swap (preallocated[i], other.preallocated[i]);\r
+\r
+    heapAllocation.swapWith (other.heapAllocation);\r
+    std::swap (allocatedSize, other.allocatedSize);\r
     std::swap (highestBit, other.highestBit);\r
     std::swap (negative, other.negative);\r
 }\r
@@ -121,44 +158,68 @@ BigInteger& BigInteger::operator= (const BigInteger& other)
     if (this != &other)\r
     {\r
         highestBit = other.getHighestBit();\r
-        jassert (other.numValues >= 4);\r
-        numValues = (size_t) jmax ((size_t) 4, bitToIndex (highestBit) + 1);\r
+        allocatedSize = (size_t) jmax ((size_t) numPreallocatedInts, sizeNeededToHold (highestBit));\r
+\r
+        if (allocatedSize <= numPreallocatedInts)\r
+            heapAllocation.free();\r
+        else\r
+            heapAllocation.malloc (allocatedSize);\r
+\r
+        memcpy (getValues(), other.getValues(), sizeof (uint32) * allocatedSize);\r
         negative = other.negative;\r
-        values.malloc (numValues + 1);\r
-        memcpy (values, other.values, sizeof (uint32) * (numValues + 1));\r
     }\r
 \r
     return *this;\r
 }\r
 \r
-void BigInteger::ensureSize (const size_t numVals)\r
+uint32* BigInteger::getValues() const noexcept\r
 {\r
-    if (numVals + 2 >= numValues)\r
+    jassert (heapAllocation != nullptr || allocatedSize <= numPreallocatedInts);\r
+\r
+    return heapAllocation != nullptr ? heapAllocation\r
+                                     : (uint32*) preallocated;\r
+}\r
+\r
+uint32* BigInteger::ensureSize (const size_t numVals)\r
+{\r
+    if (numVals > allocatedSize)\r
     {\r
-        size_t oldSize = numValues;\r
-        numValues = ((numVals + 2) * 3) / 2;\r
-        values.realloc (numValues + 1);\r
+        size_t oldSize = allocatedSize;\r
+        allocatedSize = ((numVals + 2) * 3) / 2;\r
+\r
+        if (heapAllocation == nullptr)\r
+        {\r
+            heapAllocation.calloc (allocatedSize);\r
+            memcpy (heapAllocation, preallocated, sizeof (uint32) * numPreallocatedInts);\r
+        }\r
+        else\r
+        {\r
+            heapAllocation.realloc (allocatedSize);\r
 \r
-        while (oldSize < numValues)\r
-            values [oldSize++] = 0;\r
+            for (uint32* values = getValues(); oldSize < allocatedSize; ++oldSize)\r
+                values[oldSize] = 0;\r
+        }\r
     }\r
+\r
+    return getValues();\r
 }\r
 \r
 //==============================================================================\r
 bool BigInteger::operator[] (const int bit) const noexcept\r
 {\r
     return bit <= highestBit && bit >= 0\r
-             && ((values [bitToIndex (bit)] & bitToMask (bit)) != 0);\r
+             && ((getValues() [bitToIndex (bit)] & bitToMask (bit)) != 0);\r
 }\r
 \r
 int BigInteger::toInteger() const noexcept\r
 {\r
-    const int n = (int) (values[0] & 0x7fffffff);\r
+    const int n = (int) (getValues()[0] & 0x7fffffff);\r
     return negative ? -n : n;\r
 }\r
 \r
 int64 BigInteger::toInt64() const noexcept\r
 {\r
+    const uint32* values = getValues();\r
     const int64 n = (((int64) (values[1] & 0x7fffffff)) << 32) | values[0];\r
     return negative ? -n : n;\r
 }\r
@@ -167,13 +228,12 @@ BigInteger BigInteger::getBitRange (int startBit, int numBits) const
 {\r
     BigInteger r;\r
     numBits = jmin (numBits, getHighestBit() + 1 - startBit);\r
-    r.ensureSize ((size_t) bitToIndex (numBits));\r
+    uint32* const destValues = r.ensureSize (sizeNeededToHold (numBits));\r
     r.highestBit = numBits;\r
 \r
-    int i = 0;\r
-    while (numBits > 0)\r
+    for (int i = 0; numBits > 0;)\r
     {\r
-        r.values[i++] = getBitRangeAsInt (startBit, (int) jmin (32, numBits));\r
+        destValues[i++] = getBitRangeAsInt (startBit, (int) jmin (32, numBits));\r
         numBits -= 32;\r
         startBit += 32;\r
     }\r
@@ -198,6 +258,7 @@ uint32 BigInteger::getBitRangeAsInt (const int startBit, int numBits) const noex
     const size_t pos = bitToIndex (startBit);\r
     const int offset = startBit & 31;\r
     const int endSpace = 32 - numBits;\r
+    const uint32* values = getValues();\r
 \r
     uint32 n = ((uint32) values [pos]) >> offset;\r
 \r
@@ -223,20 +284,15 @@ void BigInteger::setBitRangeAsInt (const int startBit, int numBits, uint32 value
 }\r
 \r
 //==============================================================================\r
-void BigInteger::clear()\r
+void BigInteger::clear() noexcept\r
 {\r
-    if (numValues > 16)\r
-    {\r
-        numValues = 4;\r
-        values.calloc (numValues + 1);\r
-    }\r
-    else\r
-    {\r
-        values.clear (numValues + 1);\r
-    }\r
-\r
+    heapAllocation.free();\r
+    allocatedSize = numPreallocatedInts;\r
     highestBit = -1;\r
     negative = false;\r
+\r
+    for (int i = 0; i < numPreallocatedInts; ++i)\r
+        preallocated[i] = 0;\r
 }\r
 \r
 void BigInteger::setBit (const int bit)\r
@@ -245,11 +301,11 @@ void BigInteger::setBit (const int bit)
     {\r
         if (bit > highestBit)\r
         {\r
-            ensureSize (bitToIndex (bit));\r
+            ensureSize (sizeNeededToHold (bit));\r
             highestBit = bit;\r
         }\r
 \r
-        values [bitToIndex (bit)] |= bitToMask (bit);\r
+        getValues() [bitToIndex (bit)] |= bitToMask (bit);\r
     }\r
 }\r
 \r
@@ -264,7 +320,12 @@ void BigInteger::setBit (const int bit, const bool shouldBeSet)
 void BigInteger::clearBit (const int bit) noexcept\r
 {\r
     if (bit >= 0 && bit <= highestBit)\r
-        values [bitToIndex (bit)] &= ~bitToMask (bit);\r
+    {\r
+        getValues() [bitToIndex (bit)] &= ~bitToMask (bit);\r
+\r
+        if (bit == highestBit)\r
+            highestBit = getHighestBit();\r
+    }\r
 }\r
 \r
 void BigInteger::setRange (int startBit, int numBits, const bool shouldBeSet)\r
@@ -311,31 +372,12 @@ void BigInteger::negate() noexcept
  #pragma intrinsic (_BitScanReverse)\r
 #endif\r
 \r
-inline static int highestBitInInt (uint32 n) noexcept\r
-{\r
-    jassert (n != 0); // (the built-in functions may not work for n = 0)\r
-\r
-  #if JUCE_GCC || JUCE_CLANG\r
-    return 31 - __builtin_clz (n);\r
-  #elif JUCE_MSVC\r
-    unsigned long highest;\r
-    _BitScanReverse (&highest, n);\r
-    return (int) highest;\r
-  #else\r
-    n |= (n >> 1);\r
-    n |= (n >> 2);\r
-    n |= (n >> 4);\r
-    n |= (n >> 8);\r
-    n |= (n >> 16);\r
-    return countBitsInInt32 (n >> 1);\r
-  #endif\r
-}\r
-\r
 int BigInteger::countNumberOfSetBits() const noexcept\r
 {\r
     int total = 0;\r
+    const uint32* values = getValues();\r
 \r
-    for (int i = (int) bitToIndex (highestBit) + 1; --i >= 0;)\r
+    for (int i = (int) sizeNeededToHold (highestBit); --i >= 0;)\r
         total += countNumberOfBits (values[i]);\r
 \r
     return total;\r
@@ -343,19 +385,19 @@ int BigInteger::countNumberOfSetBits() const noexcept
 \r
 int BigInteger::getHighestBit() const noexcept\r
 {\r
-    for (int i = (int) bitToIndex (highestBit + 1); i >= 0; --i)\r
-    {\r
-        const uint32 n = values[i];\r
+    const uint32* values = getValues();\r
 \r
-        if (n != 0)\r
+    for (int i = (int) bitToIndex (highestBit); i >= 0; --i)\r
+        if (uint32 n = values[i])\r
             return highestBitInInt (n) + (i << 5);\r
-    }\r
 \r
     return -1;\r
 }\r
 \r
 int BigInteger::findNextSetBit (int i) const noexcept\r
 {\r
+    const uint32* values = getValues();\r
+\r
     for (; i <= highestBit; ++i)\r
         if ((values [bitToIndex (i)] & bitToMask (i)) != 0)\r
             return i;\r
@@ -365,6 +407,8 @@ int BigInteger::findNextSetBit (int i) const noexcept
 \r
 int BigInteger::findNextClearBit (int i) const noexcept\r
 {\r
+    const uint32* values = getValues();\r
+\r
     for (; i <= highestBit; ++i)\r
         if ((values [bitToIndex (i)] & bitToMask (i)) == 0)\r
             break;\r
@@ -375,6 +419,9 @@ int BigInteger::findNextClearBit (int i) const noexcept
 //==============================================================================\r
 BigInteger& BigInteger::operator+= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+        return operator+= (BigInteger (other));\r
+\r
     if (other.isNegative())\r
         return operator-= (-other);\r
 \r
@@ -396,23 +443,19 @@ BigInteger& BigInteger::operator+= (const BigInteger& other)
     }\r
     else\r
     {\r
-        if (other.highestBit > highestBit)\r
-            highestBit = other.highestBit;\r
-\r
-        ++highestBit;\r
-\r
-        const size_t numInts = bitToIndex (highestBit) + 1;\r
-        ensureSize (numInts);\r
+        highestBit = jmax (highestBit, other.highestBit) + 1;\r
 \r
+        const size_t numInts = sizeNeededToHold (highestBit);\r
+        uint32* const values = ensureSize (numInts);\r
+        const uint32* const otherValues = other.getValues();\r
         int64 remainder = 0;\r
 \r
-        for (size_t i = 0; i <= numInts; ++i)\r
+        for (size_t i = 0; i < numInts; ++i)\r
         {\r
-            if (i < numValues)\r
-                remainder += values[i];\r
+            remainder += values[i];\r
 \r
-            if (i < other.numValues)\r
-                remainder += other.values[i];\r
+            if (i < other.allocatedSize)\r
+                remainder += otherValues[i];\r
 \r
             values[i] = (uint32) remainder;\r
             remainder >>= 32;\r
@@ -427,21 +470,16 @@ BigInteger& BigInteger::operator+= (const BigInteger& other)
 \r
 BigInteger& BigInteger::operator-= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+    {\r
+        clear();\r
+        return *this;\r
+    }\r
+\r
     if (other.isNegative())\r
         return operator+= (-other);\r
 \r
-    if (! isNegative())\r
-    {\r
-        if (compareAbsolute (other) < 0)\r
-        {\r
-            BigInteger temp (other);\r
-            swapWith (temp);\r
-            *this -= temp;\r
-            negate();\r
-            return *this;\r
-        }\r
-    }\r
-    else\r
+    if (isNegative())\r
     {\r
         negate();\r
         *this += other;\r
@@ -449,14 +487,26 @@ BigInteger& BigInteger::operator-= (const BigInteger& other)
         return *this;\r
     }\r
 \r
-    const size_t numInts = bitToIndex (highestBit) + 1;\r
-    const size_t maxOtherInts = bitToIndex (other.highestBit) + 1;\r
+    if (compareAbsolute (other) < 0)\r
+    {\r
+        BigInteger temp (other);\r
+        swapWith (temp);\r
+        *this -= temp;\r
+        negate();\r
+        return *this;\r
+    }\r
+\r
+    const size_t numInts = sizeNeededToHold (getHighestBit());\r
+    const size_t maxOtherInts = sizeNeededToHold (other.getHighestBit());\r
+    jassert (numInts >= maxOtherInts);\r
+    uint32* const values = getValues();\r
+    const uint32* const otherValues = other.getValues();\r
     int64 amountToSubtract = 0;\r
 \r
-    for (size_t i = 0; i <= numInts; ++i)\r
+    for (size_t i = 0; i < numInts; ++i)\r
     {\r
-        if (i <= maxOtherInts)\r
-            amountToSubtract += (int64) other.values[i];\r
+        if (i < maxOtherInts)\r
+            amountToSubtract += (int64) otherValues[i];\r
 \r
         if (values[i] >= amountToSubtract)\r
         {\r
@@ -471,11 +521,15 @@ BigInteger& BigInteger::operator-= (const BigInteger& other)
         }\r
     }\r
 \r
+    highestBit = getHighestBit();\r
     return *this;\r
 }\r
 \r
 BigInteger& BigInteger::operator*= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+        return operator*= (BigInteger (other));\r
+\r
     int n = getHighestBit();\r
     int t = other.getHighestBit();\r
 \r
@@ -484,29 +538,32 @@ BigInteger& BigInteger::operator*= (const BigInteger& other)
 \r
     BigInteger total;\r
     total.highestBit = n + t + 1;\r
+    uint32* const totalValues = total.ensureSize (sizeNeededToHold (total.highestBit) + 1);\r
 \r
     n >>= 5;\r
     t >>= 5;\r
 \r
-    total.ensureSize ((size_t) (n + t + 2));\r
-\r
     BigInteger m (other);\r
     m.setNegative (false);\r
 \r
+    const uint32* const mValues = m.getValues();\r
+    const uint32* const values = getValues();\r
+\r
     for (int i = 0; i <= t; ++i)\r
     {\r
         uint32 c = 0;\r
 \r
         for (int j = 0; j <= n; ++j)\r
         {\r
-            uint64 uv = (uint64) total.values[i + j] + (uint64) values[j] * (uint64) m.values[i] + (uint64) c;\r
-            total.values[i + j] = (uint32) uv;\r
+            uint64 uv = (uint64) totalValues[i + j] + (uint64) values[j] * (uint64) mValues[i] + (uint64) c;\r
+            totalValues[i + j] = (uint32) uv;\r
             c = uv >> 32;\r
         }\r
 \r
-        total.values[i + n + 1] = c;\r
+        totalValues[i + n + 1] = c;\r
     }\r
 \r
+    total.highestBit = total.getHighestBit();\r
     total.setNegative (wasNegative ^ other.isNegative());\r
     swapWith (total);\r
 \r
@@ -515,6 +572,9 @@ BigInteger& BigInteger::operator*= (const BigInteger& other)
 \r
 void BigInteger::divideBy (const BigInteger& divisor, BigInteger& remainder)\r
 {\r
+    if (this == &divisor)\r
+        return divideBy (BigInteger (divisor), remainder);\r
+\r
     jassert (this != &remainder); // (can't handle passing itself in to get the remainder)\r
 \r
     const int divHB = divisor.getHighestBit();\r
@@ -566,17 +626,21 @@ BigInteger& BigInteger::operator/= (const BigInteger& other)
 \r
 BigInteger& BigInteger::operator|= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+        return *this;\r
+\r
     // this operation doesn't take into account negative values..\r
     jassert (isNegative() == other.isNegative());\r
 \r
     if (other.highestBit >= 0)\r
     {\r
-        ensureSize (bitToIndex (other.highestBit));\r
+        uint32* const values = ensureSize (sizeNeededToHold (other.highestBit));\r
+        const uint32* const otherValues = other.getValues();\r
 \r
         int n = (int) bitToIndex (other.highestBit) + 1;\r
 \r
         while (--n >= 0)\r
-            values[n] |= other.values[n];\r
+            values[n] |= otherValues[n];\r
 \r
         if (other.highestBit > highestBit)\r
             highestBit = other.highestBit;\r
@@ -589,16 +653,22 @@ BigInteger& BigInteger::operator|= (const BigInteger& other)
 \r
 BigInteger& BigInteger::operator&= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+        return *this;\r
+\r
     // this operation doesn't take into account negative values..\r
     jassert (isNegative() == other.isNegative());\r
 \r
-    int n = (int) numValues;\r
+    uint32* const values = getValues();\r
+    const uint32* const otherValues = other.getValues();\r
+\r
+    int n = (int) allocatedSize;\r
 \r
-    while (n > (int) other.numValues)\r
+    while (n > (int) other.allocatedSize)\r
         values[--n] = 0;\r
 \r
     while (--n >= 0)\r
-        values[n] &= other.values[n];\r
+        values[n] &= otherValues[n];\r
 \r
     if (other.highestBit < highestBit)\r
         highestBit = other.highestBit;\r
@@ -609,17 +679,24 @@ BigInteger& BigInteger::operator&= (const BigInteger& other)
 \r
 BigInteger& BigInteger::operator^= (const BigInteger& other)\r
 {\r
+    if (this == &other)\r
+    {\r
+        clear();\r
+        return *this;\r
+    }\r
+\r
     // this operation will only work with the absolute values\r
     jassert (isNegative() == other.isNegative());\r
 \r
     if (other.highestBit >= 0)\r
     {\r
-        ensureSize (bitToIndex (other.highestBit));\r
+        uint32* const values = ensureSize (sizeNeededToHold (other.highestBit));\r
+        const uint32* const otherValues = other.getValues();\r
 \r
         int n = (int) bitToIndex (other.highestBit) + 1;\r
 \r
         while (--n >= 0)\r
-            values[n] ^= other.values[n];\r
+            values[n] ^= otherValues[n];\r
 \r
         if (other.highestBit > highestBit)\r
             highestBit = other.highestBit;\r
@@ -679,9 +756,12 @@ int BigInteger::compareAbsolute (const BigInteger& other) const noexcept
     if (h1 > h2) return 1;\r
     if (h1 < h2) return -1;\r
 \r
-    for (int i = (int) bitToIndex (h1) + 1; --i >= 0;)\r
-        if (values[i] != other.values[i])\r
-            return (values[i] > other.values[i]) ? 1 : -1;\r
+    const uint32* const values = getValues();\r
+    const uint32* const otherValues = other.getValues();\r
+\r
+    for (int i = (int) bitToIndex (h1); i >= 0; --i)\r
+        if (values[i] != otherValues[i])\r
+            return values[i] > otherValues[i] ? 1 : -1;\r
 \r
     return 0;\r
 }\r
@@ -698,7 +778,7 @@ void BigInteger::shiftLeft (int bits, const int startBit)
 {\r
     if (startBit > 0)\r
     {\r
-        for (int i = highestBit + 1; --i >= startBit;)\r
+        for (int i = highestBit; i >= startBit; --i)\r
             setBit (i + bits, (*this) [i]);\r
 \r
         while (--bits >= 0)\r
@@ -706,19 +786,19 @@ void BigInteger::shiftLeft (int bits, const int startBit)
     }\r
     else\r
     {\r
-        ensureSize (bitToIndex (highestBit + bits) + 1);\r
+        uint32* const values = ensureSize (sizeNeededToHold (highestBit + bits));\r
 \r
         const size_t wordsToMove = bitToIndex (bits);\r
-        size_t top = 1 + bitToIndex (highestBit);\r
+        size_t numOriginalInts = bitToIndex (highestBit);\r
         highestBit += bits;\r
 \r
         if (wordsToMove > 0)\r
         {\r
-            for (int i = (int) top; --i >= 0;)\r
-                values [(size_t) i + wordsToMove] = values [i];\r
+            for (int i = (int) numOriginalInts; i >= 0; --i)\r
+                values[(size_t) i + wordsToMove] = values[i];\r
 \r
             for (size_t j = 0; j < wordsToMove; ++j)\r
-                values [j] = 0;\r
+                values[j] = 0;\r
 \r
             bits &= 31;\r
         }\r
@@ -727,10 +807,10 @@ void BigInteger::shiftLeft (int bits, const int startBit)
         {\r
             const int invBits = 32 - bits;\r
 \r
-            for (size_t i = top + 1 + wordsToMove; --i > wordsToMove;)\r
-                values[i] = (values[i] << bits) | (values [i - 1] >> invBits);\r
+            for (size_t i = bitToIndex (highestBit); i > wordsToMove; --i)\r
+                values[i] = (values[i] << bits) | (values[i - 1] >> invBits);\r
 \r
-            values [wordsToMove] = values [wordsToMove] << bits;\r
+            values[wordsToMove] = values[wordsToMove] << bits;\r
         }\r
 \r
         highestBit = getHighestBit();\r
@@ -757,15 +837,16 @@ void BigInteger::shiftRight (int bits, const int startBit)
             const size_t wordsToMove = bitToIndex (bits);\r
             size_t top = 1 + bitToIndex (highestBit) - wordsToMove;\r
             highestBit -= bits;\r
+            uint32* const values = getValues();\r
 \r
             if (wordsToMove > 0)\r
             {\r
                 size_t i;\r
                 for (i = 0; i < top; ++i)\r
-                    values [i] = values [i + wordsToMove];\r
+                    values[i] = values[i + wordsToMove];\r
 \r
                 for (i = 0; i < wordsToMove; ++i)\r
-                    values [top + i] = 0;\r
+                    values[top + i] = 0;\r
 \r
                 bits &= 31;\r
             }\r
@@ -773,10 +854,10 @@ void BigInteger::shiftRight (int bits, const int startBit)
             if (bits != 0)\r
             {\r
                 const int invBits = 32 - bits;\r
-\r
                 --top;\r
+\r
                 for (size_t i = 0; i < top; ++i)\r
-                    values[i] = (values[i] >> bits) | (values [i + 1] << invBits);\r
+                    values[i] = (values[i] >> bits) | (values[i + 1] << invBits);\r
 \r
                 values[top] = (values[top] >> bits);\r
             }\r
@@ -1112,6 +1193,7 @@ MemoryBlock BigInteger::toMemoryBlock() const
 {\r
     const int numBytes = (getHighestBit() + 8) >> 3;\r
     MemoryBlock mb ((size_t) numBytes);\r
+    const uint32* const values = getValues();\r
 \r
     for (int i = 0; i < numBytes; ++i)\r
         mb[i] = (char) ((values[i / 4] >> ((i & 3) * 8)) & 0xff);\r
@@ -1122,14 +1204,13 @@ MemoryBlock BigInteger::toMemoryBlock() const
 void BigInteger::loadFromMemoryBlock (const MemoryBlock& data)\r
 {\r
     const size_t numBytes = data.getSize();\r
-    numValues = 1 + (numBytes / sizeof (uint32));\r
-    values.malloc (numValues + 1);\r
+    const size_t numInts = 1 + (numBytes / sizeof (uint32));\r
+    uint32* const values = ensureSize (numInts);\r
 \r
-    for (int i = 0; i < (int) numValues - 1; ++i)\r
+    for (int i = 0; i < (int) numInts - 1; ++i)\r
         values[i] = (uint32) ByteOrder::littleEndianInt (addBytesToPointer (data.getData(), sizeof (uint32) * (size_t) i));\r
 \r
-    values[numValues - 1] = 0;\r
-    values[numValues] = 0;\r
+    values[numInts - 1] = 0;\r
 \r
     for (int i = (int) (numBytes & ~3u); i < (int) numBytes; ++i)\r
         this->setBitRangeAsInt (i << 3, 8, (uint32) data [i]);\r
@@ -1138,6 +1219,76 @@ void BigInteger::loadFromMemoryBlock (const MemoryBlock& data)
     highestBit = getHighestBit();\r
 }\r
 \r
+//==============================================================================\r
+void writeLittleEndianBitsInBuffer (void* buffer, uint32 startBit, uint32 numBits, uint32 value) noexcept\r
+{\r
+    jassert (buffer != nullptr);\r
+    jassert (numBits > 0 && numBits <= 32);\r
+    jassert (numBits == 32 || (value >> numBits) == 0);\r
+\r
+    uint8* data = static_cast<uint8*> (buffer) + startBit / 8;\r
+\r
+    if (const uint32 offset = (startBit & 7))\r
+    {\r
+        const uint32 bitsInByte = 8 - offset;\r
+        const uint8 current = *data;\r
+\r
+        if (bitsInByte >= numBits)\r
+        {\r
+            *data = (uint8) ((current & ~(((1u << numBits) - 1u) << offset)) | (value << offset));\r
+            return;\r
+        }\r
+\r
+        *data++ = current ^ (uint8) (((value << offset) ^ current) & (((1u << bitsInByte) - 1u) << offset));\r
+        numBits -= bitsInByte;\r
+        value >>= bitsInByte;\r
+    }\r
+\r
+    while (numBits >= 8)\r
+    {\r
+        *data++ = (uint8) value;\r
+        value >>= 8;\r
+        numBits -= 8;\r
+    }\r
+\r
+    if (numBits > 0)\r
+        *data = (uint8) ((*data & (0xff << numBits)) | value);\r
+}\r
+\r
+uint32 readLittleEndianBitsInBuffer (const void* buffer, uint32 startBit, uint32 numBits) noexcept\r
+{\r
+    jassert (buffer != nullptr);\r
+    jassert (numBits > 0 && numBits <= 32);\r
+\r
+    uint32 result = 0;\r
+    uint32 bitsRead = 0;\r
+    const uint8* data = static_cast<const uint8*> (buffer) + startBit / 8;\r
+\r
+    if (const uint32 offset = (startBit & 7))\r
+    {\r
+        const uint32 bitsInByte = 8 - offset;\r
+        result = (*data >> offset);\r
+\r
+        if (bitsInByte >= numBits)\r
+            return result & ((1u << numBits) - 1u);\r
+\r
+        numBits -= bitsInByte;\r
+        bitsRead += bitsInByte;\r
+        ++data;\r
+    }\r
+\r
+    while (numBits >= 8)\r
+    {\r
+        result |= (((uint32) *data++) << bitsRead);\r
+        bitsRead += 8;\r
+        numBits -= 8;\r
+    }\r
+\r
+    if (numBits > 0)\r
+        result |= ((*data & ((1u << numBits) - 1u)) << bitsRead);\r
+\r
+    return result;\r
+}\r
 \r
 //==============================================================================\r
 //==============================================================================\r
@@ -1160,33 +1311,64 @@ public:
 \r
     void runTest() override\r
     {\r
-        beginTest ("BigInteger");\r
+        {\r
+            beginTest ("BigInteger");\r
 \r
-        Random r = getRandom();\r
+            Random r = getRandom();\r
 \r
-        expect (BigInteger().isZero());\r
-        expect (BigInteger(1).isOne());\r
+            expect (BigInteger().isZero());\r
+            expect (BigInteger(1).isOne());\r
+\r
+            for (int j = 10000; --j >= 0;)\r
+            {\r
+                BigInteger b1 (getBigRandom(r)),\r
+                           b2 (getBigRandom(r));\r
+\r
+                BigInteger b3 = b1 + b2;\r
+                expect (b3 > b1 && b3 > b2);\r
+                expect (b3 - b1 == b2);\r
+                expect (b3 - b2 == b1);\r
+\r
+                BigInteger b4 = b1 * b2;\r
+                expect (b4 > b1 && b4 > b2);\r
+                expect (b4 / b1 == b2);\r
+                expect (b4 / b2 == b1);\r
+                expect (((b4 << 1) >> 1) == b4);\r
+                expect (((b4 << 10) >> 10) == b4);\r
+                expect (((b4 << 100) >> 100) == b4);\r
+\r
+                // TODO: should add tests for other ops (although they also get pretty well tested in the RSA unit test)\r
+\r
+                BigInteger b5;\r
+                b5.loadFromMemoryBlock (b3.toMemoryBlock());\r
+                expect (b3 == b5);\r
+            }\r
+        }\r
 \r
-        for (int j = 10000; --j >= 0;)\r
         {\r
-            BigInteger b1 (getBigRandom(r)),\r
-                       b2 (getBigRandom(r));\r
+            beginTest ("Bit setting");\r
 \r
-            BigInteger b3 = b1 + b2;\r
-            expect (b3 > b1 && b3 > b2);\r
-            expect (b3 - b1 == b2);\r
-            expect (b3 - b2 == b1);\r
+            Random r = getRandom();\r
+            static uint8 test[2048];\r
 \r
-            BigInteger b4 = b1 * b2;\r
-            expect (b4 > b1 && b4 > b2);\r
-            expect (b4 / b1 == b2);\r
-            expect (b4 / b2 == b1);\r
+            for (int j = 100000; --j >= 0;)\r
+            {\r
+                uint32 offset = static_cast<uint32> (r.nextInt (200) + 10);\r
+                uint32 num = static_cast<uint32> (r.nextInt (32) + 1);\r
+                uint32 value = static_cast<uint32> (r.nextInt());\r
+\r
+                if (num < 32)\r
+                    value &= ((1u << num) - 1);\r
 \r
-            // TODO: should add tests for other ops (although they also get pretty well tested in the RSA unit test)\r
+                auto old1 = readLittleEndianBitsInBuffer (test, offset - 6, 6);\r
+                auto old2 = readLittleEndianBitsInBuffer (test, offset + num, 6);\r
+                writeLittleEndianBitsInBuffer (test, offset, num, value);\r
+                auto result = readLittleEndianBitsInBuffer (test, offset, num);\r
 \r
-            BigInteger b5;\r
-            b5.loadFromMemoryBlock (b3.toMemoryBlock());\r
-            expect (b3 == b5);\r
+                expect (result == value);\r
+                expect (old1 == readLittleEndianBitsInBuffer (test, offset - 6, 6));\r
+                expect (old2 == readLittleEndianBitsInBuffer (test, offset + num, 6));\r
+            }\r
         }\r
     }\r
 };\r
index ada0e89e5b890f6b8ae9cbef4e98ee48887e998d..4a663317bbc66fb45d29a0752b00305f31c6cb7f 100644 (file)
@@ -106,7 +106,7 @@ public:
 \r
     //==============================================================================\r
     /** Resets the value to 0. */\r
-    void clear();\r
+    void clear() noexcept;\r
 \r
     /** Clears a particular bit in the number. */\r
     void clearBit (int bitNumber) noexcept;\r
@@ -325,12 +325,15 @@ public:
 \r
 private:\r
     //==============================================================================\r
-    HeapBlock<uint32> values;\r
-    size_t numValues;\r
+    enum { numPreallocatedInts = 4 };\r
+    HeapBlock<uint32> heapAllocation;\r
+    uint32 preallocated[numPreallocatedInts];\r
+    size_t allocatedSize;\r
     int highestBit;\r
     bool negative;\r
 \r
-    void ensureSize (size_t);\r
+    uint32* getValues() const noexcept;\r
+    uint32* ensureSize (size_t);\r
     void shiftLeft (int bits, int startBit);\r
     void shiftRight (int bits, int startBit);\r
 \r
index e7a8c39bda65bbc2eec0a2537911b2d645da2ab6..7de74a316666b5d27c790c5f8baac6ea111c9f8f 100644 (file)
@@ -545,6 +545,25 @@ NumericType square (NumericType n) noexcept
     return n * n;\r
 }\r
 \r
+//==============================================================================\r
+/** Writes a number of bits into a memory buffer at a given bit index.\r
+    The buffer is treated as a sequence of 8-bit bytes, and the value is encoded in little-endian order,\r
+    so for example if startBit = 10, and numBits = 11 then the lower 6 bits of the value would be written\r
+    into bits 2-8 of targetBuffer[1], and the upper 5 bits of value into bits 0-5 of targetBuffer[2].\r
+\r
+    @see readLittleEndianBitsInBuffer\r
+*/\r
+void writeLittleEndianBitsInBuffer (void* targetBuffer, uint32 startBit, uint32 numBits, uint32 value) noexcept;\r
+\r
+/** Reads a number of bits from a buffer at a given bit index.\r
+    The buffer is treated as a sequence of 8-bit bytes, and the value is encoded in little-endian order,\r
+    so for example if startBit = 10, and numBits = 11 then the lower 6 bits of the result would be read\r
+    from bits 2-8 of sourceBuffer[1], and the upper 5 bits of the result from bits 0-5 of sourceBuffer[2].\r
+\r
+    @see writeLittleEndianBitsInBuffer\r
+*/\r
+uint32 readLittleEndianBitsInBuffer (const void* sourceBuffer, uint32 startBit, uint32 numBits) noexcept;\r
+\r
 \r
 //==============================================================================\r
 #if JUCE_INTEL || defined (DOXYGEN)\r
index 81fbb8c4f0f1982c54811bc6c845dfb1ef3ade1e..694a83e86648be9590afeceae940c5a9eff47be4 100644 (file)
@@ -45,12 +45,13 @@ class NormalisableRange
 {\r
 public:\r
     /** Creates a continuous range that performs a dummy mapping. */\r
-    NormalisableRange() noexcept  : start(), end (1), interval(), skew (static_cast<ValueType> (1)) {}\r
+    NormalisableRange() noexcept  : start(), end (1), interval(), skew (static_cast<ValueType> (1)), symmetricSkew (false) {}\r
 \r
     /** Creates a copy of another range. */\r
     NormalisableRange (const NormalisableRange& other) noexcept\r
         : start (other.start), end (other.end),\r
-          interval (other.interval), skew (other.skew)\r
+          interval (other.interval), skew (other.skew),\r
+          symmetricSkew (other.symmetricSkew)\r
     {\r
         checkInvariants();\r
     }\r
@@ -62,6 +63,7 @@ public:
         end = other.end;\r
         interval = other.interval;\r
         skew = other.skew;\r
+        symmetricSkew = other.symmetricSkew;\r
         checkInvariants();\r
         return *this;\r
     }\r
@@ -70,9 +72,10 @@ public:
     NormalisableRange (ValueType rangeStart,\r
                        ValueType rangeEnd,\r
                        ValueType intervalValue,\r
-                       ValueType skewFactor) noexcept\r
-        : start (rangeStart), end (rangeEnd),\r
-          interval (intervalValue), skew (skewFactor)\r
+                       ValueType skewFactor,\r
+                       bool useSymmetricSkew = false) noexcept\r
+        : start (rangeStart), end (rangeEnd), interval (intervalValue),\r
+          skew (skewFactor), symmetricSkew (useSymmetricSkew)\r
     {\r
         checkInvariants();\r
     }\r
@@ -81,8 +84,8 @@ public:
     NormalisableRange (ValueType rangeStart,\r
                        ValueType rangeEnd,\r
                        ValueType intervalValue) noexcept\r
-        : start (rangeStart), end (rangeEnd),\r
-          interval (intervalValue), skew (static_cast<ValueType> (1))\r
+        : start (rangeStart), end (rangeEnd), interval (intervalValue),\r
+          skew (static_cast<ValueType> (1)), symmetricSkew (false)\r
     {\r
         checkInvariants();\r
     }\r
@@ -90,8 +93,8 @@ public:
     /** Creates a NormalisableRange with a given range, continuous interval, but a dummy skew-factor. */\r
     NormalisableRange (ValueType rangeStart,\r
                        ValueType rangeEnd) noexcept\r
-        : start (rangeStart), end (rangeEnd),\r
-          interval(), skew (static_cast<ValueType> (1))\r
+        : start (rangeStart), end (rangeEnd), interval(),\r
+          skew (static_cast<ValueType> (1)), symmetricSkew (false)\r
     {\r
         checkInvariants();\r
     }\r
@@ -103,10 +106,18 @@ public:
     {\r
         ValueType proportion = (v - start) / (end - start);\r
 \r
-        if (skew != static_cast<ValueType> (1))\r
-            proportion = std::pow (proportion, skew);\r
+        if (skew == static_cast<ValueType> (1))\r
+            return proportion;\r
 \r
-        return proportion;\r
+        if (! symmetricSkew)\r
+            return std::pow (proportion, skew);\r
+\r
+        ValueType distanceFromMiddle = static_cast<ValueType> (2) * proportion - static_cast<ValueType> (1);\r
+\r
+        return (static_cast<ValueType> (1) + std::pow (std::abs (distanceFromMiddle), skew)\r
+                                           * (distanceFromMiddle < static_cast<ValueType> (0) ? static_cast<ValueType> (-1)\r
+                                                                                              : static_cast<ValueType> (1)))\r
+               / static_cast<ValueType> (2);\r
     }\r
 \r
     /** Uses the properties of this mapping to convert a normalised 0->1 value to\r
@@ -114,10 +125,22 @@ public:
     */\r
     ValueType convertFrom0to1 (ValueType proportion) const noexcept\r
     {\r
-        if (skew != static_cast<ValueType> (1) && proportion > ValueType())\r
-            proportion = std::exp (std::log (proportion) / skew);\r
+        if (! symmetricSkew)\r
+        {\r
+            if (skew != static_cast<ValueType> (1) && proportion > ValueType())\r
+                proportion = std::exp (std::log (proportion) / skew);\r
+\r
+                return start + (end - start) * proportion;\r
+        }\r
 \r
-        return start + (end - start) * proportion;\r
+        ValueType distanceFromMiddle = static_cast<ValueType> (2) * proportion - static_cast<ValueType> (1);\r
+\r
+        if (skew != static_cast<ValueType> (1) && distanceFromMiddle != static_cast<ValueType> (0))\r
+            distanceFromMiddle = std::exp (std::log (std::abs (distanceFromMiddle)) / skew)\r
+                                 * (distanceFromMiddle < static_cast<ValueType> (0) ? static_cast<ValueType> (-1)\r
+                                                                                    : static_cast<ValueType> (1));\r
+\r
+        return start + (end - start) / static_cast<ValueType> (2) * (static_cast<ValueType> (1) + distanceFromMiddle);\r
     }\r
 \r
     /** Takes a non-normalised value and snaps it based on the interval property of\r
@@ -158,6 +181,9 @@ public:
     */\r
     ValueType skew;\r
 \r
+    /** If true, the skew factor applies from the middle of the slider to each of its ends. */\r
+    bool symmetricSkew;\r
+\r
 private:\r
     void checkInvariants() const\r
     {\r
index 67a4324b95e37b23e5eb0f39f5197c66ba1b07ec..5f9d409e474ca03a9e907d85ba0abf8e9e056a6c 100644 (file)
@@ -172,6 +172,15 @@ public:
         return Range (start, start + newLength);\r
     }\r
 \r
+    /** Returns a range which has its start moved down and its end moved up by the\r
+        given amount.\r
+        @returns The returned range will be (start - amount, end + amount)\r
+    */\r
+    Range expanded (ValueType amount) const noexcept\r
+    {\r
+        return Range (start - amount, end + amount);\r
+    }\r
+\r
     //==============================================================================\r
     /** Adds an amount to the start and end of the range. */\r
     inline Range operator+= (const ValueType amountToAdd) noexcept\r
index 3db0c1cfb21cfc38f6b059b264aa98a9d24d37ed..581471b5183a690f6405250138b8b1be75deaf37 100644 (file)
@@ -160,6 +160,7 @@ public:
 \r
     ScopedPointer& operator= (ScopedPointer&& other) noexcept\r
     {\r
+        ContainerDeletePolicy<ObjectType>::destroy (object);\r
         object = other.object;\r
         other.object = nullptr;\r
         return *this;\r
index 307b55951b10ea84558fa9828c059ca6d26062f1..12a63ba4bf03bf6bb1ec75272158cc5d98f283c3 100644 (file)
@@ -122,7 +122,7 @@ public:
     SharedObjectType& get() const noexcept              { return *sharedObject; }\r
 \r
     /** Returns the object that this pointer references.\r
-        The pointer returned may be zero, of course.\r
+        The pointer returned may be a nullptr, of course.\r
     */\r
     SharedObjectType& getObject() const noexcept        { return *sharedObject; }\r
 \r
index 5f778827c7284b31046661192106e6efab03c270..6b05033551d9f18ad1f6bca70ca45af99a37856d 100644 (file)
   #include <comutil.h>\r
  #endif\r
 \r
+ #ifndef S_FALSE\r
+  #define S_FALSE (1) // (apparently some obscure win32 dev environments don't define this)\r
+ #endif\r
+\r
  #undef PACKED\r
 \r
  #if JUCE_MSVC\r
index 5d6a2415dc06966602a7003af6d24e70bc6d3a6a..8051ed4a0b6e65506180e7c793bbedf7b6ff223b 100644 (file)
@@ -133,10 +133,17 @@ private:
                      const int maxRedirects, const String& headers,\r
                      bool isPost, const String& httpRequest, size_t postSize)\r
     {\r
+        curl_version_info_data* data = curl_version_info (CURLVERSION_NOW);\r
+        jassert (data != nullptr);\r
+\r
+        String userAgent = String ("curl/") + data->version;\r
+\r
         if (curl_easy_setopt (curl, CURLOPT_URL, address.toRawUTF8()) == CURLE_OK\r
              && curl_easy_setopt (curl, CURLOPT_WRITEDATA, this) == CURLE_OK\r
              && curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, StaticCurlWrite) == CURLE_OK\r
-             && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast<long> (maxRedirects)) == CURLE_OK)\r
+             && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast<long> (maxRedirects)) == CURLE_OK\r
+             && curl_easy_setopt (curl, CURLOPT_USERAGENT, userAgent.toRawUTF8()) == CURLE_OK\r
+             && curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, (maxRedirects > 0 ? 1 : 0)) == CURLE_OK)\r
         {\r
             if (isPost)\r
             {\r
@@ -434,10 +441,17 @@ private:
 \r
         size_t len = size * nmemb;\r
 \r
-        curlHeaders += String (ptr, len);\r
+        String header (ptr, len);\r
+\r
+        if (! header.contains (":") && header.startsWithIgnoreCase ("HTTP/"))\r
+            curlHeaders.clear();\r
+        else\r
+            curlHeaders += header;\r
+\r
         return len;\r
     }\r
 \r
+\r
     //==============================================================================\r
     // Static method wrappers\r
     static size_t StaticCurlWrite (char* ptr, size_t size, size_t nmemb, void* userdata)\r
index 564ccc7ec0b9a899b267fd45f70063732db7ed9d..35d8629fcc1600a00b522a396bf77ad635608898 100644 (file)
@@ -218,7 +218,7 @@ File File::getSpecialLocation (const SpecialLocationType type)
 \r
             case invokedExecutableFile:\r
                 if (juce_argv != nullptr && juce_argc > 0)\r
-                    return File (CharPointer_UTF8 (juce_argv[0]));\r
+                    return File::getCurrentWorkingDirectory().getChildFile (CharPointer_UTF8 (juce_argv[0]));\r
                 // deliberate fall-through...\r
 \r
             case currentExecutableFile:\r
@@ -229,13 +229,13 @@ File File::getSpecialLocation (const SpecialLocationType type)
                 const File exe (juce_getExecutableFile());\r
                 const File parent (exe.getParentDirectory());\r
 \r
-              #if JUCE_IOS\r
+               #if JUCE_IOS\r
                 return parent;\r
-              #else\r
+               #else\r
                 return parent.getFullPathName().endsWithIgnoreCase ("Contents/MacOS")\r
                         ? parent.getParentDirectory().getParentDirectory()\r
                         : exe;\r
-              #endif\r
+               #endif\r
             }\r
 \r
             case hostApplicationPath:\r
index afde564fe6692972703b774cff73e2161840b146..64e9324efa13cb2b4deb478cb72ab67f461779c5 100644 (file)
@@ -130,12 +130,24 @@ public:
 \r
     ~URLConnectionState()\r
     {\r
-        stop();\r
-        [data release];\r
+        signalThreadShouldExit();\r
+\r
+        {\r
+            const ScopedLock sl (dataLock);\r
+            isBeingDeleted = true;\r
+            [task cancel];\r
+            DelegateClass::setState (delegate, nullptr);\r
+        }\r
+\r
+        stopThread (10000);\r
+        [task release];\r
         [request release];\r
         [headers release];\r
         [session release];\r
+\r
+        const ScopedLock sl (dataLock);\r
         [delegate release];\r
+        [data release];\r
     }\r
 \r
     bool start (URL::OpenStreamProgressCallback* callback, void* context)\r
@@ -145,7 +157,8 @@ public:
         while (isThreadRunning() && ! initialised)\r
         {\r
             if (callback != nullptr)\r
-                callback (context, (int) latestTotalBytes, (int) [[request HTTPBody] length]);\r
+                if (! callback (context, (int) latestTotalBytes, (int) [[request HTTPBody] length]))\r
+                    return false;\r
 \r
             Thread::sleep (1);\r
         }\r
@@ -153,18 +166,6 @@ public:
         return true;\r
     }\r
 \r
-    void stop()\r
-    {\r
-        {\r
-            const ScopedLock sl (dataLock);\r
-            [task cancel];\r
-        }\r
-\r
-        stopThread (10000);\r
-        [task release];\r
-        task = nil;\r
-    }\r
-\r
     int read (char* dest, int numBytes)\r
     {\r
         int numDone = 0;\r
@@ -199,6 +200,9 @@ public:
     {\r
         {\r
             const ScopedLock sl (dataLock);\r
+            if (isBeingDeleted)\r
+                return;\r
+\r
             [data setLength: 0];\r
         }\r
 \r
@@ -225,10 +229,18 @@ public:
         }\r
     }\r
 \r
-    void didBecomeInvalidWithError (NSError* error)\r
+    void didComplete (NSError* error)\r
     {\r
-        DBG (nsStringToJuce ([error description])); ignoreUnused (error);\r
-        hasFailed = true;\r
+        const ScopedLock sl (dataLock);\r
+        if (isBeingDeleted)\r
+            return;\r
+\r
+       #if JUCE_DEBUG\r
+        if (error != nullptr)\r
+            DBG (nsStringToJuce ([error description]));\r
+       #endif\r
+\r
+        hasFailed = (error != nullptr);\r
         initialised = true;\r
         signalThreadShouldExit();\r
     }\r
@@ -236,6 +248,9 @@ public:
     void didReceiveData (NSData* newData)\r
     {\r
         const ScopedLock sl (dataLock);\r
+        if (isBeingDeleted)\r
+            return;\r
+\r
         [data appendData: newData];\r
         initialised = true;\r
     }\r
@@ -245,10 +260,15 @@ public:
         latestTotalBytes = static_cast<int> (totalBytesWritten);\r
     }\r
 \r
-    void willPerformHTTPRedirection (NSURLRequest* aRequest, void (^completionHandler)(NSURLRequest *))\r
+    void willPerformHTTPRedirection (NSURLRequest* urlRequest, void (^completionHandler)(NSURLRequest *))\r
     {\r
-        NSURLRequest* newRequest = (numRedirects++ < numRedirectsToFollow ? aRequest : nullptr);\r
-        completionHandler (newRequest);\r
+        {\r
+            const ScopedLock sl (dataLock);\r
+            if (isBeingDeleted)\r
+                return;\r
+        }\r
+\r
+        completionHandler (numRedirects++ < numRedirectsToFollow ? urlRequest : nil);\r
     }\r
 \r
     void run() override\r
@@ -268,13 +288,8 @@ public:
         [task resume];\r
 \r
         while (! threadShouldExit())\r
-        {\r
             wait (5);\r
 \r
-            if (task.state != NSURLSessionTaskStateRunning)\r
-                break;\r
-        }\r
-\r
         hasFinished = true;\r
         initialised = true;\r
     }\r
@@ -288,7 +303,7 @@ public:
     NSMutableData* data = nil;\r
     NSDictionary* headers = nil;\r
     int statusCode = 0;\r
-    bool initialised = false, hasFailed = false, hasFinished = false;\r
+    bool initialised = false, hasFailed = false, hasFinished = false, isBeingDeleted = false;\r
     const int numRedirectsToFollow;\r
     int numRedirects = 0;\r
     int64 latestTotalBytes = 0;\r
@@ -309,6 +324,9 @@ private:
                                                                             didSendBodyData,           "v@:@@qqq");\r
             addMethod (@selector (URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:),\r
                                                                             willPerformHTTPRedirection, "v@:@@@@@");\r
+\r
+            addMethod (@selector (URLSession:task:didCompleteWithError:), didCompleteWithError,   "v@:@@@");\r
+\r
             registerClass();\r
         }\r
 \r
@@ -318,28 +336,33 @@ private:
     private:\r
         static void didReceiveResponse (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSURLResponse* response, id completionHandler)\r
         {\r
-            getState (self)->didReceiveResponse (response, completionHandler);\r
+            if (auto state = getState (self)) state->didReceiveResponse (response, completionHandler);\r
         }\r
 \r
         static void didBecomeInvalidWithError (id self, SEL, NSURLSession*, NSError* error)\r
         {\r
-            getState (self)->didBecomeInvalidWithError (error);\r
+            if (auto state = getState (self)) state->didComplete (error);\r
         }\r
 \r
         static void didReceiveData (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSData* newData)\r
         {\r
-            getState (self)->didReceiveData (newData);\r
+            if (auto state = getState (self)) state->didReceiveData (newData);\r
         }\r
 \r
         static void didSendBodyData (id self, SEL, NSURLSession*, NSURLSessionTask*, int64_t, int64_t totalBytesWritten, int64_t)\r
         {\r
-            getState (self)->didSendBodyData (totalBytesWritten);\r
+            if (auto state = getState (self)) state->didSendBodyData (totalBytesWritten);\r
         }\r
 \r
         static void willPerformHTTPRedirection (id self, SEL, NSURLSession*, NSURLSessionTask*, NSHTTPURLResponse*,\r
                                                 NSURLRequest* request, void (^completionHandler)(NSURLRequest *))\r
         {\r
-            getState (self)->willPerformHTTPRedirection (request, completionHandler);\r
+            if (auto state = getState (self)) state->willPerformHTTPRedirection (request, completionHandler);\r
+        }\r
+\r
+        static void didCompleteWithError (id self, SEL, NSURLConnection*, NSURLSessionTask*, NSError* error)\r
+        {\r
+            if (auto state = getState (self)) state->didComplete (error);\r
         }\r
     };\r
 \r
@@ -385,10 +408,10 @@ public:
     {\r
         stop();\r
         [connection release];\r
-        [data release];\r
         [request release];\r
         [headers release];\r
         [delegate release];\r
+        [data release];\r
     }\r
 \r
     bool start (URL::OpenStreamProgressCallback* callback, void* context)\r
@@ -398,7 +421,8 @@ public:
         while (isThreadRunning() && ! initialised)\r
         {\r
             if (callback != nullptr)\r
-                callback (context, latestTotalBytes, (int) [[request HTTPBody] length]);\r
+                if (! callback (context, latestTotalBytes, (int) [[request HTTPBody] length]))\r
+                    return false;\r
 \r
             Thread::sleep (1);\r
         }\r
index 033e4378b64e30b4377ba643417fced1fb68daad..5dd2888d4f33d98acf8197fc1faf6dff696c17d9 100644 (file)
@@ -440,6 +440,11 @@ bool File::moveInternal (const File& dest) const
     return false;\r
 }\r
 \r
+bool File::replaceInternal (const File& dest) const\r
+{\r
+    return moveInternal (dest);\r
+}\r
+\r
 Result File::createDirectoryInternal (const String& fileName) const\r
 {\r
     return getResultForReturnValue (mkdir (fileName.toUTF8(), 0777));\r
@@ -586,7 +591,7 @@ String SystemStats::getEnvironmentVariable (const String& name, const String& de
 }\r
 \r
 //==============================================================================\r
-void MemoryMappedFile::openInternal (const File& file, AccessMode mode)\r
+void MemoryMappedFile::openInternal (const File& file, AccessMode mode, bool exclusive)\r
 {\r
     jassert (mode == readOnly || mode == readWrite);\r
 \r
@@ -603,7 +608,7 @@ void MemoryMappedFile::openInternal (const File& file, AccessMode mode)
     {\r
         void* m = mmap (0, (size_t) range.getLength(),\r
                         mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ,\r
-                        MAP_SHARED, fileHandle,\r
+                        exclusive ? MAP_PRIVATE : MAP_SHARED, fileHandle,\r
                         (off_t) range.getStart());\r
 \r
         if (m != MAP_FAILED)\r
index 380e9d84393a4ae0af4e7ff1c8bfd833319255fa..d8c96c2c223fdf77c9ff73576fd94c295fffe3a8 100644 (file)
 #ifndef JUCE_WIN32_COMSMARTPTR_H_INCLUDED\r
 #define JUCE_WIN32_COMSMARTPTR_H_INCLUDED\r
 \r
-#if ! (defined (_MSC_VER) || defined (__uuidof))\r
+#if JUCE_MINGW || (! (defined (_MSC_VER) || defined (__uuidof)))\r
+#ifdef __uuidof\r
+ #undef __uuidof\r
+#endif\r
+\r
 template<typename Type> struct UUIDGetter { static CLSID get() { jassertfalse; return CLSID(); } };\r
 #define __uuidof(x)  UUIDGetter<x>::get()\r
+\r
+ template <>\r
+ struct UUIDGetter<::IUnknown>\r
+ {\r
+     static CLSID get()\r
+     {\r
+       GUID g = { 0, 0, 0, { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };\r
+       return g;\r
+     }\r
+ };\r
 #endif\r
 \r
 inline GUID uuidFromString (const char* const s) noexcept\r
@@ -135,7 +149,7 @@ protected:
 \r
     JUCE_COMRESULT QueryInterface (REFIID refId, void** result)\r
     {\r
-        if (refId == IID_IUnknown)\r
+        if (refId == __uuidof (IUnknown))\r
             return castToType <IUnknown> (result);\r
 \r
         *result = 0;\r
index 6983562499e93f90be23f5ab881cb7c02c4dec42..9edd8690a6b59e4ddd1cb69e46eacf4a29bd1bc1 100644 (file)
@@ -220,6 +220,15 @@ bool File::moveInternal (const File& dest) const
     return MoveFile (fullPath.toWideCharPointer(), dest.getFullPathName().toWideCharPointer()) != 0;\r
 }\r
 \r
+bool File::replaceInternal (const File& dest) const\r
+{\r
+    void* lpExclude = 0;\r
+    void* lpReserved = 0;\r
+\r
+    return ReplaceFile (dest.getFullPathName().toWideCharPointer(), fullPath.toWideCharPointer(),\r
+                        0, REPLACEFILE_IGNORE_MERGE_ERRORS, lpExclude, lpReserved) != 0;\r
+}\r
+\r
 Result File::createDirectoryInternal (const String& fileName) const\r
 {\r
     return CreateDirectory (fileName.toWideCharPointer(), 0) ? Result::ok()\r
@@ -325,7 +334,7 @@ Result FileOutputStream::truncate()
 }\r
 \r
 //==============================================================================\r
-void MemoryMappedFile::openInternal (const File& file, AccessMode mode)\r
+void MemoryMappedFile::openInternal (const File& file, AccessMode mode, bool exclusive)\r
 {\r
     jassert (mode == readOnly || mode == readWrite);\r
 \r
@@ -348,7 +357,8 @@ void MemoryMappedFile::openInternal (const File& file, AccessMode mode)
         access = FILE_MAP_ALL_ACCESS;\r
     }\r
 \r
-    HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode, FILE_SHARE_READ, 0,\r
+    HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode,\r
+                           exclusive ? 0 : (FILE_SHARE_READ | (mode == readWrite ? FILE_SHARE_WRITE : 0)), 0,\r
                            createType, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 0);\r
 \r
     if (h != INVALID_HANDLE_VALUE)\r
index e07e6a09fcfae1326c2d1f024ebe86dd45008fc6..beb8dcf43b9d62d5993bc6f38ec2519382db2e0d 100644 (file)
@@ -41,10 +41,28 @@ void Logger::outputDebugString (const String& text)
 #pragma intrinsic (__cpuid)\r
 #pragma intrinsic (__rdtsc)\r
 \r
+#if JUCE_MINGW\r
+static void callCPUID (int result[4], uint32 type)\r
+{\r
+  uint32 la = result[0], lb = result[1], lc = result[2], ld = result[3];\r
+\r
+  asm ("mov %%ebx, %%esi \n\t"\r
+       "cpuid \n\t"\r
+       "xchg %%esi, %%ebx"\r
+       : "=a" (la), "=S" (lb), "=c" (lc), "=d" (ld) : "a" (type)\r
+        #if JUCE_64BIT\r
+     , "b" (lb), "c" (lc), "d" (ld)\r
+        #endif\r
+       );\r
+\r
+  result[0] = la; result[1] = lb; result[2] = lc; result[3] = ld;\r
+}\r
+#else\r
 static void callCPUID (int result[4], int infoType)\r
 {\r
     __cpuid (result, infoType);\r
 }\r
+#endif\r
 \r
 String SystemStats::getCpuVendor()\r
 {\r
index 2350e8a135ae83de9e4991b32fc36fff34d171ff..46b1d3cf0445f523476fa22fdd0fe0271ec51f06 100644 (file)
@@ -222,6 +222,13 @@ int URL::getPort() const
     return colonPos > 0 ? url.substring (colonPos + 1).getIntValue() : 0;\r
 }\r
 \r
+URL URL::withNewDomainAndPath (const String& newURL) const\r
+{\r
+    URL u (*this);\r
+    u.url = newURL;\r
+    return u;\r
+}\r
+\r
 URL URL::withNewSubPath (const String& newPath) const\r
 {\r
     const int startOfPath = URLHelpers::findStartOfPath (url);\r
index a2b3cb765724a29f98788cfbaa58b626ed181f7c..c68afe16eee27641b8712699e339a0dd497c9e35 100644 (file)
@@ -106,10 +106,19 @@ public:
     */\r
     int getPort() const;\r
 \r
-    /** Returns a new version of this URL that uses a different sub-path.\r
+    /** Returns a new version of this URL with a different domain and path.\r
+\r
+        E.g. if the URL is "http://www.xyz.com/foo?x=1" and you call this with\r
+        "abc.com/zzz", it'll return "http://abc.com/zzz?x=1".\r
+        @see withNewSubPath\r
+    */\r
+    URL withNewDomainAndPath (const String& newFullPath) const;\r
+\r
+    /** Returns a new version of this URL with a different sub-path.\r
 \r
         E.g. if the URL is "http://www.xyz.com/foo?x=1" and you call this with\r
         "bar", it'll return "http://www.xyz.com/bar?x=1".\r
+        @see withNewDomainAndPath\r
     */\r
     URL withNewSubPath (const String& newPath) const;\r
 \r
@@ -274,7 +283,7 @@ public:
                                  if the parameter httpRequestCmd is not specified (or empty) then this\r
                                  parameter will determine which HTTP request command will be used\r
                                  (POST or GET).\r
-        @param progressCallback  if this is non-zero, it lets you supply a callback function\r
+        @param progressCallback  if this is not a nullptr, it lets you supply a callback function\r
                                  to keep track of the operation's progress. This can be useful\r
                                  for lengthy POST operations, so that you can provide user feedback.\r
         @param progressCallbackContext  if a callback is specified, this value will be passed to\r
index 2234f27e041f0e2ea61ed53c307e3ec9c1e67914..55d6ea60594925d1660525ac9ce1717815c5603e 100644 (file)
@@ -36,7 +36,7 @@
 */\r
 #define JUCE_MAJOR_VERSION      4\r
 #define JUCE_MINOR_VERSION      2\r
-#define JUCE_BUILDNUMBER        3\r
+#define JUCE_BUILDNUMBER        4\r
 \r
 /** Current Juce version number.\r
 \r
index 9edbb16562a9a923bdd7d5b7fada0d84730b9bb3..a451b386b0c516c8877cc6058821077305f5713b 100644 (file)
@@ -198,11 +198,9 @@ bool SystemStats::isRunningInAppExtensionSandbox() noexcept
     bundle = bundle.getParentDirectory().getParentDirectory();\r
    #endif\r
 \r
-    if (! bundle.isDirectory())\r
-        return false;\r
+    if (bundle.isDirectory())\r
+        return (bundle.getFileExtension() == ".appex");\r
+  #endif\r
 \r
-    return (bundle.getFileExtension() == ".appex");\r
-  #else\r
     return false;\r
-  #endif\r
 }\r
index 13975ed50e40b39caa3f774cdf5edbd8678fb5fe..b025dde5e04ff4328bc222273b1b6ab5913258b1 100644 (file)
@@ -237,7 +237,9 @@ private:
     }\r
 };\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const String String::empty;\r
+#endif\r
 \r
 //==============================================================================\r
 String::String() noexcept  : text (&(emptyString.text))\r
@@ -2270,7 +2272,7 @@ public:
             beginTest ("Basics");\r
 \r
             expect (String().length() == 0);\r
-            expect (String() == String::empty);\r
+            expect (String() == String());\r
             String s1, s2 ("abcd");\r
             expect (s1.isEmpty() && ! s1.isNotEmpty());\r
             expect (s2.isNotEmpty() && ! s2.isEmpty());\r
@@ -2282,16 +2284,16 @@ public:
             expect (String ("abcdefg", 4) == L"abcd");\r
             expect (String ("abcdefg", 4) == String (L"abcdefg", 4));\r
             expect (String::charToString ('x') == "x");\r
-            expect (String::charToString (0) == String::empty);\r
+            expect (String::charToString (0) == String());\r
             expect (s2 + "e" == "abcde" && s2 + 'e' == "abcde");\r
             expect (s2 + L'e' == "abcde" && s2 + L"e" == "abcde");\r
             expect (s1.equalsIgnoreCase ("abcD") && s1 < "abce" && s1 > "abbb");\r
             expect (s1.startsWith ("ab") && s1.startsWith ("abcd") && ! s1.startsWith ("abcde"));\r
             expect (s1.startsWithIgnoreCase ("aB") && s1.endsWithIgnoreCase ("CD"));\r
             expect (s1.endsWith ("bcd") && ! s1.endsWith ("aabcd"));\r
-            expectEquals (s1.indexOf (String::empty), 0);\r
-            expectEquals (s1.indexOfIgnoreCase (String::empty), 0);\r
-            expect (s1.startsWith (String::empty) && s1.endsWith (String::empty) && s1.contains (String::empty));\r
+            expectEquals (s1.indexOf (String()), 0);\r
+            expectEquals (s1.indexOfIgnoreCase (String()), 0);\r
+            expect (s1.startsWith (String()) && s1.endsWith (String()) && s1.contains (String()));\r
             expect (s1.contains ("cd") && s1.contains ("ab") && s1.contains ("abcd"));\r
             expect (s1.containsChar ('a'));\r
             expect (! s1.containsChar ('x'));\r
@@ -2472,9 +2474,9 @@ public:
             }\r
 \r
             beginTest ("Numeric conversions");\r
-            expect (String::empty.getIntValue() == 0);\r
-            expect (String::empty.getDoubleValue() == 0.0);\r
-            expect (String::empty.getFloatValue() == 0.0f);\r
+            expect (String().getIntValue() == 0);\r
+            expect (String().getDoubleValue() == 0.0);\r
+            expect (String().getFloatValue() == 0.0f);\r
             expect (s.getIntValue() == 12345678);\r
             expect (s.getLargeIntValue() == (int64) 12345678);\r
             expect (s.getDoubleValue() == 12345678.0);\r
@@ -2511,11 +2513,11 @@ public:
             expect (s3.containsAnyOf (String (L"zzzFs")));\r
             expect (s3.startsWith ("abcd"));\r
             expect (s3.startsWithIgnoreCase (String (L"abCD")));\r
-            expect (s3.startsWith (String::empty));\r
+            expect (s3.startsWith (String()));\r
             expect (s3.startsWithChar ('a'));\r
             expect (s3.endsWith (String ("HIJ")));\r
             expect (s3.endsWithIgnoreCase (String (L"Hij")));\r
-            expect (s3.endsWith (String::empty));\r
+            expect (s3.endsWith (String()));\r
             expect (s3.endsWithChar (L'J'));\r
             expect (s3.indexOf ("HIJ") == 7);\r
             expect (s3.indexOf (String (L"HIJK")) == -1);\r
@@ -2565,28 +2567,28 @@ public:
             expect (! String ("xx?y").matchesWildcard ("xx?y?", true));\r
             expect (String ("xx?y").matchesWildcard ("xx??", true));\r
 \r
-            expectEquals (s5.fromFirstOccurrenceOf (String::empty, true, false), s5);\r
+            expectEquals (s5.fromFirstOccurrenceOf (String(), true, false), s5);\r
             expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100));\r
             expectEquals (s5.fromFirstOccurrenceOf (String (L"word2"), true, false), s5.substring (5));\r
             expectEquals (s5.fromFirstOccurrenceOf ("Word2", true, true), s5.substring (5));\r
             expectEquals (s5.fromFirstOccurrenceOf ("word2", false, false), s5.getLastCharacters (6));\r
             expectEquals (s5.fromFirstOccurrenceOf ("Word2", false, true), s5.getLastCharacters (6));\r
 \r
-            expectEquals (s5.fromLastOccurrenceOf (String::empty, true, false), s5);\r
+            expectEquals (s5.fromLastOccurrenceOf (String(), true, false), s5);\r
             expectEquals (s5.fromLastOccurrenceOf ("wordx", true, false), s5);\r
             expectEquals (s5.fromLastOccurrenceOf ("word", true, false), s5.getLastCharacters (5));\r
             expectEquals (s5.fromLastOccurrenceOf ("worD", true, true), s5.getLastCharacters (5));\r
             expectEquals (s5.fromLastOccurrenceOf ("word", false, false), s5.getLastCharacters (1));\r
             expectEquals (s5.fromLastOccurrenceOf ("worD", false, true), s5.getLastCharacters (1));\r
 \r
-            expect (s5.upToFirstOccurrenceOf (String::empty, true, false).isEmpty());\r
+            expect (s5.upToFirstOccurrenceOf (String(), true, false).isEmpty());\r
             expectEquals (s5.upToFirstOccurrenceOf ("word4", true, false), s5);\r
             expectEquals (s5.upToFirstOccurrenceOf ("word2", true, false), s5.substring (0, 10));\r
             expectEquals (s5.upToFirstOccurrenceOf ("Word2", true, true), s5.substring (0, 10));\r
             expectEquals (s5.upToFirstOccurrenceOf ("word2", false, false), s5.substring (0, 5));\r
             expectEquals (s5.upToFirstOccurrenceOf ("Word2", false, true), s5.substring (0, 5));\r
 \r
-            expectEquals (s5.upToLastOccurrenceOf (String::empty, true, false), s5);\r
+            expectEquals (s5.upToLastOccurrenceOf (String(), true, false), s5);\r
             expectEquals (s5.upToLastOccurrenceOf ("zword", true, false), s5);\r
             expectEquals (s5.upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1));\r
             expectEquals (s5.dropLastCharacters(1).upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1));\r
@@ -2604,9 +2606,9 @@ public:
             expect (s5.replaceCharacters ("wo", "xy") != s5);\r
             expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", "wo"), s5);\r
             expectEquals (s5.retainCharacters ("1wordxya"), String ("wordwordword"));\r
-            expect (s5.retainCharacters (String::empty).isEmpty());\r
+            expect (s5.retainCharacters (String()).isEmpty());\r
             expect (s5.removeCharacters ("1wordxya") == " 2 3");\r
-            expectEquals (s5.removeCharacters (String::empty), s5);\r
+            expectEquals (s5.removeCharacters (String()), s5);\r
             expect (s5.initialSectionContainingOnly ("word") == L"word");\r
             expect (String ("word").initialSectionContainingOnly ("word") == L"word");\r
             expectEquals (s5.initialSectionNotContaining (String ("xyz ")), String ("word"));\r
@@ -2647,9 +2649,9 @@ public:
             expectEquals (s.joinIntoString ("-"), String ("4-3-2-1-0"));\r
             s.remove (2);\r
             expectEquals (s.joinIntoString ("--"), String ("4--3--1--0"));\r
-            expectEquals (s.joinIntoString (String::empty), String ("4310"));\r
+            expectEquals (s.joinIntoString (StringRef()), String ("4310"));\r
             s.clear();\r
-            expectEquals (s.joinIntoString ("x"), String::empty);\r
+            expectEquals (s.joinIntoString ("x"), String());\r
 \r
             StringArray toks;\r
             toks.addTokens ("x,,", ";,", "");\r
index e60bcbdefdab0b1aa3f9109e499ac8d8e6cb6b57..0a3b8bccaa7e84f7c6becf605d87fba881710d60 100644 (file)
@@ -147,13 +147,15 @@ public:
     ~String() noexcept;\r
 \r
     //==============================================================================\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
     /** This is a static empty string object that can be used if you need a reference to one.\r
         The value of String::empty is exactly the same as String(), and in almost all cases\r
-        it's better to avoid String::empty and just use String() instead, so that the compiler\r
+        it's better to avoid String::empty and just use String() or {} instead, so that the compiler\r
         only has to reason about locally-constructed objects, rather than taking into account\r
         the fact that you're referencing a global shared static memory address.\r
     */\r
     static const String empty;\r
+   #endif\r
 \r
     /** This is the character encoding type used internally to store the string.\r
 \r
index f31c8470b694661bf372f2a37df81052b9873167..3df28610f15b521e161d6c5450381c13c66af578 100644 (file)
@@ -127,7 +127,12 @@ const String& StringArray::operator[] (const int index) const noexcept
     if (isPositiveAndBelow (index, strings.size()))\r
         return strings.getReference (index);\r
 \r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
     return String::empty;\r
+   #else\r
+    static String empty;\r
+    return empty;\r
+   #endif\r
 }\r
 \r
 String& StringArray::getReference (const int index) noexcept\r
index a8bff4e7ee9bab22cd3a623a19f571001152e65e..5044780b123f61b7310ee557fdcbef1a208a96d6 100644 (file)
@@ -262,9 +262,9 @@ public:
 \r
         Random r = getRandom();\r
 \r
-        testDiff (String::empty, String::empty);\r
-        testDiff ("x", String::empty);\r
-        testDiff (String::empty, "x");\r
+        testDiff (String(), String());\r
+        testDiff ("x", String());\r
+        testDiff (String(), "x");\r
         testDiff ("x", "x");\r
         testDiff ("x", "y");\r
         testDiff ("xxx", "x");\r
index 3934215e57a8f3f0962d846f527bd203dab623c3..8d67a0107624e5ffb210e4b5c4562d9eae214f63 100644 (file)
@@ -237,8 +237,8 @@ public:
                                     methods called to try to interrupt them\r
         @param timeOutMilliseconds  the length of time this method should wait for all the jobs to finish\r
                                     before giving up and returning false\r
-        @param selectedJobsToRemove if this is non-zero, the JobSelector object is asked to decide which\r
-                                    jobs should be removed. If it is zero, all jobs are removed\r
+        @param selectedJobsToRemove if this is not a nullptr, the JobSelector object is asked to decide\r
+                                    which jobs should be removed. If it is a nullptr, all jobs are removed\r
         @returns    true if all jobs are successfully stopped and removed; false if the timeout period\r
                     expires while waiting for one or more jobs to stop\r
     */\r
index 5426636ac509d880693b725ca2727194e62f6954..7d279d88f2b272a757c75f80d259d14a6a2c0a81 100644 (file)
@@ -60,7 +60,7 @@ public:
         @param counterName      the name used when printing out the statistics\r
         @param runsPerPrintout  the number of start/stop iterations before calling\r
                                 printStatistics()\r
-        @param loggingFile      a file to dump the results to - if this is File::nonexistent,\r
+        @param loggingFile      a file to dump the results to - if this is File(),\r
                                 the results are just written to the debugger output\r
     */\r
     PerformanceCounter (const String& counterName,\r
index 5e636200d28515dcf8745c9c92129a9381ad5f42..73d4ccf21328a65391c9753672aabb7438f5fea8 100644 (file)
@@ -460,12 +460,22 @@ int XmlElement::getNumAttributes() const noexcept
     return attributes.size();\r
 }\r
 \r
+static const String& getEmptyStringRef() noexcept\r
+{\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    return String::empty;\r
+   #else\r
+    static String empty;\r
+    return empty;\r
+   #endif\r
+}\r
+\r
 const String& XmlElement::getAttributeName (const int index) const noexcept\r
 {\r
     if (const XmlAttributeNode* const att = attributes [index])\r
         return att->name.toString();\r
 \r
-    return String::empty;\r
+    return getEmptyStringRef();\r
 }\r
 \r
 const String& XmlElement::getAttributeValue (const int index) const noexcept\r
@@ -473,7 +483,7 @@ const String& XmlElement::getAttributeValue (const int index) const noexcept
     if (const XmlAttributeNode* const att = attributes [index])\r
         return att->value;\r
 \r
-    return String::empty;\r
+    return getEmptyStringRef();\r
 }\r
 \r
 XmlElement::XmlAttributeNode* XmlElement::getAttribute (StringRef attributeName) const noexcept\r
@@ -496,7 +506,7 @@ const String& XmlElement::getStringAttribute (StringRef attributeName) const noe
     if (const XmlAttributeNode* att = getAttribute (attributeName))\r
         return att->value;\r
 \r
-    return String::empty;\r
+    return getEmptyStringRef();\r
 }\r
 \r
 String XmlElement::getStringAttribute (StringRef attributeName, const String& defaultReturnValue) const\r
index 2d23c6b75d31851b3507362b0ca47ee8faed260b..e114aa7000c58b55d18fe544e3acb8050fb320ed 100644 (file)
@@ -457,8 +457,8 @@ public:
         Also, it's much easier and neater to use this method indirectly via the\r
         forEachXmlChildElement macro.\r
 \r
-        @returns    the sibling element that follows this one, or zero if this is the last\r
-                    element in its parent\r
+        @returns    the sibling element that follows this one, or a nullptr if\r
+                    this is the last element in its parent\r
 \r
         @see getNextElement, isTextElement, forEachXmlChildElement\r
     */\r
index b253eeb768dd7db111bf37e99a71531e31847876..84f7336dfd8bd5e814be72a90b68e69c538aac4a 100644 (file)
@@ -91,7 +91,7 @@ public:
     int getNumEntries() const noexcept;\r
 \r
     /** Returns a structure that describes one of the entries in the zip file.\r
-        This may return zero if the index is out of range.\r
+        This may return a nullptr if the index is out of range.\r
         @see ZipFile::ZipEntry\r
     */\r
     const ZipEntry* getEntry (int index) const noexcept;\r
@@ -120,7 +120,7 @@ public:
     /** Creates a stream that can read from one of the zip file's entries.\r
 \r
         The stream that is returned must be deleted by the caller (and\r
-        zero might be returned if a stream can't be opened for some reason).\r
+        a nullptr might be returned if a stream can't be opened for some reason).\r
 \r
         The stream must not be used after the ZipFile object that created\r
         has been deleted.\r
@@ -135,7 +135,7 @@ public:
     /** Creates a stream that can read from one of the zip file's entries.\r
 \r
         The stream that is returned must be deleted by the caller (and\r
-        zero might be returned if a stream can't be opened for some reason).\r
+        a nullptr might be returned if a stream can't be opened for some reason).\r
 \r
         The stream must not be used after the ZipFile object that created\r
         has been deleted.\r
index 047172a45e721705e38324c4bc2e69710a1804bd..67e76140783b8aeb8e6970b1f25481a66cf6cde1 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_cryptography\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE cryptography classes\r
   description:      Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.\r
   website:          http://www.juce.com/juce\r
index fd8b0c3260dd8937469af12d0b94f70899ec9928..67aa3128fb90c7675f0febc6aaea352cb60b3565 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_data_structures\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE data model helper classes\r
   description:      Classes for undo/redo management, and smart data structures.\r
   website:          http://www.juce.com/juce\r
index 4dc27b870ecfee73dd0c4843a6733992412b2a8b..819d55a1087869afca32545e79bbce7406ae73fa 100644 (file)
@@ -153,7 +153,8 @@ bool UndoManager::perform (UndoableAction* const newAction)
             actionSet->actions.add (action.release());\r
             newTransaction = false;\r
 \r
-            clearFutureTransactions();\r
+            moveFutureTransactionsToStash();\r
+            dropOldTransactionsIfTooLarge();\r
             sendChangeMessage();\r
             return true;\r
         }\r
@@ -162,14 +163,41 @@ bool UndoManager::perform (UndoableAction* const newAction)
     return false;\r
 }\r
 \r
-void UndoManager::clearFutureTransactions()\r
+void UndoManager::moveFutureTransactionsToStash()\r
+{\r
+    if (nextIndex < transactions.size())\r
+    {\r
+        stashedFutureTransactions.clear();\r
+\r
+        while (nextIndex < transactions.size())\r
+        {\r
+            ActionSet* removed = transactions.removeAndReturn (nextIndex);\r
+            stashedFutureTransactions.add (removed);\r
+            totalUnitsStored -= removed->getTotalSize();\r
+        }\r
+    }\r
+}\r
+\r
+void UndoManager::restoreStashedFutureTransactions()\r
 {\r
     while (nextIndex < transactions.size())\r
     {\r
-        totalUnitsStored -= transactions.getLast()->getTotalSize();\r
-        transactions.removeLast();\r
+        totalUnitsStored -= transactions.getUnchecked (nextIndex)->getTotalSize();\r
+        transactions.remove (nextIndex);\r
     }\r
 \r
+    for (int i = 0; i < stashedFutureTransactions.size(); ++i)\r
+    {\r
+        ActionSet* action = stashedFutureTransactions.removeAndReturn (i);\r
+        totalUnitsStored += action->getTotalSize();\r
+        transactions.add (action);\r
+    }\r
+\r
+    stashedFutureTransactions.clearQuick (false);\r
+}\r
+\r
+void UndoManager::dropOldTransactionsIfTooLarge()\r
+{\r
     while (nextIndex > 0\r
             && totalUnitsStored > maxNumUnitsToKeep\r
             && transactions.size() > minimumTransactionsToKeep)\r
@@ -290,7 +318,13 @@ Time UndoManager::getTimeOfRedoTransaction() const
 \r
 bool UndoManager::undoCurrentTransactionOnly()\r
 {\r
-    return newTransaction ? false : undo();\r
+    if ((! newTransaction) && undo())\r
+    {\r
+        restoreStashedFutureTransactions();\r
+        return true;\r
+    }\r
+\r
+    return false;\r
 }\r
 \r
 void UndoManager::getActionsInCurrentTransaction (Array<const UndoableAction*>& actionsFound) const\r
index 1e740eea3d541a9513ef7a103cd1c5537bbf7e4a..4bb9cf997f9525199250bb3d60f18d318b3cae9f 100644 (file)
@@ -229,13 +229,15 @@ private:
     //==============================================================================\r
     struct ActionSet;\r
     friend struct ContainerDeletePolicy<ActionSet>;\r
-    OwnedArray<ActionSet> transactions;\r
+    OwnedArray<ActionSet> transactions, stashedFutureTransactions;\r
     String newTransactionName;\r
     int totalUnitsStored, maxNumUnitsToKeep, minimumTransactionsToKeep, nextIndex;\r
     bool newTransaction, reentrancyCheck;\r
     ActionSet* getCurrentSet() const noexcept;\r
     ActionSet* getNextSet() const noexcept;\r
-    void clearFutureTransactions();\r
+    void moveFutureTransactionsToStash();\r
+    void restoreStashedFutureTransactions();\r
+    void dropOldTransactionsIfTooLarge();\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UndoManager)\r
 };\r
index 479dd7692fc0bb579b69e978767a9f6e97ef089d..c2bdd81e9d01c207ec2dba312952a5111e9ae259 100644 (file)
@@ -90,7 +90,7 @@ public:
         If possible, this method should create and return a single action that does the same job as\r
         this one followed by the supplied action.\r
 \r
-        If it's not possible to merge the two actions, the method should return zero.\r
+        If it's not possible to merge the two actions, the method should return a nullptr.\r
     */\r
     virtual UndoableAction* createCoalescedAction (UndoableAction* nextAction)  { ignoreUnused (nextAction); return nullptr; }\r
 };\r
index becf90cb9ef526088410dde10ad83828c1a092a5..5ef337349441c8541fa01f59cd1686ef1e15acd6 100644 (file)
@@ -149,4 +149,4 @@ public:
 \r
 static CachedValueTests cachedValueTests;\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index a76a0c48c9129086cdaacc32308841e0441b03a8..51b041ca2acbfa1c3897ce62a33c43332657cd36 100644 (file)
@@ -627,7 +627,9 @@ ValueTree::ValueTree() noexcept
 {\r
 }\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const ValueTree ValueTree::invalid;\r
+#endif\r
 \r
 ValueTree::ValueTree (const Identifier& type)  : object (new ValueTree::SharedObject (type))\r
 {\r
@@ -721,20 +723,30 @@ ValueTree ValueTree::getParent() const noexcept
 ValueTree ValueTree::getSibling (const int delta) const noexcept\r
 {\r
     if (object == nullptr || object->parent == nullptr)\r
-        return invalid;\r
+        return ValueTree();\r
 \r
     const int index = object->parent->indexOf (*this) + delta;\r
     return ValueTree (object->parent->children.getObjectPointer (index));\r
 }\r
 \r
+static const var& getNullVarRef() noexcept\r
+{\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    return var::null;\r
+   #else\r
+    static var nullVar;\r
+    return nullVar;\r
+   #endif\r
+}\r
+\r
 const var& ValueTree::operator[] (const Identifier& name) const noexcept\r
 {\r
-    return object == nullptr ? var::null : object->properties[name];\r
+    return object == nullptr ? getNullVarRef() : object->properties[name];\r
 }\r
 \r
 const var& ValueTree::getProperty (const Identifier& name) const noexcept\r
 {\r
-    return object == nullptr ? var::null : object->properties[name];\r
+    return object == nullptr ? getNullVarRef() : object->properties[name];\r
 }\r
 \r
 var ValueTree::getProperty (const Identifier& name, const var& defaultReturnValue) const\r
@@ -858,6 +870,29 @@ ValueTree ValueTree::getChild (int index) const
                                         : static_cast<SharedObject*> (nullptr));\r
 }\r
 \r
+ValueTree::Iterator::Iterator (const ValueTree& v, bool isEnd) noexcept\r
+   : internal (v.object != nullptr ? (isEnd ? v.object->children.end() : v.object->children.begin()) : nullptr)\r
+{}\r
+\r
+ValueTree::Iterator& ValueTree::Iterator::operator++() noexcept\r
+{\r
+    internal = static_cast<SharedObject**> (internal) + 1;\r
+    return *this;\r
+}\r
+\r
+bool ValueTree::Iterator::operator!= (const Iterator& other) const noexcept\r
+{\r
+    return internal != other.internal;\r
+}\r
+\r
+ValueTree ValueTree::Iterator::operator*() const\r
+{\r
+    return ValueTree (*static_cast<SharedObject**> (internal));\r
+}\r
+\r
+ValueTree::Iterator ValueTree::begin() const noexcept   { return Iterator (*this, false); }\r
+ValueTree::Iterator ValueTree::end() const noexcept     { return Iterator (*this, true); }\r
+\r
 ValueTree ValueTree::getChildWithName (const Identifier& type) const\r
 {\r
     return object != nullptr ? object->getChildWithName (type) : ValueTree();\r
index edb611ddf7a9d809118a877e900548e4dc948f75..52bb8d3c6376d50369d813eda8bd3baed6018481 100644 (file)
@@ -328,6 +328,25 @@ public:
     */\r
     ValueTree getSibling (int delta) const noexcept;\r
 \r
+    //==============================================================================\r
+    struct Iterator\r
+    {\r
+        Iterator (const ValueTree&, bool isEnd) noexcept;\r
+        Iterator& operator++() noexcept;\r
+\r
+        bool operator!= (const Iterator&) const noexcept;\r
+        ValueTree operator*() const;\r
+\r
+    private:\r
+        void* internal;\r
+    };\r
+\r
+    /** Returns a start iterator for the children in this tree. */\r
+    Iterator begin() const noexcept;\r
+\r
+    /** Returns an end iterator for the children in this tree. */\r
+    Iterator end() const noexcept;\r
+\r
     //==============================================================================\r
     /** Creates an XmlElement that holds a complete image of this node and all its children.\r
 \r
@@ -504,10 +523,13 @@ public:
         }\r
     }\r
 \r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
     /** An invalid ValueTree that can be used if you need to return one as an error condition, etc.\r
-        This invalid object is equivalent to ValueTree created with its default constructor.\r
+        This invalid object is equivalent to ValueTree created with its default constructor, but\r
+        you should always prefer to avoid it and use ValueTree() or {} instead.\r
     */\r
     static const ValueTree invalid;\r
+   #endif\r
 \r
     /** Returns the total number of references to the shared underlying data structure that this\r
         ValueTree is using.\r
index b2e6c5e467b31a7dc8d2527b48becd8f3f15e550..fec2a4f9ef52f2aac92f077d3c80f03e916d6780 100644 (file)
 \r
   ID:               juce_events\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE message and event handling classes\r
   description:      Classes for running an application's main event loop and sending/receiving messages, timers, etc.\r
   website:          http://www.juce.com/juce\r
   license:          GPL/Commercial\r
 \r
   dependencies:     juce_core\r
-  linuxLibs:        X11\r
+  linuxPackages:    x11\r
 \r
  END_JUCE_MODULE_DECLARATION\r
 \r
index f130bf41990e1b0e642cb4606bf1b927a5243808..5a2e3c3742cf6f9e04b0e93c0c8dfeeb304ff5e5 100644 (file)
@@ -257,13 +257,17 @@ bool JUCEApplicationBase::initialiseApp()
     }\r
    #endif\r
 \r
-   #if JUCE_WINDOWS && JUCE_STANDALONE_APPLICATION && ! defined (_CONSOLE)\r
+   #if JUCE_WINDOWS && JUCE_STANDALONE_APPLICATION && (! defined (_CONSOLE)) && (! JUCE_MINGW)\r
     if (AttachConsole (ATTACH_PARENT_PROCESS) != 0)\r
     {\r
         // if we've launched a GUI app from cmd.exe or PowerShell, we need this to enable printf etc.\r
-        freopen("CON", "w", stdout);\r
-        freopen("CON", "w", stderr);\r
-        freopen("CON", "r", stdin);\r
+        // However, only reassign stdout, stderr, stdin if they have not been already opened by\r
+        // a redirect or similar.\r
+        FILE* ignore;\r
+\r
+        if (_fileno(stdout) < 0) freopen_s (&ignore, "CONOUT$", "w", stdout);\r
+        if (_fileno(stderr) < 0) freopen_s (&ignore, "CONOUT$", "w", stderr);\r
+        if (_fileno(stdin)  < 0) freopen_s (&ignore, "CONIN$",  "r", stdin);\r
     }\r
    #endif\r
 \r
index 98205394fd83527dbbd43252a68bb6416ba48aeb..52b428be224059ee6b23272f1f95dc11dc42bbec 100644 (file)
@@ -462,7 +462,7 @@ public:
     //==============================================================================\r
     /** Types of rendering quality that can be specified when drawing images.\r
 \r
-        @see blendImage, Graphics::setImageResamplingQuality\r
+        @see Graphics::setImageResamplingQuality\r
     */\r
     enum ResamplingQuality\r
     {\r
index a4c1a7e4939eb2cd8e343cef058cfcb3ca7634a5..f58fe3156233298dd71cfd5bc35100cafde24719 100644 (file)
@@ -79,7 +79,9 @@ bool AffineTransform::isIdentity() const noexcept
         && (mat11 == 1.0f);\r
 }\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const AffineTransform AffineTransform::identity;\r
+#endif\r
 \r
 //==============================================================================\r
 AffineTransform AffineTransform::followedBy (const AffineTransform& other) const noexcept\r
index 77bb8ab7bbc866277dbec043c4e776ebc2cf47e3..7562aedbe01651f4275fe404ff1d772c461339b5 100644 (file)
@@ -67,15 +67,13 @@ public:
     /** Compares two transforms. */\r
     bool operator!= (const AffineTransform& other) const noexcept;\r
 \r
-    /** A ready-to-use identity transform, which you can use to append other\r
-        transformations to.\r
-\r
-        e.g. @code\r
-        AffineTransform myTransform = AffineTransform().rotated (.5f)\r
-                                                       .scaled (2.0f);\r
-        @endcode\r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
+    /** A ready-to-use identity transform.\r
+        Note that you should always avoid using a static variable like this, and\r
+        prefer AffineTransform() or {} if you need a default-constructed instance.\r
     */\r
     static const AffineTransform identity;\r
+   #endif\r
 \r
     //==============================================================================\r
     /** Transforms a 2D coordinate using this matrix. */\r
index a6dfadf378d96cb183f76b03c24f45185e06fc84..3223f836fd87d34377e83ab40b16bc40458e7aa5 100644 (file)
@@ -50,23 +50,20 @@ public:
 \r
     /** Creates a copy of another line. */\r
     Line (const Line& other) noexcept\r
-        : start (other.start),\r
-          end (other.end)\r
+        : start (other.start), end (other.end)\r
     {\r
     }\r
 \r
     /** Creates a line based on the coordinates of its start and end points. */\r
     Line (ValueType startX, ValueType startY, ValueType endX, ValueType endY) noexcept\r
-        : start (startX, startY),\r
-          end (endX, endY)\r
+        : start (startX, startY), end (endX, endY)\r
     {\r
     }\r
 \r
     /** Creates a line from its start and end points. */\r
-    Line (const Point<ValueType> startPoint,\r
-          const Point<ValueType> endPoint) noexcept\r
-        : start (startPoint),\r
-          end (endPoint)\r
+    Line (Point<ValueType> startPoint,\r
+          Point<ValueType> endPoint) noexcept\r
+        : start (startPoint), end (endPoint)\r
     {\r
     }\r
 \r
@@ -113,7 +110,7 @@ public:
     void setEnd (const Point<ValueType> newEnd) noexcept                    { end = newEnd; }\r
 \r
     /** Returns a line that is the same as this one, but with the start and end reversed, */\r
-    const Line reversed() const noexcept                                    { return Line (end, start); }\r
+    Line reversed() const noexcept                                          { return Line (end, start); }\r
 \r
     /** Applies an affine transform to the line's start and end points. */\r
     void applyTransform (const AffineTransform& transform) noexcept\r
@@ -142,6 +139,17 @@ public:
     */\r
     typename Point<ValueType>::FloatType getAngle() const noexcept          { return start.getAngleToPoint (end); }\r
 \r
+    /** Creates a line from a start point, length and angle.\r
+\r
+        This angle is the number of radians clockwise from the 12 o'clock direction,\r
+        where the line's start point is considered to be at the centre.\r
+    */\r
+    static Line fromStartAndAngle (Point<ValueType> startPoint, ValueType length, ValueType angle) noexcept\r
+    {\r
+        return Line (startPoint, startPoint.getPointOnCircumference (length, angle));\r
+    }\r
+\r
+    //==============================================================================\r
     /** Casts this line to float coordinates. */\r
     Line<float> toFloat() const noexcept                                    { return Line<float> (start.toFloat(), end.toFloat()); }\r
 \r
@@ -150,10 +158,10 @@ public:
 \r
     //==============================================================================\r
     /** Compares two lines. */\r
-    bool operator== (const Line& other) const noexcept                      { return start == other.start && end == other.end; }\r
+    bool operator== (Line other) const noexcept                             { return start == other.start && end == other.end; }\r
 \r
     /** Compares two lines. */\r
-    bool operator!= (const Line& other) const noexcept                      { return start != other.start || end != other.end; }\r
+    bool operator!= (Line other) const noexcept                             { return start != other.start || end != other.end; }\r
 \r
     //==============================================================================\r
     /** Finds the intersection between two lines.\r
@@ -161,7 +169,7 @@ public:
         @param line     the line to intersect with\r
         @returns        the point at which the lines intersect, even if this lies beyond the end of the lines\r
     */\r
-    Point<ValueType> getIntersection (const Line& line) const noexcept\r
+    Point<ValueType> getIntersection (Line line) const noexcept\r
     {\r
         Point<ValueType> p;\r
         findIntersection (start, end, line.start, line.end, p);\r
@@ -180,13 +188,13 @@ public:
                     don't intersect, the intersection coordinates returned will still\r
                     be valid\r
     */\r
-    bool intersects (const Line& line, Point<ValueType>& intersection) const noexcept\r
+    bool intersects (Line line, Point<ValueType>& intersection) const noexcept\r
     {\r
         return findIntersection (start, end, line.start, line.end, intersection);\r
     }\r
 \r
     /** Returns true if this line intersects another. */\r
-    bool intersects (const Line& other) const noexcept\r
+    bool intersects (Line other) const noexcept\r
     {\r
         Point<ValueType> ignored;\r
         return findIntersection (start, end, other.start, other.end, ignored);\r
@@ -257,7 +265,7 @@ public:
         @returns the point's distance from the line\r
         @see getPositionAlongLineOfNearestPoint\r
     */\r
-    ValueType getDistanceFromPoint (const Point<ValueType> targetPoint,\r
+    ValueType getDistanceFromPoint (Point<ValueType> targetPoint,\r
                                     Point<ValueType>& pointOnLine) const noexcept\r
     {\r
         const Point<ValueType> delta (end - start);\r
@@ -298,7 +306,7 @@ public:
                     turn this number into a position, use getPointAlongLineProportionally().\r
         @see getDistanceFromPoint, getPointAlongLineProportionally\r
     */\r
-    ValueType findNearestProportionalPositionTo (const Point<ValueType> point) const noexcept\r
+    ValueType findNearestProportionalPositionTo (Point<ValueType> point) const noexcept\r
     {\r
         const Point<ValueType> delta (end - start);\r
         const double length = delta.x * delta.x + delta.y * delta.y;\r
@@ -312,7 +320,7 @@ public:
     /** Finds the point on this line which is nearest to a given point.\r
         @see getDistanceFromPoint, findNearestProportionalPositionTo\r
     */\r
-    Point<ValueType> findNearestPointTo (const Point<ValueType> point) const noexcept\r
+    Point<ValueType> findNearestPointTo (Point<ValueType> point) const noexcept\r
     {\r
         return getPointAlongLineProportionally (findNearestProportionalPositionTo (point));\r
     }\r
@@ -323,7 +331,7 @@ public:
         coordinate of this line at the given x (assuming the line extends infinitely\r
         in both directions).\r
     */\r
-    bool isPointAbove (const Point<ValueType> point) const noexcept\r
+    bool isPointAbove (Point<ValueType> point) const noexcept\r
     {\r
         return start.x != end.x\r
                 && point.y < ((end.y - start.y)\r
@@ -380,19 +388,22 @@ private:
                     intersection = p1.withX (p3.x + along * d2.x);\r
                     return along >= 0 && along <= static_cast<ValueType> (1);\r
                 }\r
-                else if (d2.y == 0 && d1.y != 0)\r
+\r
+                if (d2.y == 0 && d1.y != 0)\r
                 {\r
                     const ValueType along = (p3.y - p1.y) / d1.y;\r
                     intersection = p3.withX (p1.x + along * d1.x);\r
                     return along >= 0 && along <= static_cast<ValueType> (1);\r
                 }\r
-                else if (d1.x == 0 && d2.x != 0)\r
+\r
+                if (d1.x == 0 && d2.x != 0)\r
                 {\r
                     const ValueType along = (p1.x - p3.x) / d2.x;\r
                     intersection = p1.withY (p3.y + along * d2.y);\r
                     return along >= 0 && along <= static_cast<ValueType> (1);\r
                 }\r
-                else if (d2.x == 0 && d1.x != 0)\r
+\r
+                if (d2.x == 0 && d1.x != 0)\r
                 {\r
                     const ValueType along = (p3.x - p1.x) / d1.x;\r
                     intersection = p3.withY (p1.y + along * d1.y);\r
index 8f00a8110edae5c623f10e828c29f2440048109d..d37062c6dce8cc2f7410ac5ae1fd9223e8ed2a0e 100644 (file)
@@ -538,6 +538,53 @@ public:
         return r;\r
     }\r
 \r
+    //==============================================================================\r
+    /** Returns the nearest point to the specified point that lies within this rectangle. */\r
+    Point<ValueType> getConstrainedPoint (Point<ValueType> point) const noexcept\r
+    {\r
+        return Point<ValueType> (jlimit (pos.x, pos.x + w, point.x),\r
+                                 jlimit (pos.y, pos.y + h, point.y));\r
+    }\r
+\r
+    /** Returns a point within this rectangle, specified as proportional coordinates.\r
+        The relative X and Y values should be between 0 and 1, where 0 is the left or\r
+        top of this rectangle, and 1 is the right or bottom. (Out-of-bounds values\r
+        will return a point outside the rectangle).\r
+    */\r
+    template <typename FloatType>\r
+    Point<ValueType> getRelativePoint (FloatType relativeX, FloatType relativeY) const noexcept\r
+    {\r
+        return Point<ValueType> (pos.x + static_cast<ValueType> (w * relativeX),\r
+                                 pos.y + static_cast<ValueType> (h * relativeY));\r
+    }\r
+\r
+    /** Returns a proportion of the width of this rectangle. */\r
+    template <typename FloatType>\r
+    ValueType proportionOfWidth (FloatType proportion) const noexcept\r
+    {\r
+        return static_cast<ValueType> (w * proportion);\r
+    }\r
+\r
+    /** Returns a proportion of the height of this rectangle. */\r
+    template <typename FloatType>\r
+    ValueType proportionOfHeight (FloatType proportion) const noexcept\r
+    {\r
+        return static_cast<ValueType> (h * proportion);\r
+    }\r
+\r
+    /** Returns a rectangle based on some proportional coordinates relative to this one.\r
+        So for example getProportion ({ 0.25f, 0.25f, 0.5f, 0.5f }) would return a rectangle\r
+        of half the original size, with the same centre.\r
+    */\r
+    template <typename FloatType>\r
+    Rectangle getProportion (Rectangle<FloatType> proportionalRect) const noexcept\r
+    {\r
+        return Rectangle (pos.x + static_cast<ValueType> (w * proportionalRect.pos.x),\r
+                          pos.y + static_cast<ValueType> (h * proportionalRect.pos.y),\r
+                          proportionOfWidth  (proportionalRect.w),\r
+                          proportionOfHeight (proportionalRect.h));\r
+    }\r
+\r
     //==============================================================================\r
     /** Returns true if the two rectangles are identical. */\r
     bool operator== (const Rectangle& other) const noexcept     { return pos == other.pos && w == other.w && h == other.h; }\r
@@ -564,24 +611,6 @@ public:
             && pos.x + w >= other.pos.x + other.w && pos.y + h >= other.pos.y + other.h;\r
     }\r
 \r
-    /** Returns the nearest point to the specified point that lies within this rectangle. */\r
-    Point<ValueType> getConstrainedPoint (Point<ValueType> point) const noexcept\r
-    {\r
-        return Point<ValueType> (jlimit (pos.x, pos.x + w, point.x),\r
-                                 jlimit (pos.y, pos.y + h, point.y));\r
-    }\r
-\r
-    /** Returns a point within this rectangle, specified as proportional coordinates.\r
-        The relative X and Y values should be between 0 and 1, where 0 is the left or\r
-        top of this rectangle, and 1 is the right or bottom. (Out-of-bounds values\r
-        will return a point outside the rectangle).\r
-    */\r
-    Point<ValueType> getRelativePoint (double relativeX, double relativeY) const noexcept\r
-    {\r
-        return Point<ValueType> (pos.x + static_cast<ValueType> (w * relativeX),\r
-                                 pos.y + static_cast<ValueType> (h * relativeY));\r
-    }\r
-\r
     /** Returns true if any part of another rectangle overlaps this one. */\r
     bool intersects (const Rectangle& other) const noexcept\r
     {\r
index 2bf79eb8d6b1b18c0e30aa51b7c94035c14e9624..4e6f4c634087fda2f1d9997aed9606c47e7f609e 100644 (file)
@@ -259,7 +259,9 @@ Image::~Image()
 {\r
 }\r
 \r
+#if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
 const Image Image::null;\r
+#endif\r
 \r
 int Image::getReferenceCount() const noexcept           { return image == nullptr ? 0 : image->getSharedCount(); }\r
 int Image::getWidth() const noexcept                    { return image == nullptr ? 0 : image->width; }\r
index d246739c12e25a52093511185be68695ec6d7ab8..e817cc7f4f2005e54423e73bac60b8b2cf843470 100644 (file)
@@ -146,10 +146,13 @@ public:
     */\r
     inline bool isNull() const noexcept                     { return image == nullptr; }\r
 \r
+   #if JUCE_ALLOW_STATIC_NULL_VARIABLES\r
     /** A null Image object that can be used when you need to return an invalid image.\r
-        This object is the equivalient to an Image created with the default constructor.\r
+        This object is the equivalient to an Image created with the default constructor, and\r
+        you should always prefer to use Image() or {} when you need an empty image object.\r
     */\r
     static const Image null;\r
+   #endif\r
 \r
     //==============================================================================\r
     /** Returns the image's width (in pixels). */\r
index e367bde038f4be2570867b6c548fe76f61ae38f9..7c3dbe101af94fb3986d1cdee87737039a144396 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_graphics\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE graphics classes\r
   description:      Classes for 2D vector graphics, image loading/saving, font handling, etc.\r
   website:          http://www.juce.com/juce\r
@@ -42,7 +42,7 @@
   dependencies:     juce_events\r
   OSXFrameworks:    Cocoa QuartzCore\r
   iOSFrameworks:    CoreGraphics CoreText QuartzCore\r
-  linuxLibs:        X11 Xinerama Xext freetype\r
+  linuxPackages:    x11 xinerama xext freetype2\r
 \r
  END_JUCE_MODULE_DECLARATION\r
 \r
index e33ab2677d7b13796cb5d09416cc67f951db3709..81a49d39d8f9969160db19448ce434734d4225bc 100644 (file)
@@ -175,8 +175,15 @@ void Button::setToggleState (const bool shouldBeOn, const NotificationType notif
                 return;\r
         }\r
 \r
-        if (getToggleState() != shouldBeOn)  // this test means that if the value is void rather than explicitly set to\r
-            isOn = shouldBeOn;               // false, it won't be changed unless the required value is true.\r
+        // This test is done so that if the value is void rather than explicitly set to\r
+        // false, the value won't be changed unless the required value is true.\r
+        if (getToggleState() != shouldBeOn)\r
+        {\r
+            isOn = shouldBeOn;\r
+\r
+            if (deletionWatcher == nullptr)\r
+                return;\r
+        }\r
 \r
         lastToggleState = shouldBeOn;\r
         repaint();\r
@@ -456,7 +463,7 @@ void Button::mouseUp (const MouseEvent& e)
 {\r
     const bool wasDown = isDown();\r
     const bool wasOver = isOver();\r
-    updateState (isMouseOver(), false);\r
+    updateState (isMouseOrTouchOver (e), false);\r
 \r
     if (wasDown && wasOver && ! triggerOnMouseDown)\r
     {\r
@@ -467,15 +474,23 @@ void Button::mouseUp (const MouseEvent& e)
     }\r
 }\r
 \r
-void Button::mouseDrag (const MouseEvent&)\r
+void Button::mouseDrag (const MouseEvent& e)\r
 {\r
     const ButtonState oldState = buttonState;\r
-    updateState (isMouseOver(), true);\r
+    updateState (isMouseOrTouchOver (e), true);\r
 \r
     if (autoRepeatDelay >= 0 && buttonState != oldState && isDown())\r
         callbackHelper->startTimer (autoRepeatSpeed);\r
 }\r
 \r
+bool Button::isMouseOrTouchOver (const MouseEvent& e)\r
+{\r
+    if (e.source.isTouch())\r
+        return getLocalBounds().toFloat().contains (e.position);\r
+\r
+    return isMouseOver();\r
+}\r
+\r
 void Button::focusGained (FocusChangeType)\r
 {\r
     updateState();\r
index 39d0d5a70d196de6190adb1ee7e36663f263abbb..47c6fab549ca5dc03cc4bbf234a38bd9e1f706fb 100644 (file)
@@ -503,6 +503,8 @@ private:
     void sendClickMessage (const ModifierKeys&);\r
     void sendStateMessage();\r
 \r
+    bool isMouseOrTouchOver (const MouseEvent& e);\r
+\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Button)\r
 };\r
 \r
index d2da022f96a650ef25795ededf348ec0f9f9251c..dd52f6f21f1248f630ea68fa40b638cf3b8cb8ce 100644 (file)
@@ -35,7 +35,7 @@ HyperlinkButton::HyperlinkButton (const String& linkText,
 }\r
 \r
 HyperlinkButton::HyperlinkButton()\r
-   : Button (String::empty),\r
+   : Button (String()),\r
      font (14.0f, Font::underlined),\r
      resizeFont (true),\r
      justification (Justification::centred)\r
index fed3cad400de404bb9d013e964647ba2a795cb8e..e2669800d9ee4a53eed0074bfceb45d423256d68 100644 (file)
@@ -46,7 +46,7 @@ public:
 \r
         @param name                 the name to give the component\r
     */\r
-    explicit ImageButton (const String& name = String::empty);\r
+    explicit ImageButton (const String& name = String());\r
 \r
     /** Destructor. */\r
     ~ImageButton();\r
index c9a68d732de7a6702c4d625101c448ab8ed16023..fd838075b72b98577713ebfff7cbe4d3483d4dae 100644 (file)
@@ -23,7 +23,7 @@
 */\r
 \r
 ToggleButton::ToggleButton()\r
-    : Button (String::empty)\r
+    : Button (String())\r
 {\r
     setClickingTogglesState (true);\r
 }\r
index f96dadccfcef1bfdfb02bd777e2451e9e881edff..3f13fbbe9e6f02f4e95236a4bfef326d5bbd7695 100644 (file)
@@ -805,7 +805,7 @@ public:
             if (! owner.isOpaque())\r
             {\r
                 lg.setFill (Colours::transparentBlack);\r
-                lg.fillRect (imageBounds, true);\r
+                lg.fillRect (compBounds, true);\r
                 lg.setFill (Colours::black);\r
             }\r
 \r
@@ -2489,7 +2489,7 @@ void Component::internalMouseDown (MouseInputSource source, Point<float> relativ
 }\r
 \r
 void Component::internalMouseUp (MouseInputSource source, Point<float> relativePos,\r
-                                 Time time, const ModifierKeys oldModifiers)\r
+                                 Time time, const ModifierKeys oldModifiers, float pressure)\r
 {\r
     if (flags.mouseDownWasBlocked && isCurrentlyBlockedByAnotherModalComponent())\r
         return;\r
@@ -2500,7 +2500,7 @@ void Component::internalMouseUp (MouseInputSource source, Point<float> relativeP
         repaint();\r
 \r
     const MouseEvent me (source, relativePos,\r
-                         oldModifiers, MouseInputSource::invalidPressure, this, this, time,\r
+                         oldModifiers, pressure, this, this, time,\r
                          getLocalPoint (nullptr, source.getLastMouseDownPosition()),\r
                          source.getLastMouseDownTime(),\r
                          source.getNumberOfMultipleClicks(),\r
index 4f7750f42db2d6e005a842059fd0127d2b452568..3852448e297299a85f5b82a06409cb4d234592d7 100644 (file)
@@ -2301,7 +2301,7 @@ private:
     void internalMouseEnter (MouseInputSource, Point<float>, Time);\r
     void internalMouseExit  (MouseInputSource, Point<float>, Time);\r
     void internalMouseDown  (MouseInputSource, Point<float>, Time, float);\r
-    void internalMouseUp    (MouseInputSource, Point<float>, Time, const ModifierKeys oldModifiers);\r
+    void internalMouseUp    (MouseInputSource, Point<float>, Time, const ModifierKeys oldModifiers, float);\r
     void internalMouseDrag  (MouseInputSource, Point<float>, Time, float);\r
     void internalMouseMove  (MouseInputSource, Point<float>, Time);\r
     void internalMouseWheel (MouseInputSource, Point<float>, Time, const MouseWheelDetails&);\r
index 26cc3c9d59306ebd5a5b24894c85bf92fa7d38f0..1a591b482009a33a875690b6a98db7e48ac0b59f 100644 (file)
@@ -36,6 +36,7 @@ Desktop::Desktop()
 Desktop::~Desktop()\r
 {\r
     setScreenSaverEnabled (true);\r
+    animator.cancelAllAnimations (false);\r
 \r
     jassert (instance == this);\r
     instance = nullptr;\r
index 034953bc409e5ddf0154e298070bcdb1700b13bb..c9cb67b40b40807ad032ff8b114695674992f25e 100644 (file)
@@ -31,6 +31,7 @@ DrawableRectangle::DrawableRectangle (const DrawableRectangle& other)
       bounds (other.bounds),\r
       cornerSize (other.cornerSize)\r
 {\r
+    rebuildPath();\r
 }\r
 \r
 DrawableRectangle::~DrawableRectangle()\r
index 2c015de8320ab97451196a7032199b4770db7761..3e2258febb5df25275de4708cd2549480989fa31 100644 (file)
@@ -179,7 +179,7 @@ public:
     /** Returns one of the files in the list.\r
 \r
         @param index    should be less than getNumFiles(). If this is out-of-range, the\r
-                        return value will be File::nonexistent\r
+                        return value will be a default File() object\r
         @see getNumFiles, getFileInfo\r
     */\r
     File getFile (int index) const;\r
index afe498a22633fa92202a5925302364d98906f79c..6c6e57f6fd1b0b495ff879eb5af8246929a99ef8 100644 (file)
@@ -26,7 +26,7 @@ FileBrowserComponent::FileBrowserComponent (int flags_,
                                             const File& initialFileOrDirectory,\r
                                             const FileFilter* fileFilter_,\r
                                             FilePreviewComponent* previewComp_)\r
-   : FileFilter (String::empty),\r
+   : FileFilter (String()),\r
      fileFilter (fileFilter_),\r
      flags (flags_),\r
      previewComp (previewComp_),\r
@@ -44,7 +44,7 @@ FileBrowserComponent::FileBrowserComponent (int flags_,
 \r
     String filename;\r
 \r
-    if (initialFileOrDirectory == File::nonexistent)\r
+    if (initialFileOrDirectory == File())\r
     {\r
         currentRoot = File::getCurrentWorkingDirectory();\r
     }\r
@@ -391,7 +391,7 @@ void FileBrowserComponent::fileDoubleClicked (const File& f)
         setRoot (f);\r
 \r
         if ((flags & canSelectDirectories) != 0 && (flags & doNotClearFileNameOnRootChange) == 0)\r
-            filenameBox.setText (String::empty);\r
+            filenameBox.setText (String());\r
     }\r
     else\r
     {\r
@@ -535,8 +535,8 @@ void FileBrowserComponent::getDefaultRoots (StringArray& rootNames, StringArray&
         rootNames.add (name);\r
     }\r
 \r
-    rootPaths.add (String::empty);\r
-    rootNames.add (String::empty);\r
+    rootPaths.add (String());\r
+    rootNames.add (String());\r
 \r
     rootPaths.add (File::getSpecialLocation (File::userDocumentsDirectory).getFullPathName());\r
     rootNames.add (TRANS("Documents"));\r
@@ -559,8 +559,8 @@ void FileBrowserComponent::getDefaultRoots (StringArray& rootNames, StringArray&
     rootPaths.add (File::getSpecialLocation (File::userDesktopDirectory).getFullPathName());\r
     rootNames.add (TRANS("Desktop"));\r
 \r
-    rootPaths.add (String::empty);\r
-    rootNames.add (String::empty);\r
+    rootPaths.add (String());\r
+    rootNames.add (String());\r
 \r
     Array<File> volumes;\r
     File vol ("/Volumes");\r
index b4431fbd2e15de5e1a9ec77d5804254aeed87f95..058a36de4632507337338d3dd28d072d370c0630 100644 (file)
@@ -74,7 +74,7 @@ public:
                                         specify the component's behaviour. The flags must contain either openMode\r
                                         or saveMode, and canSelectFiles and/or canSelectDirectories.\r
         @param initialFileOrDirectory   The file or directory that should be selected when the component begins.\r
-                                        If this is File::nonexistent, a default directory will be chosen.\r
+                                        If this is File(), a default directory will be chosen.\r
         @param fileFilter               an optional filter to use to determine which files are shown.\r
                                         If this is nullptr then all files are displayed. Note that a pointer\r
                                         is kept internally to this object, so make sure that it is not deleted\r
index f7399751b9ad1e848644c1caf5a284caddc95a77..e6a35d50aa665c40cbc1dbe14df54a9e1e81e6da 100644 (file)
@@ -64,8 +64,8 @@ public:
                                               tell the user what's going on\r
         @param initialFileOrDirectory         the file or directory that should be selected\r
                                               when the dialog box opens. If this parameter is\r
-                                              set to File::nonexistent, a sensible default\r
-                                              directory will be used instead.\r
+                                              set to File(), a sensible default directory will\r
+                                              be used instead.\r
         @param filePatternsAllowed            a set of file patterns to specify which files\r
                                               can be selected - each pattern should be\r
                                               separated by a comma or semi-colon, e.g. "*" or\r
@@ -82,8 +82,8 @@ public:
         @see browseForFileToOpen, browseForFileToSave, browseForDirectory\r
     */\r
     FileChooser (const String& dialogBoxTitle,\r
-                 const File& initialFileOrDirectory = File::nonexistent,\r
-                 const String& filePatternsAllowed = String::empty,\r
+                 const File& initialFileOrDirectory = File(),\r
+                 const String& filePatternsAllowed = String(),\r
                  bool useOSNativeDialogBox = true,\r
                  bool treatFilePackagesAsDirectories = false);\r
 \r
index 52fa00795523c412e8bfbcff211706289ef9c2a4..ef851cbf9a7fd385e0a819c966a07cdf23eb2a80 100644 (file)
@@ -238,7 +238,7 @@ void FileChooserDialogBox::createNewFolder()
                                            TRANS("Please enter the name for the folder"),\r
                                            AlertWindow::NoIcon, this);\r
 \r
-        aw->addTextEditor ("Folder Name", String::empty, String::empty, false);\r
+        aw->addTextEditor ("Folder Name", String(), String(), false);\r
         aw->addButton (TRANS("Create Folder"), 1, KeyPress (KeyPress::returnKey));\r
         aw->addButton (TRANS("Cancel"),        0, KeyPress (KeyPress::escapeKey));\r
 \r
index 2f1a993cf78463437f6f2f7f97e0b2c5a20d49bd..f0e82bb448733933866b3ca0831a9f4f717d5d8d 100644 (file)
 \r
     @code\r
     {\r
-        WildcardFileFilter wildcardFilter ("*.foo", String::empty, "Foo files");\r
+        WildcardFileFilter wildcardFilter ("*.foo", String(), "Foo files");\r
 \r
         FileBrowserComponent browser (FileBrowserComponent::canSelectFiles,\r
-                                      File::nonexistent,\r
+                                      File(),\r
                                       &wildcardFilter,\r
                                       nullptr);\r
 \r
index d12dd41afa1b10c7f5f7b19e6f31411ede217bf8..2333dcc82d645551c422ff693d5a506f01ca7a2a 100644 (file)
@@ -27,7 +27,7 @@ Image juce_createIconForFile (const File& file);
 \r
 //==============================================================================\r
 FileListComponent::FileListComponent (DirectoryContentsList& listToShow)\r
-    : ListBox (String::empty, nullptr),\r
+    : ListBox (String(), nullptr),\r
       DirectoryContentsDisplayComponent (listToShow)\r
 {\r
     setModel (this);\r
@@ -159,7 +159,7 @@ public:
             repaint();\r
         }\r
 \r
-        if (file != File::nonexistent && icon.isNull() && ! isDirectory)\r
+        if (file != File() && icon.isNull() && ! isDirectory)\r
         {\r
             updateIcon (true);\r
 \r
index d09d563873ab2bdfa50c05c3f3484848ef2584e4..a1c342b9a649fe25124c562864d71b5018f81b60 100644 (file)
@@ -51,7 +51,7 @@ public:
     /** Called to indicate that the user's currently selected file has changed.\r
 \r
         @param newSelectedFile  the newly selected file or directory, which may be\r
-                                File::nonexistent if none is selected.\r
+                                a defualt File() object if none is selected.\r
     */\r
     virtual void selectedFileChanged (const File& newSelectedFile) = 0;\r
 \r
index 3239085fc388791b53ba95557e01e5a7df2c87aa..6c9364ef51f8c0e18b25a610c149b094ba2fb90c 100644 (file)
@@ -26,8 +26,8 @@ FileSearchPathListComponent::FileSearchPathListComponent()
     : addButton ("+"),\r
       removeButton ("-"),\r
       changeButton (TRANS ("change...")),\r
-      upButton (String::empty, DrawableButton::ImageOnButtonBackground),\r
-      downButton (String::empty, DrawableButton::ImageOnButtonBackground)\r
+      upButton (String(), DrawableButton::ImageOnButtonBackground),\r
+      downButton (String(), DrawableButton::ImageOnButtonBackground)\r
 {\r
     listBox.setModel (this);\r
     addAndMakeVisible (listBox);\r
@@ -222,10 +222,10 @@ void FileSearchPathListComponent::buttonClicked (Button* button)
     {\r
         File start (defaultBrowseTarget);\r
 \r
-        if (start == File::nonexistent)\r
+        if (start == File())\r
             start = path [0];\r
 \r
-        if (start == File::nonexistent)\r
+        if (start == File())\r
             start = File::getCurrentWorkingDirectory();\r
 \r
        #if JUCE_MODAL_LOOPS_PERMITTED\r
index 178a10b3d5eaaa09fc89fa5d9ea954fe5334cba9..6565ba4619218da71ca22e556d081e8089085819 100644 (file)
@@ -172,7 +172,7 @@ public:
 \r
     void paintItem (Graphics& g, int width, int height) override\r
     {\r
-        if (file != File::nonexistent)\r
+        if (file != File())\r
         {\r
             updateIcon (true);\r
 \r
@@ -285,7 +285,7 @@ File FileTreeComponent::getSelectedFile (const int index) const
     if (const FileListTreeItem* const item = dynamic_cast<const FileListTreeItem*> (getSelectedItem (index)))\r
         return item->file;\r
 \r
-    return File::nonexistent;\r
+    return File();\r
 }\r
 \r
 void FileTreeComponent::deselectAllFiles()\r
index 833556fd8191f2f340813810a528912d2fcedb92..7f45f67d797a099d39e9ec13882b7ea35354b7d2 100644 (file)
@@ -54,23 +54,23 @@ public:
     /** Returns the number of files the user has got selected.\r
         @see getSelectedFile\r
     */\r
-    int getNumSelectedFiles() const                 { return TreeView::getNumSelectedItems(); }\r
+    int getNumSelectedFiles() const override               { return TreeView::getNumSelectedItems(); }\r
 \r
     /** Returns one of the files that the user has currently selected.\r
         The index should be in the range 0 to (getNumSelectedFiles() - 1).\r
         @see getNumSelectedFiles\r
     */\r
-    File getSelectedFile (int index = 0) const;\r
+    File getSelectedFile (int index = 0) const override;\r
 \r
     /** Deselects any files that are currently selected. */\r
-    void deselectAllFiles();\r
+    void deselectAllFiles() override;\r
 \r
     /** Scrolls the list to the top. */\r
-    void scrollToTop();\r
+    void scrollToTop() override;\r
 \r
     /** If the specified file is in the list, it will become the only selected item\r
         (and if the file isn't in the list, all other items will be deselected). */\r
-    void setSelectedFile (const File&);\r
+    void setSelectedFile (const File&) override;\r
 \r
     /** Updates the files in the list. */\r
     void refresh();\r
index 2a69425e4bb535e57e67612057614c1cc5f64e40..6cfc09b70fc470874abfc3dcf91c6e4bc1a66cf9 100644 (file)
@@ -105,8 +105,8 @@ void FilenameComponent::setDefaultBrowseTarget (const File& newDefaultDirectory)
 \r
 File FilenameComponent::getLocationToBrowse()\r
 {\r
-    return getCurrentFile() == File::nonexistent ? defaultBrowseFile\r
-                                                 : getCurrentFile();\r
+    return getCurrentFile() == File() ? defaultBrowseFile\r
+                                      : getCurrentFile();\r
 }\r
 \r
 void FilenameComponent::buttonClicked (Button*)\r
index 462d8f8ebd1f435613cd8f77210c854f3676ae85..4358c7be6f545a913c30b9d5381fe01aded4566c 100644 (file)
@@ -253,6 +253,11 @@ extern bool juce_areThereAnyAlwaysOnTopWindows();
 #include "misc/juce_BubbleComponent.cpp"\r
 #include "misc/juce_DropShadower.cpp"\r
 \r
+// these classes are C++11-only\r
+#if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS && JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS && JUCE_COMPILER_SUPPORTS_LAMBDAS\r
+ #include "layout/juce_FlexBox.cpp"\r
+#endif\r
+\r
 #if JUCE_IOS || JUCE_WINDOWS\r
  #include "native/juce_MultiTouchMapper.h"\r
 #endif\r
index b0e31ed6ab6fd61a40de2b7903b724d69e661a50..3c31f1f81d5c8e486e18725c2735de5e3c9c87e3 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_gui_basics\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE GUI core classes\r
   description:      Basic user-interface components and related classes.\r
   website:          http://www.juce.com/juce\r
@@ -42,7 +42,7 @@
   dependencies:     juce_events juce_graphics juce_data_structures\r
   OSXFrameworks:    Cocoa Carbon QuartzCore\r
   iOSFrameworks:    UIKit\r
-  linuxLibs:        X11 Xinerama Xext\r
+  linuxPackages:    x11 xinerama xext\r
 \r
  END_JUCE_MODULE_DECLARATION\r
 \r
@@ -153,6 +153,7 @@ class BubbleComponent;
 class KeyPressMappingSet;\r
 class ApplicationCommandManagerListener;\r
 class DrawableButton;\r
+class FlexBox;\r
 \r
 #include "mouse/juce_MouseCursor.h"\r
 #include "mouse/juce_MouseListener.h"\r
@@ -281,6 +282,12 @@ class DrawableButton;
 #include "lookandfeel/juce_LookAndFeel_V1.h"\r
 #include "lookandfeel/juce_LookAndFeel_V3.h"\r
 \r
+// these classes are C++11-only\r
+#if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS && JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS && JUCE_COMPILER_SUPPORTS_LAMBDAS\r
+#include "layout/juce_FlexItem.h"\r
+#include "layout/juce_FlexBox.h"\r
+#endif\r
+\r
 }\r
 \r
 #endif   // JUCE_GUI_BASICS_H_INCLUDED\r
diff --git a/modules/juce_gui_basics/layout/juce_FlexBox.cpp b/modules/juce_gui_basics/layout/juce_FlexBox.cpp
new file mode 100644 (file)
index 0000000..31ab92d
--- /dev/null
@@ -0,0 +1,831 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2015 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   ------------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+  ==============================================================================\r
+*/\r
+\r
+struct FlexBoxLayoutCalculation\r
+{\r
+    using Coord = double;\r
+\r
+    FlexBoxLayoutCalculation (const FlexBox& fb, Coord w, Coord h)\r
+       : owner (fb), parentWidth (w), parentHeight (h), numItems (owner.items.size()),\r
+         isRowDirection (fb.flexDirection == FlexBox::Direction::row\r
+                          || fb.flexDirection == FlexBox::Direction::rowReverse),\r
+         containerLineLength (isRowDirection ? parentWidth : parentHeight)\r
+    {\r
+        lineItems.calloc ((size_t) (numItems * numItems));\r
+        lineInfo.calloc ((size_t) numItems);\r
+    }\r
+\r
+    struct ItemWithState\r
+    {\r
+        ItemWithState (FlexItem& source) noexcept   : item (&source) {}\r
+\r
+        FlexItem* item;\r
+        Coord lockedWidth = 0, lockedHeight = 0;\r
+        Coord lockedMarginLeft = 0, lockedMarginRight = 0, lockedMarginTop = 0, lockedMarginBottom = 0;\r
+        Coord preferredWidth = 0, preferredHeight = 0;\r
+        bool locked = false;\r
+\r
+        void resetItemLockedSize() noexcept\r
+        {\r
+            lockedWidth        = preferredWidth;\r
+            lockedHeight       = preferredHeight;\r
+            lockedMarginLeft   = getValueOrZeroIfAuto (item->margin.left);\r
+            lockedMarginRight  = getValueOrZeroIfAuto (item->margin.right);\r
+            lockedMarginTop    = getValueOrZeroIfAuto (item->margin.top);\r
+            lockedMarginBottom = getValueOrZeroIfAuto (item->margin.bottom);\r
+        }\r
+\r
+        void setWidthChecked (Coord newWidth) noexcept\r
+        {\r
+            if (isAssigned (item->maxWidth))  newWidth = jmin (newWidth, static_cast<Coord> (item->maxWidth));\r
+            if (isAssigned (item->minWidth))  newWidth = jmax (newWidth, static_cast<Coord> (item->minWidth));\r
+\r
+            lockedWidth = newWidth;\r
+        }\r
+\r
+        void setHeightChecked (Coord newHeight) noexcept\r
+        {\r
+            if (isAssigned (item->maxHeight))  newHeight = jmin (newHeight, (Coord) item->maxHeight);\r
+            if (isAssigned (item->minHeight))  newHeight = jmax (newHeight, (Coord) item->minHeight);\r
+\r
+            lockedHeight = newHeight;\r
+        }\r
+    };\r
+\r
+    struct RowInfo\r
+    {\r
+        int numItems;\r
+        Coord crossSize, lineY, totalLength;\r
+    };\r
+\r
+    const FlexBox& owner;\r
+    const Coord parentWidth, parentHeight;\r
+    const int numItems;\r
+    const bool isRowDirection;\r
+    const Coord containerLineLength;\r
+\r
+    int numberOfRows = 1;\r
+    Coord containerCrossLength = 0;\r
+\r
+    HeapBlock<ItemWithState*> lineItems;\r
+    HeapBlock<RowInfo> lineInfo;\r
+    Array<ItemWithState> itemStates;\r
+\r
+    ItemWithState& getItem (int x, int y) const noexcept     { return *lineItems[y * numItems + x]; }\r
+\r
+    static bool isAuto (Coord value) noexcept                { return value == FlexItem::autoValue; }\r
+    static bool isAssigned (Coord value) noexcept            { return value != FlexItem::notAssigned; }\r
+    static Coord getValueOrZeroIfAuto (Coord value) noexcept { return isAuto (value) ? Coord() : value; }\r
+\r
+    //==============================================================================\r
+    void createStates()\r
+    {\r
+        itemStates.ensureStorageAllocated (numItems);\r
+\r
+        for (auto& item : owner.items)\r
+            itemStates.add (item);\r
+\r
+        itemStates.sort (*this, true);\r
+\r
+        for (auto& item : itemStates)\r
+        {\r
+            item.preferredWidth  = getPreferredWidth  (item);\r
+            item.preferredHeight = getPreferredHeight (item);\r
+        }\r
+    }\r
+\r
+    void initialiseItems() noexcept\r
+    {\r
+        if (owner.flexWrap == FlexBox::Wrap::noWrap)  // for single-line, all items go in line 1\r
+        {\r
+            lineInfo[0].numItems = numItems;\r
+            int i = 0;\r
+\r
+            for (auto& item : itemStates)\r
+            {\r
+                item.resetItemLockedSize();\r
+                lineItems[i++] = &item;\r
+            }\r
+        }\r
+        else // if multi-line, group the flexbox items into multiple lines\r
+        {\r
+            auto currentLength = containerLineLength;\r
+            int column = 0, row = 0;\r
+\r
+            for (auto& item : itemStates)\r
+            {\r
+                item.resetItemLockedSize();\r
+\r
+                const auto flexitemLength = getItemLength (item);\r
+\r
+                if (flexitemLength > currentLength)\r
+                {\r
+                    if (++row >= numItems)\r
+                        break;\r
+\r
+                    column = 0;\r
+                    currentLength = containerLineLength;\r
+                    numberOfRows = jmax (numberOfRows, row + 1);\r
+                }\r
+\r
+                currentLength -= flexitemLength;\r
+                lineItems[row * numItems + column] = &item;\r
+                ++column;\r
+                lineInfo[row].numItems = jmax (lineInfo[row].numItems, column);\r
+            }\r
+        }\r
+    }\r
+\r
+    void resolveFlexibleLengths() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            resetRowItems (row);\r
+\r
+            for (int maxLoops = numItems; --maxLoops >= 0;)\r
+            {\r
+                resetUnlockedRowItems (row);\r
+\r
+                if (layoutRowItems (row))\r
+                    break;\r
+            }\r
+        }\r
+    }\r
+\r
+    void resolveAutoMarginsOnMainAxis() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            Coord allFlexGrow = 0;\r
+            const auto numColumns = lineInfo[row].numItems;\r
+            const auto remainingLength = containerLineLength - lineInfo[row].totalLength;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (isRowDirection)\r
+                {\r
+                    if (isAuto (item.item->margin.left))    ++allFlexGrow;\r
+                    if (isAuto (item.item->margin.right))   ++allFlexGrow;\r
+                }\r
+                else\r
+                {\r
+                    if (isAuto (item.item->margin.top))     ++allFlexGrow;\r
+                    if (isAuto (item.item->margin.bottom))  ++allFlexGrow;\r
+                }\r
+            }\r
+\r
+            auto changeUnitWidth = remainingLength / allFlexGrow;\r
+\r
+            if (changeUnitWidth > 0)\r
+            {\r
+                for (int column = 0; column < numColumns; ++column)\r
+                {\r
+                    auto& item = getItem (column, row);\r
+\r
+                    if (isRowDirection)\r
+                    {\r
+                        if (isAuto (item.item->margin.left))    item.lockedMarginLeft  = changeUnitWidth;\r
+                        if (isAuto (item.item->margin.right))   item.lockedMarginRight = changeUnitWidth;\r
+                    }\r
+                    else\r
+                    {\r
+                        if (isAuto (item.item->margin.top))     item.lockedMarginTop    = changeUnitWidth;\r
+                        if (isAuto (item.item->margin.bottom))  item.lockedMarginBottom = changeUnitWidth;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void calculateCrossSizesByLine() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            Coord maxSize = 0;\r
+            const auto numColumns = lineInfo[row].numItems;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                maxSize = jmax (maxSize, isRowDirection ? item.lockedHeight + item.lockedMarginTop  + item.lockedMarginBottom\r
+                                                        : item.lockedWidth  + item.lockedMarginLeft + item.lockedMarginRight);\r
+            }\r
+\r
+            lineInfo[row].crossSize = maxSize;\r
+        }\r
+    }\r
+\r
+    void calculateCrossSizeOfAllItems() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto numColumns = lineInfo[row].numItems;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (isAssigned (item.item->maxHeight) && item.lockedHeight > item.item->maxHeight)\r
+                    item.lockedHeight = item.item->maxHeight;\r
+\r
+                if (isAssigned (item.item->maxWidth) && item.lockedWidth > item.item->maxWidth)\r
+                    item.lockedWidth = item.item->maxWidth;\r
+            }\r
+        }\r
+    }\r
+\r
+    void alignLinesPerAlignContent() noexcept\r
+    {\r
+        containerCrossLength = isRowDirection ? parentHeight : parentWidth;\r
+\r
+        if (owner.alignContent == FlexBox::AlignContent::flexStart)\r
+        {\r
+            for (int row = 0; row < numberOfRows; ++row)\r
+                for (int row2 = row; row2 < numberOfRows; ++row2)\r
+                    lineInfo[row].lineY = row == 0 ? 0 : lineInfo[row - 1].lineY + lineInfo[row - 1].crossSize;\r
+        }\r
+        else if (owner.alignContent == FlexBox::AlignContent::flexEnd)\r
+        {\r
+            for (int row = 0; row < numberOfRows; ++row)\r
+            {\r
+                Coord crossHeights = 0;\r
+\r
+                for (int row2 = row; row2 < numberOfRows; ++row2)\r
+                    crossHeights += lineInfo[row2].crossSize;\r
+\r
+                lineInfo[row].lineY = containerCrossLength - crossHeights;\r
+            }\r
+        }\r
+        else\r
+        {\r
+            Coord totalHeight = 0;\r
+\r
+            for (int row = 0; row < numberOfRows; ++row)\r
+                totalHeight += lineInfo[row].crossSize;\r
+\r
+            if (owner.alignContent == FlexBox::AlignContent::stretch)\r
+            {\r
+                const auto difference = jmax (Coord(), (containerCrossLength - totalHeight) / numberOfRows);\r
+\r
+                for (int row = 0; row < numberOfRows; ++row)\r
+                {\r
+                    lineInfo[row].crossSize += difference;\r
+                    lineInfo[row].lineY = row == 0 ? 0 : lineInfo[row - 1].lineY + lineInfo[row - 1].crossSize;\r
+                }\r
+            }\r
+            else if (owner.alignContent == FlexBox::AlignContent::center)\r
+            {\r
+                const auto additionalength = (containerCrossLength - totalHeight) / 2;\r
+\r
+                for (int row = 0; row < numberOfRows; ++row)\r
+                    lineInfo[row].lineY = row == 0 ? additionalength : lineInfo[row - 1].lineY + lineInfo[row - 1].crossSize;\r
+            }\r
+            else if (owner.alignContent == FlexBox::AlignContent::spaceBetween)\r
+            {\r
+                const auto additionalength = numberOfRows <= 1 ? Coord() : jmax (Coord(), (containerCrossLength - totalHeight)\r
+                                                                                            / static_cast<Coord> (numberOfRows - 1));\r
+                lineInfo[0].lineY = 0;\r
+\r
+                for (int row = 1; row < numberOfRows; ++row)\r
+                    lineInfo[row].lineY += additionalength + lineInfo[row - 1].lineY + lineInfo[row - 1].crossSize;\r
+            }\r
+            else if (owner.alignContent == FlexBox::AlignContent::spaceAround)\r
+            {\r
+                const auto additionalength = numberOfRows <= 1 ? Coord() : jmax (Coord(), (containerCrossLength - totalHeight)\r
+                                                                                            / static_cast<Coord> (2 + (2 * (numberOfRows - 1))));\r
+\r
+                lineInfo[0].lineY = additionalength;\r
+\r
+                for (int row = 1; row < numberOfRows; ++row)\r
+                    lineInfo[row].lineY += (2 * additionalength) + lineInfo[row - 1].lineY + lineInfo[row - 1].crossSize;\r
+            }\r
+        }\r
+    }\r
+\r
+    void resolveAutoMarginsOnCrossAxis() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto numColumns = lineInfo[row].numItems;\r
+            const auto crossSizeForLine = lineInfo[row].crossSize;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (isRowDirection)\r
+                {\r
+                    if (isAuto (item.item->margin.top) && isAuto (item.item->margin.bottom))\r
+                        item.lockedMarginTop = (crossSizeForLine - item.lockedHeight) / 2;\r
+                    else if (isAuto (item.item->margin.top))\r
+                        item.lockedMarginTop = crossSizeForLine - item.lockedHeight - item.item->margin.bottom;\r
+                }\r
+                else if (isAuto (item.item->margin.left) && isAuto (item.item->margin.right))\r
+                {\r
+                    item.lockedMarginLeft = jmax (Coord(), (crossSizeForLine - item.lockedWidth) / 2);\r
+                }\r
+                else if (isAuto (item.item->margin.top))\r
+                {\r
+                    item.lockedMarginLeft = jmax (Coord(), crossSizeForLine - item.lockedHeight - item.item->margin.bottom);\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void alignItemsInCrossAxisInLinesPerAlignItems() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto numColumns = lineInfo[row].numItems;\r
+            const auto lineSize = lineInfo[row].crossSize;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (item.item->alignSelf == FlexItem::AlignSelf::autoAlign)\r
+                {\r
+                    if (owner.alignItems == FlexBox::AlignItems::stretch)\r
+                    {\r
+                        item.lockedMarginTop = item.item->margin.top;\r
+\r
+                        if (isRowDirection)\r
+                            item.setHeightChecked (lineSize - item.item->margin.top - item.item->margin.bottom);\r
+                    }\r
+                    else if (owner.alignItems == FlexBox::AlignItems::flexStart)\r
+                    {\r
+                        item.lockedMarginTop = item.item->margin.top;\r
+                    }\r
+                    else if (owner.alignItems == FlexBox::AlignItems::flexEnd)\r
+                    {\r
+                        item.lockedMarginTop = lineSize - item.lockedHeight - item.item->margin.bottom;\r
+                    }\r
+                    else if (owner.alignItems == FlexBox::AlignItems::center)\r
+                    {\r
+                        item.lockedMarginTop = (lineSize - item.lockedHeight - item.item->margin.top - item.item->margin.bottom) / 2;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void alignLinesPerAlignSelf() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto numColumns = lineInfo[row].numItems;\r
+            const auto lineSize = lineInfo[row].crossSize;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (! isAuto (item.item->margin.top))\r
+                {\r
+                    if (item.item->alignSelf == FlexItem::AlignSelf::flexStart)\r
+                    {\r
+                        if (isRowDirection)\r
+                            item.lockedMarginTop = item.item->margin.top;\r
+                        else\r
+                            item.lockedMarginLeft = item.item->margin.left;\r
+                    }\r
+                    else if (item.item->alignSelf == FlexItem::AlignSelf::flexEnd)\r
+                    {\r
+                        if (isRowDirection)\r
+                            item.lockedMarginTop = lineSize - item.lockedHeight - item.item->margin.bottom;\r
+                        else\r
+                            item.lockedMarginLeft = lineSize - item.lockedWidth - item.item->margin.right;\r
+                    }\r
+                    else if (item.item->alignSelf == FlexItem::AlignSelf::center)\r
+                    {\r
+                        if (isRowDirection)\r
+                            item.lockedMarginTop = item.item->margin.top + (lineSize - item.lockedHeight - item.item->margin.top - item.item->margin.bottom) / 2;\r
+                        else\r
+                            item.lockedMarginLeft = item.item->margin.left + (lineSize - item.lockedWidth - item.item->margin.left - item.item->margin.right) / 2;\r
+                    }\r
+                    else if (item.item->alignSelf == FlexItem::AlignSelf::stretch)\r
+                    {\r
+                        item.lockedMarginTop  = item.item->margin.top;\r
+                        item.lockedMarginLeft = item.item->margin.left;\r
+\r
+                        if (isRowDirection)\r
+                            item.setHeightChecked (isAssigned (item.item->height) ? getPreferredHeight (item)\r
+                                                                                  : lineSize - item.item->margin.top - item.item->margin.bottom);\r
+                        else\r
+                            item.setWidthChecked (isAssigned (item.item->width) ? getPreferredWidth (item)\r
+                                                                                : lineSize - item.item->margin.left - item.item->margin.right);\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void alignItemsByJustifyContent() noexcept\r
+    {\r
+        Coord additionalMarginRight = 0, additionalMarginLeft = 0;\r
+\r
+        recalculateTotalItemLengthPerLineArray();\r
+\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto numColumns = lineInfo[row].numItems;\r
+            Coord x = 0;\r
+\r
+            if (owner.justifyContent == FlexBox::JustifyContent::flexEnd)\r
+            {\r
+                x = containerLineLength - lineInfo[row].totalLength;\r
+            }\r
+            else if (owner.justifyContent == FlexBox::JustifyContent::center)\r
+            {\r
+                x = (containerLineLength - lineInfo[row].totalLength) / 2;\r
+            }\r
+            else if (owner.justifyContent == FlexBox::JustifyContent::spaceBetween)\r
+            {\r
+                additionalMarginRight\r
+                    = jmax (Coord(), (containerLineLength - lineInfo[row].totalLength) / jmax (1, numColumns - 1));\r
+            }\r
+            else if (owner.justifyContent == FlexBox::JustifyContent::spaceAround)\r
+            {\r
+                additionalMarginLeft = additionalMarginRight\r
+                    = jmax (Coord(), (containerLineLength - lineInfo[row].totalLength) / jmax (1, 2 * numColumns));\r
+            }\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (isRowDirection)\r
+                {\r
+                    item.lockedMarginLeft  += additionalMarginLeft;\r
+                    item.lockedMarginRight += additionalMarginRight;\r
+                    item.item->currentBounds.setPosition ((float) (x + item.lockedMarginLeft), (float) item.lockedMarginTop);\r
+                    x += item.lockedWidth + item.lockedMarginLeft + item.lockedMarginRight;\r
+                }\r
+                else\r
+                {\r
+                    item.lockedMarginTop    += additionalMarginLeft;\r
+                    item.lockedMarginBottom += additionalMarginRight;\r
+                    item.item->currentBounds.setPosition ((float) item.lockedMarginLeft, (float) (x + item.lockedMarginTop));\r
+                    x += item.lockedHeight + item.lockedMarginTop + item.lockedMarginBottom;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void layoutAllItems() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            const auto lineY = lineInfo[row].lineY;\r
+            const auto numColumns = lineInfo[row].numItems;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                auto& item = getItem (column, row);\r
+\r
+                if (isRowDirection)\r
+                    item.item->currentBounds.setY ((float) (lineY + item.lockedMarginTop));\r
+                else\r
+                    item.item->currentBounds.setX ((float) (lineY + item.lockedMarginLeft));\r
+\r
+                item.item->currentBounds.setSize ((float) item.lockedWidth,\r
+                                                  (float) item.lockedHeight);\r
+            }\r
+        }\r
+\r
+        reverseLocations();\r
+        reverseWrap();\r
+    }\r
+\r
+    static int compareElements (const ItemWithState& i1, const ItemWithState& i2) noexcept\r
+    {\r
+        return i1.item->order < i2.item->order ? -1 : (i2.item->order < i1.item->order ? 1 : 0);\r
+    }\r
+\r
+private:\r
+    void resetRowItems (const int row) noexcept\r
+    {\r
+        const auto numColumns = lineInfo[row].numItems;\r
+\r
+        for (int column = 0; column < numColumns; ++column)\r
+            resetItem (getItem (column, row));\r
+    }\r
+\r
+    void resetUnlockedRowItems (const int row) noexcept\r
+    {\r
+        const auto numColumns = lineInfo[row].numItems;\r
+\r
+        for (int column = 0; column < numColumns; ++column)\r
+        {\r
+            auto& item = getItem (column, row);\r
+\r
+            if (! item.locked)\r
+                resetItem (item);\r
+        }\r
+    }\r
+\r
+    void resetItem (ItemWithState& item) noexcept\r
+    {\r
+        item.locked = false;\r
+        item.lockedWidth  = getPreferredWidth (item);\r
+        item.lockedHeight = getPreferredHeight (item);\r
+    }\r
+\r
+    bool layoutRowItems (const int row) noexcept\r
+    {\r
+        const auto numColumns = lineInfo[row].numItems;\r
+        auto flexContainerLength = containerLineLength;\r
+        Coord totalItemsLength = 0, totalFlexGrow = 0, totalFlexShrink = 0;\r
+\r
+        for (int column = 0; column < numColumns; ++column)\r
+        {\r
+            const auto& item = getItem (column, row);\r
+\r
+            if (item.locked)\r
+            {\r
+                flexContainerLength -= getItemLength (item);\r
+            }\r
+            else\r
+            {\r
+                totalItemsLength += getItemLength (item);\r
+                totalFlexGrow   += item.item->flexGrow;\r
+                totalFlexShrink += item.item->flexShrink;\r
+            }\r
+        }\r
+\r
+        Coord changeUnit = 0;\r
+        const auto difference = flexContainerLength - totalItemsLength;\r
+        const bool positiveFlexibility = difference > 0;\r
+\r
+        if (positiveFlexibility)\r
+        {\r
+            if (totalFlexGrow != 0)\r
+                changeUnit = difference / totalFlexGrow;\r
+        }\r
+        else\r
+        {\r
+            if (totalFlexShrink != 0)\r
+                changeUnit = difference / totalFlexShrink;\r
+        }\r
+\r
+        bool ok = true;\r
+\r
+        for (int column = 0; column < numColumns; ++column)\r
+        {\r
+            auto& item = getItem (column, row);\r
+\r
+            if (! item.locked)\r
+                if (! addToItemLength (item, (positiveFlexibility ? item.item->flexGrow\r
+                                                                  : item.item->flexShrink) * changeUnit, row))\r
+                    ok = false;\r
+        }\r
+\r
+        return ok;\r
+    }\r
+\r
+    void recalculateTotalItemLengthPerLineArray() noexcept\r
+    {\r
+        for (int row = 0; row < numberOfRows; ++row)\r
+        {\r
+            lineInfo[row].totalLength = 0;\r
+            const auto numColumns = lineInfo[row].numItems;\r
+\r
+            for (int column = 0; column < numColumns; ++column)\r
+            {\r
+                const auto& item = getItem (column, row);\r
+\r
+                lineInfo[row].totalLength += isRowDirection ? item.lockedWidth + item.lockedMarginLeft + item.lockedMarginRight\r
+                                                            : item.lockedHeight + item.lockedMarginTop + item.lockedMarginBottom;\r
+            }\r
+        }\r
+    }\r
+\r
+    void reverseLocations() noexcept\r
+    {\r
+        if (owner.flexDirection == FlexBox::Direction::rowReverse)\r
+        {\r
+            for (auto& item : owner.items)\r
+                item.currentBounds.setX ((float) (containerLineLength - item.currentBounds.getRight()));\r
+        }\r
+        else if (owner.flexDirection == FlexBox::Direction::columnReverse)\r
+        {\r
+            for (auto& item : owner.items)\r
+                item.currentBounds.setY ((float) (containerLineLength - item.currentBounds.getBottom()));\r
+        }\r
+    }\r
+\r
+    void reverseWrap() noexcept\r
+    {\r
+        if (owner.flexWrap == FlexBox::Wrap::wrapReverse)\r
+        {\r
+            if (isRowDirection)\r
+            {\r
+                for (auto& item : owner.items)\r
+                    item.currentBounds.setY ((float) (containerCrossLength - item.currentBounds.getBottom()));\r
+            }\r
+            else\r
+            {\r
+                for (auto& item : owner.items)\r
+                    item.currentBounds.setX ((float) (containerCrossLength - item.currentBounds.getRight()));\r
+            }\r
+        }\r
+    }\r
+\r
+    Coord getItemLength (const ItemWithState& item) const noexcept\r
+    {\r
+        return isRowDirection ? item.lockedWidth  + item.lockedMarginLeft + item.lockedMarginRight\r
+                              : item.lockedHeight + item.lockedMarginTop  + item.lockedMarginBottom;\r
+    }\r
+\r
+    Coord getItemCrossSize (const ItemWithState& item) const noexcept\r
+    {\r
+        return isRowDirection ? item.lockedHeight + item.lockedMarginTop  + item.lockedMarginBottom\r
+                              : item.lockedWidth  + item.lockedMarginLeft + item.lockedMarginRight;\r
+    }\r
+\r
+    bool addToItemLength (ItemWithState& item, const Coord length, int row) const noexcept\r
+    {\r
+        bool ok = false;\r
+\r
+        if (isRowDirection)\r
+        {\r
+            const auto prefWidth = getPreferredWidth (item);\r
+\r
+            if (isAssigned (item.item->maxWidth) && item.item->maxWidth < prefWidth + length)\r
+            {\r
+                item.lockedWidth = item.item->maxWidth;\r
+                item.locked = true;\r
+            }\r
+            else if (isAssigned (prefWidth) && item.item->minWidth > prefWidth + length)\r
+            {\r
+                item.lockedWidth = item.item->minWidth;\r
+                item.locked = true;\r
+            }\r
+            else\r
+            {\r
+                ok = true;\r
+                item.lockedWidth = prefWidth + length;\r
+            }\r
+\r
+            lineInfo[row].totalLength += item.lockedWidth + item.lockedMarginLeft + item.lockedMarginRight;\r
+        }\r
+        else\r
+        {\r
+            const auto prefHeight = getPreferredHeight (item);\r
+\r
+            if (isAssigned (item.item->maxHeight) && item.item->maxHeight < prefHeight + length)\r
+            {\r
+                item.lockedHeight = item.item->maxHeight;\r
+                item.locked = true;\r
+            }\r
+            else if (isAssigned (prefHeight) && item.item->minHeight > prefHeight + length)\r
+            {\r
+                item.lockedHeight = item.item->minHeight;\r
+                item.locked = true;\r
+            }\r
+            else\r
+            {\r
+                ok = true;\r
+                item.lockedHeight = prefHeight + length;\r
+            }\r
+\r
+            lineInfo[row].totalLength += item.lockedHeight + item.lockedMarginTop + item.lockedMarginBottom;\r
+        }\r
+\r
+        return ok;\r
+    }\r
+\r
+    Coord getPreferredWidth (const ItemWithState& itemWithState) const noexcept\r
+    {\r
+        const auto& item = *itemWithState.item;\r
+        auto preferredWidth = (item.flexBasis > 0 && isRowDirection)\r
+                                 ? item.flexBasis\r
+                                 : (isAssigned (item.width) ? item.width : item.minWidth);\r
+\r
+        if (isAssigned (item.minWidth) && preferredWidth < item.minWidth)  return item.minWidth;\r
+        if (isAssigned (item.maxWidth) && preferredWidth > item.maxWidth)  return item.maxWidth;\r
+\r
+        return preferredWidth;\r
+    }\r
+\r
+    Coord getPreferredHeight (const ItemWithState& itemWithState) const noexcept\r
+    {\r
+        const auto& item = *itemWithState.item;\r
+        auto preferredHeight = (item.flexBasis > 0 && ! isRowDirection)\r
+                                 ? item.flexBasis\r
+                                 : (isAssigned (item.height) ? item.height : item.minHeight);\r
+\r
+        if (isAssigned (item.minHeight) && preferredHeight < item.minHeight)  return item.minHeight;\r
+        if (isAssigned (item.maxHeight) && preferredHeight > item.maxHeight)  return item.maxHeight;\r
+\r
+        return preferredHeight;\r
+    }\r
+};\r
+\r
+//==============================================================================\r
+FlexBox::FlexBox() noexcept {}\r
+FlexBox::~FlexBox() noexcept {}\r
+\r
+FlexBox::FlexBox (JustifyContent jc) noexcept  : justifyContent (jc) {}\r
+\r
+FlexBox::FlexBox (Direction d, Wrap w, AlignContent ac, AlignItems ai, JustifyContent jc) noexcept\r
+    : flexDirection (d), flexWrap (w), alignContent (ac), alignItems (ai), justifyContent (jc)\r
+{}\r
+\r
+void FlexBox::performLayout (Rectangle<float> targetArea)\r
+{\r
+    if (! items.isEmpty())\r
+    {\r
+        FlexBoxLayoutCalculation layout (*this, targetArea.getWidth(), targetArea.getHeight());\r
+\r
+        layout.createStates();\r
+        layout.initialiseItems();\r
+        layout.resolveFlexibleLengths();\r
+        layout.resolveAutoMarginsOnMainAxis();\r
+        layout.calculateCrossSizesByLine();\r
+        layout.calculateCrossSizeOfAllItems();\r
+        layout.alignLinesPerAlignContent();\r
+        layout.resolveAutoMarginsOnCrossAxis();\r
+        layout.alignItemsInCrossAxisInLinesPerAlignItems();\r
+        layout.alignLinesPerAlignSelf();\r
+        layout.alignItemsByJustifyContent();\r
+        layout.layoutAllItems();\r
+\r
+        for (auto& item : items)\r
+        {\r
+            item.currentBounds += targetArea.getPosition();\r
+\r
+            if (auto comp = item.associatedComponent)\r
+                comp->setBounds (item.currentBounds.getSmallestIntegerContainer());\r
+\r
+            if (auto box = item.associatedFlexBox)\r
+                box->performLayout (item.currentBounds);\r
+        }\r
+    }\r
+}\r
+\r
+void FlexBox::performLayout (Rectangle<int> targetArea)\r
+{\r
+    performLayout (targetArea.toFloat());\r
+}\r
+\r
+//==============================================================================\r
+FlexItem::FlexItem() noexcept {}\r
+FlexItem::FlexItem (float w, float h) noexcept                  : currentBounds (w, h), minWidth (w), minHeight (h) {}\r
+FlexItem::FlexItem (float w, float h, Component& c) noexcept    : FlexItem (w, h)  { associatedComponent = &c; }\r
+FlexItem::FlexItem (float w, float h, FlexBox& fb) noexcept     : FlexItem (w, h)  { associatedFlexBox = &fb; }\r
+FlexItem::FlexItem (Component& c) noexcept                      : associatedComponent (&c) {}\r
+FlexItem::FlexItem (FlexBox& fb) noexcept                       : associatedFlexBox (&fb) {}\r
+\r
+FlexItem::Margin::Margin() noexcept           : left(), right(), top(), bottom() {}\r
+FlexItem::Margin::Margin (float v) noexcept   : left (v), right (v), top (v), bottom (v) {}\r
+\r
+//==============================================================================\r
+FlexItem FlexItem::withFlex (float newFlexGrow) const noexcept\r
+{\r
+    auto fi = *this;\r
+    fi.flexGrow = newFlexGrow;\r
+    return fi;\r
+}\r
+\r
+FlexItem FlexItem::withFlex (float newFlexGrow, float newFlexShrink) const noexcept\r
+{\r
+    auto fi = withFlex (newFlexGrow);\r
+    fi.flexShrink = newFlexShrink;\r
+    return fi;\r
+}\r
+\r
+FlexItem FlexItem::withFlex (float newFlexGrow, float newFlexShrink, float newFlexBasis) const noexcept\r
+{\r
+    auto fi = withFlex (newFlexGrow, newFlexShrink);\r
+    fi.flexBasis = newFlexBasis;\r
+    return fi;\r
+}\r
+\r
+FlexItem FlexItem::withWidth (float newWidth) const noexcept    { auto fi = *this; fi.width = newWidth; return fi; }\r
+FlexItem FlexItem::withHeight (float newHeight) const noexcept  { auto fi = *this; fi.height = newHeight; return fi; }\r
+FlexItem FlexItem::withMargin (Margin m) const noexcept         { auto fi = *this; fi.margin = m; return fi; }\r
diff --git a/modules/juce_gui_basics/layout/juce_FlexBox.h b/modules/juce_gui_basics/layout/juce_FlexBox.h
new file mode 100644 (file)
index 0000000..7057192
--- /dev/null
@@ -0,0 +1,102 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2015 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   ------------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+  ==============================================================================\r
+*/\r
+\r
+\r
+/**\r
+    Represents a FlexBox container, which contains and manages the layout of a set\r
+    of FlexItem objects.\r
+\r
+    To use this class, set its parameters appropriately (you can search online for\r
+    more help on exactly how the FlexBox protocol works!), then add your sub-items\r
+    to the items array, and call performLayout().\r
+\r
+    @see FlexItem\r
+*/\r
+class JUCE_API  FlexBox\r
+{\r
+public:\r
+    /** Possible values for the flexDirection property. */\r
+    enum class Direction       { row, rowReverse, column, columnReverse };\r
+    /** Possible values for the flexWrap property. */\r
+    enum class Wrap            { noWrap, wrap, wrapReverse };\r
+    /** Possible values for the alignContent property. */\r
+    enum class AlignContent    { stretch, flexStart, flexEnd, center, spaceBetween, spaceAround };\r
+    /** Possible values for the alignItems property. */\r
+    enum class AlignItems      { stretch, flexStart, flexEnd, center };\r
+    /** Possible values for the justifyContent property. */\r
+    enum class JustifyContent  { flexStart, flexEnd, center, spaceBetween, spaceAround };\r
+\r
+    //==============================================================================\r
+    /** Creates an empty FlexBox container with default parameters. */\r
+    FlexBox() noexcept;\r
+\r
+    /** Creates an empty FlexBox container with these parameters. */\r
+    FlexBox (Direction, Wrap, AlignContent, AlignItems, JustifyContent) noexcept;\r
+\r
+    /** Creates an empty FlexBox container with the given content-justification mode. */\r
+    FlexBox (JustifyContent) noexcept;\r
+\r
+    /** Destructor. */\r
+    ~FlexBox() noexcept;\r
+\r
+    //==============================================================================\r
+    /** Lays-out the box's items within the given rectangle. */\r
+    void performLayout (Rectangle<float> targetArea);\r
+\r
+    /** Lays-out the box's items within the given rectangle. */\r
+    void performLayout (Rectangle<int> targetArea);\r
+\r
+    //==============================================================================\r
+    /** Specifies how flex items are placed in the flex container, and defines the\r
+        direction of the main axis.\r
+    */\r
+    Direction flexDirection = Direction::row;\r
+\r
+    /** Specifies whether items are forced into a single line or can be wrapped onto multiple lines.\r
+        If wrapping is allowed, this property also controls the direction in which lines are stacked.\r
+    */\r
+    Wrap flexWrap = Wrap::noWrap;\r
+\r
+    /** Specifies how a flex container's lines are placed within the flex container when\r
+        there is extra space on the cross-axis.\r
+        This property has no effect on single line layouts.\r
+    */\r
+    AlignContent alignContent = AlignContent::stretch;\r
+\r
+    /** Specifies the alignment of flex items along the cross-axis of each line. */\r
+    AlignItems alignItems = AlignItems::stretch;\r
+\r
+    /** Defines how the container distributes space between and around items along the main-axis.\r
+        The alignment is done after the lengths and auto margins are applied, so that if there is at\r
+        least one flexible element, with flex-grow different from 0, it will have no effect as there\r
+        won't be any available space.\r
+    */\r
+    JustifyContent justifyContent = JustifyContent::flexStart;\r
+\r
+    /** The set of items to lay-out. */\r
+    Array<FlexItem> items;\r
+\r
+private:\r
+    JUCE_LEAK_DETECTOR (FlexBox)\r
+};\r
diff --git a/modules/juce_gui_basics/layout/juce_FlexItem.h b/modules/juce_gui_basics/layout/juce_FlexItem.h
new file mode 100644 (file)
index 0000000..8390310
--- /dev/null
@@ -0,0 +1,142 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2015 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   ------------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+  ==============================================================================\r
+*/\r
+\r
+\r
+/**\r
+    Describes the properties of an item inside a FlexBox container.\r
+\r
+    @see FlexBox\r
+*/\r
+class JUCE_API  FlexItem\r
+{\r
+public:\r
+    //==============================================================================\r
+    /** Creates an item with default parameters, and zero size. */\r
+    FlexItem() noexcept;\r
+\r
+    /** Creates an item with the given size. */\r
+    FlexItem (float width, float height) noexcept;\r
+\r
+    /** Creates an item with the given size and target component. */\r
+    FlexItem (float width, float height, Component& targetComponent) noexcept;\r
+\r
+    /** Creates an item that represents an embedded FlexBox with a given size. */\r
+    FlexItem (float width, float height, FlexBox& flexBoxToControl) noexcept;\r
+\r
+    /** Creates an item with a given target component. */\r
+    FlexItem (Component& componentToControl) noexcept;\r
+\r
+    /** Creates an item that represents an embedded FlexBox. */\r
+    FlexItem (FlexBox& flexBoxToControl) noexcept;\r
+\r
+    //==============================================================================\r
+    /** The item's current bounds. */\r
+    Rectangle<float> currentBounds;\r
+\r
+    /** If this is non-null, it represents a Component whose bounds are controlled by this item. */\r
+    Component* associatedComponent = nullptr;\r
+\r
+    /** If this is non-null, it represents a FlexBox whose bounds are controlled by this item. */\r
+    FlexBox* associatedFlexBox = nullptr;\r
+\r
+    /** Determines the order used to lay out items in their flex container.\r
+        Elements are laid out in ascending order of thus order value. Elements with the same order value\r
+        are laid out in the order in which they appear in the array.\r
+    */\r
+    int order = 0;\r
+\r
+    /** Specifies the flex grow factor of this item.\r
+        This indicates the amount of space inside the flex container the item should take up.\r
+    */\r
+    float flexGrow = 0.0f;\r
+\r
+    /** Specifies the flex shrink factor of the item.\r
+        This indicates the rate at which the item shrinks if there is insufficient space in\r
+        the container.\r
+    */\r
+    float flexShrink = 1.0f;\r
+\r
+    /** Specifies the flex-basis of the item.\r
+        This is the initial main size of a flex item in the direction of flow. It determines the size\r
+        of the content-box unless specified otherwise using box-sizing.\r
+    */\r
+    float flexBasis = 0.0f;\r
+\r
+    /** Possible value for the alignSelf property */\r
+    enum class AlignSelf  { autoAlign, flexStart, flexEnd, center, stretch };\r
+\r
+    /** This is the aligh-self property of the item.\r
+        This determines the alignment of the item along the corss-axis (perpendicular to the direction\r
+        of flow).\r
+    */\r
+    AlignSelf alignSelf = AlignSelf::stretch;\r
+\r
+    //==============================================================================\r
+    /** This constant can be used for sizes to indicate that 'auto' mode should be used. */\r
+    static const int autoValue    = -2;\r
+    /** This constant can be used for sizes to indicate that no value has been set. */\r
+    static const int notAssigned  = -1;\r
+\r
+    float width     = (float) notAssigned;  /**< The item's width. */\r
+    float minWidth  = 0.0f;                 /**< The item's minimum width */\r
+    float maxWidth  = (float) notAssigned;  /**< The item's maximum width */\r
+\r
+    float height    = (float) notAssigned;  /**< The item's height */\r
+    float minHeight = 0.0f;                 /**< The item's minimum height */\r
+    float maxHeight = (float) notAssigned;  /**< The item's maximum height */\r
+\r
+    /** Represents a margin. */\r
+    struct Margin\r
+    {\r
+        Margin() noexcept;              /**< Creates a margin of size zero. */\r
+        Margin (float size) noexcept;   /**< Creates a margin with this size on all sides. */\r
+\r
+        float left;   /**< Left margin size */\r
+        float right;  /**< Right margin size */\r
+        float top;    /**< Top margin size */\r
+        float bottom; /**< Bottom margin size */\r
+    };\r
+\r
+    /** The margin to leave around this item. */\r
+    Margin margin;\r
+\r
+    //==============================================================================\r
+    /** Returns a copy of this object with a new flex-grow value. */\r
+    FlexItem withFlex (float newFlexGrow) const noexcept;\r
+\r
+    /** Returns a copy of this object with new flex-grow and flex-shrink values. */\r
+    FlexItem withFlex (float newFlexGrow, float newFlexShrink) const noexcept;\r
+\r
+    /** Returns a copy of this object with new flex-grow, flex-shrink and flex-basis values. */\r
+    FlexItem withFlex (float newFlexGrow, float newFlexShrink, float newFlexBasis) const noexcept;\r
+\r
+    /** Returns a copy of this object with a new width. */\r
+    FlexItem withWidth (float newWidth) const noexcept;\r
+\r
+    /** Returns a copy of this object with a new height. */\r
+    FlexItem withHeight (float newHeight) const noexcept;\r
+\r
+    /** Returns a copy of this object with a new margin. */\r
+    FlexItem withMargin (Margin) const noexcept;\r
+};\r
index 02ba492cef3d495f45594dee86c69952178c53bd..8ad22e939a363cafdcc84a5835ff41dcc6e4cffa 100644 (file)
@@ -41,8 +41,8 @@ public:
         @param componentName    the name to give the component\r
         @param labelText        the text to show at the top of the outline\r
     */\r
-    GroupComponent (const String& componentName = String::empty,\r
-                    const String& labelText = String::empty);\r
+    GroupComponent (const String& componentName = String(),\r
+                    const String& labelText = String());\r
 \r
     /** Destructor. */\r
     ~GroupComponent();\r
index 69c40bb9fad6832f296375f428f0101b8660afc8..b81a3f1a7370802b05c8dec3f0d67a3400fa7cd2 100644 (file)
@@ -23,7 +23,7 @@
 */\r
 \r
 MultiDocumentPanelWindow::MultiDocumentPanelWindow (Colour backgroundColour)\r
-    : DocumentWindow (String::empty, backgroundColour,\r
+    : DocumentWindow (String(), backgroundColour,\r
                       DocumentWindow::maximiseButton | DocumentWindow::closeButton, false)\r
 {\r
 }\r
index bd7b57840f8f485295e030e1e2bef7c16cce22f7..ffafc987a2d4ebc7774406667a9373df17961903 100644 (file)
@@ -57,9 +57,9 @@ public:
         Remember that when the target component is resized, it'll need to move and\r
         resize this component to keep it in place, as this won't happen automatically.\r
 \r
-        If the constrainer parameter is non-zero, then this object will be used to enforce\r
-        limits on the size and position that the component can be stretched to. Make sure\r
-        that the constrainer isn't deleted while still in use by this object.\r
+        If the constrainer parameter is not a nullptr, then this object will be used to\r
+        enforce limits on the size and position that the component can be stretched to.\r
+        Make sure that the constrainer isn't deleted while still in use by this object.\r
 \r
         @see ComponentBoundsConstrainer\r
     */\r
index 23c3689ec72d8766bba6d07e0b93ec5587fe151e..9ebab6688bf816a6f3484626aea8f51d1fc02c6f 100644 (file)
@@ -60,9 +60,9 @@ public:
         Remember that when the target component is resized, it'll need to move and\r
         resize this component to keep it in place, as this won't happen automatically.\r
 \r
-        If the constrainer parameter is non-zero, then this object will be used to enforce\r
-        limits on the size and position that the component can be stretched to. Make sure\r
-        that the constrainer isn't deleted while still in use by this object.\r
+        If the constrainer parameter is not a nullptr, then this object will be used to\r
+        enforce limits on the size and position that the component can be stretched to.\r
+        Make sure that the constrainer isn't deleted while still in use by this object.\r
 \r
         @see ComponentBoundsConstrainer\r
     */\r
index 04907cff9e312a9a479dc28344c521976a3bdf30..ee9d20290bba261b4f3afc27a5855bee4f7fb38e 100644 (file)
@@ -321,7 +321,7 @@ int TabbedButtonBar::getNumTabs() const
 String TabbedButtonBar::getCurrentTabName() const\r
 {\r
     TabInfo* tab = tabs [currentTabIndex];\r
-    return tab == nullptr ? String::empty : tab->name;\r
+    return tab == nullptr ? String() : tab->name;\r
 }\r
 \r
 StringArray TabbedButtonBar::getTabNames() const\r
index bc8a8c92d0e6b882a35c38bf76dc3287a8a84120..edb0ba250346192b7c5c96f381ff5b95ffdfcd7f 100644 (file)
@@ -110,8 +110,13 @@ int Viewport::getMaximumVisibleHeight() const   { return contentHolder.getHeight
 Point<int> Viewport::viewportPosToCompPos (Point<int> pos) const\r
 {\r
     jassert (contentComp != nullptr);\r
-    return Point<int> (jmax (jmin (0, contentHolder.getWidth()  - contentComp->getWidth()),  jmin (0, -(pos.x))),\r
-                       jmax (jmin (0, contentHolder.getHeight() - contentComp->getHeight()), jmin (0, -(pos.y))));\r
+\r
+    Rectangle<int> contentBounds = contentHolder.getLocalArea (contentComp, contentComp->getLocalBounds());\r
+    Point<int> p (jmax (jmin (0, contentHolder.getWidth()  - contentBounds.getWidth()),  jmin (0, -(pos.x))),\r
+                  jmax (jmin (0, contentHolder.getHeight() - contentBounds.getHeight()), jmin (0, -(pos.y))));\r
+\r
+\r
+    return p.transformedBy (contentComp->getTransform().inverted());\r
 }\r
 \r
 void Viewport::setViewPosition (const int xPixelsOffset, const int yPixelsOffset)\r
index fe3d5fb45ccdeaa4f4be20b325a688278cd78fce..ee73e27709c15c3a648893eec2ee3a1715c68d53 100644 (file)
@@ -50,7 +50,7 @@ public:
         The viewport is initially empty - use the setViewedComponent() method to\r
         add a child component for it to manage.\r
     */\r
-    explicit Viewport (const String& componentName = String::empty);\r
+    explicit Viewport (const String& componentName = String());\r
 \r
     /** Destructor. */\r
     ~Viewport();\r
index 718496c69909b080c0b1421199f9fcc09b2dd310..17c4c60400adbcee82a7651c1b7b7eadc5d771c6 100644 (file)
@@ -1080,6 +1080,8 @@ Component* LookAndFeel_V2::getParentComponentForMenuOptions (const PopupMenu::Op
     return options.getParentComponent();\r
 }\r
 \r
+void LookAndFeel_V2::preparePopupMenuWindow (Component&) {}\r
+\r
 //==============================================================================\r
 void LookAndFeel_V2::fillTextEditorBackground (Graphics& g, int /*width*/, int /*height*/, TextEditor& textEditor)\r
 {\r
@@ -1174,7 +1176,7 @@ Font LookAndFeel_V2::getComboBoxFont (ComboBox& box)
 \r
 Label* LookAndFeel_V2::createComboBoxTextBox (ComboBox&)\r
 {\r
-    return new Label (String::empty, String::empty);\r
+    return new Label (String(), String());\r
 }\r
 \r
 void LookAndFeel_V2::positionComboBoxText (ComboBox& box, Label& label)\r
@@ -1452,13 +1454,13 @@ void LookAndFeel_V2::drawRotarySlider (Graphics& g, int x, int y, int width, int
 \r
 Button* LookAndFeel_V2::createSliderButton (Slider&, const bool isIncrement)\r
 {\r
-    return new TextButton (isIncrement ? "+" : "-", String::empty);\r
+    return new TextButton (isIncrement ? "+" : "-", String());\r
 }\r
 \r
 class LookAndFeel_V2::SliderLabelComp  : public Label\r
 {\r
 public:\r
-    SliderLabelComp() : Label (String::empty, String::empty) {}\r
+    SliderLabelComp() : Label (String(), String()) {}\r
 \r
     void mouseWheelMove (const MouseEvent&, const MouseWheelDetails&) {}\r
 };\r
@@ -1726,6 +1728,9 @@ void LookAndFeel_V2::drawDocumentWindowTitleBar (DocumentWindow& window, Graphic
                                                  int w, int h, int titleSpaceX, int titleSpaceW,\r
                                                  const Image* icon, bool drawTitleTextOnLeft)\r
 {\r
+    if (w * h == 0)\r
+        return;\r
+\r
     const bool isActive = window.isActiveWindow();\r
 \r
     g.setGradientFill (ColourGradient (window.getBackgroundColour(),\r
index 1633bfd03677deeeaa32466163a913a480565525..2468edeb1d54da7f54fb8cf7749cee07f222daf2 100644 (file)
@@ -162,6 +162,7 @@ public:
     void getIdealPopupMenuItemSize (const String& text, bool isSeparator, int standardMenuItemHeight,\r
                                     int& idealWidth, int& idealHeight) override;\r
     int getMenuWindowFlags() override;\r
+    void preparePopupMenuWindow (Component&) override;\r
 \r
     void drawMenuBarBackground (Graphics&, int width, int height, bool isMouseOverBar, MenuBarComponent&) override;\r
     int getMenuBarItemWidth (MenuBarComponent&, int itemIndex, const String& itemText) override;\r
index 8d746c4fc44d95ae9bfef544a5894bd8eefefecc..b979ba48106323de044f228f4caea033fe25575f 100644 (file)
@@ -143,6 +143,11 @@ void MenuBarComponent::setOpenItem (int index)
 {\r
     if (currentPopupIndex != index)\r
     {\r
+        if (currentPopupIndex < 0 && index >= 0)\r
+            model->handleMenuBarActivate (true);\r
+        else if (currentPopupIndex >= 0 && index < 0)\r
+            model->handleMenuBarActivate (false);\r
+\r
         repaintMenuItem (currentPopupIndex);\r
         currentPopupIndex = index;\r
         repaintMenuItem (currentPopupIndex);\r
index d93642ffaa76c59375466aad88a346c553552424..ccfcbc49b5229369cdd40f0a1b46dd009eda6d29 100644 (file)
@@ -82,3 +82,12 @@ void MenuBarModel::applicationCommandListChanged()
 {\r
     menuItemsChanged();\r
 }\r
+\r
+void MenuBarModel::handleMenuBarActivate (bool isActive)\r
+{\r
+    menuBarActivated (isActive);\r
+    listeners.call (&MenuBarModel::Listener::menuBarActivated, this, isActive);\r
+}\r
+\r
+void MenuBarModel::menuBarActivated (bool) {}\r
+void MenuBarModel::Listener::menuBarActivated (MenuBarModel*, bool) {}\r
index 0fc06e7f9da464214696e20a9fa30cc3375f03cd..4267661f6e1dbfd2b3827183e900f5513c4180f5 100644 (file)
@@ -88,6 +88,10 @@ public:
         */\r
         virtual void menuCommandInvoked (MenuBarModel* menuBarModel,\r
                                          const ApplicationCommandTarget::InvocationInfo& info) = 0;\r
+\r
+        /** Called when the menu bar is first activated or when the user finished interacting\r
+            with the menu bar. */\r
+        virtual void menuBarActivated (MenuBarModel* menuBarModel, bool isActive);\r
     };\r
 \r
     /** Registers a listener for callbacks when the menu items in this model change.\r
@@ -126,6 +130,12 @@ public:
     virtual void menuItemSelected (int menuItemID,\r
                                    int topLevelMenuIndex) = 0;\r
 \r
+    /** This is called when the user starts/stops navigating the maenu bar.\r
+\r
+        @param isActive              true when the user starts navigating the menu bar\r
+    */\r
+    virtual void menuBarActivated (bool isActive);\r
+\r
     //==============================================================================\r
    #if JUCE_MAC || DOXYGEN\r
     /** OSX ONLY - Sets the model that is currently being shown as the main\r
@@ -147,7 +157,7 @@ public:
     */\r
     static void setMacMainMenu (MenuBarModel* newMenuBarModel,\r
                                 const PopupMenu* extraAppleMenuItems = nullptr,\r
-                                const String& recentItemsMenuName = String::empty);\r
+                                const String& recentItemsMenuName = String());\r
 \r
     /** OSX ONLY - Returns the menu model that is currently being shown as\r
         the main menu bar.\r
@@ -167,7 +177,8 @@ public:
     void applicationCommandListChanged() override;\r
     /** @internal */\r
     void handleAsyncUpdate() override;\r
-\r
+    /** @internal */\r
+    void handleMenuBarActivate (bool isActive);\r
 private:\r
     ApplicationCommandManager* manager;\r
     ListenerList<Listener> listeners;\r
index 004bfff33fd0a238af62215ca03a5d85ab03442a..248cfd47b4bb86740160c393b28f1ab21072038b 100644 (file)
@@ -221,9 +221,11 @@ public:
         setLookAndFeel (parent != nullptr ? &(parent->getLookAndFeel())\r
                                           : menu.lookAndFeel.get());\r
 \r
-        parentComponent = getLookAndFeel().getParentComponentForMenuOptions (options);\r
+        LookAndFeel& lf = getLookAndFeel();\r
+\r
+        parentComponent = lf.getParentComponentForMenuOptions (options);\r
 \r
-        setOpaque (getLookAndFeel().findColour (PopupMenu::backgroundColourId).isOpaque()\r
+        setOpaque (lf.findColour (PopupMenu::backgroundColourId).isOpaque()\r
                      || ! Desktop::canUseSemiTransparentWindows());\r
 \r
         for (int i = 0; i < menu.items.size(); ++i)\r
@@ -259,11 +261,13 @@ public:
         {\r
             addToDesktop (ComponentPeer::windowIsTemporary\r
                           | ComponentPeer::windowIgnoresKeyPresses\r
-                          | getLookAndFeel().getMenuWindowFlags());\r
+                          | lf.getMenuWindowFlags());\r
 \r
             getActiveWindows().add (this);\r
             Desktop::getInstance().addGlobalMouseListener (this);\r
         }\r
+\r
+        lf.preparePopupMenuWindow (*this);\r
     }\r
 \r
     ~MenuWindow()\r
@@ -321,13 +325,25 @@ public:
                 *managerOfChosenCommand = item->commandManager;\r
             }\r
 \r
-            exitModalState (item != nullptr ? item->itemID : 0);\r
+            exitModalState (getResultItemID (item));\r
 \r
             if (makeInvisible && (deletionChecker != nullptr))\r
                 setVisible (false);\r
         }\r
     }\r
 \r
+    static int getResultItemID (const PopupMenu::Item* item)\r
+    {\r
+        if (item == nullptr)\r
+            return 0;\r
+\r
+        if (CustomCallback* cc = item->customCallback)\r
+            if (! cc->menuItemTriggered())\r
+                return 0;\r
+\r
+        return item->itemID;\r
+    }\r
+\r
     void dismissMenu (const PopupMenu::Item* const item)\r
     {\r
         if (parent != nullptr)\r
@@ -1279,6 +1295,7 @@ PopupMenu::Item::Item (const Item& other)
     subMenu (createCopyIfNotNull (other.subMenu.get())),\r
     image (other.image != nullptr ? other.image->createCopy() : nullptr),\r
     customComponent (other.customComponent),\r
+    customCallback (other.customCallback),\r
     commandManager (other.commandManager),\r
     shortcutKeyDescription (other.shortcutKeyDescription),\r
     colour (other.colour),\r
@@ -1296,6 +1313,7 @@ PopupMenu::Item& PopupMenu::Item::operator= (const Item& other)
     subMenu = createCopyIfNotNull (other.subMenu.get());\r
     image = (other.image != nullptr ? other.image->createCopy() : nullptr);\r
     customComponent = other.customComponent;\r
+    customCallback = other.customCallback;\r
     commandManager = other.commandManager;\r
     shortcutKeyDescription = other.shortcutKeyDescription;\r
     colour = other.colour;\r
@@ -1777,6 +1795,10 @@ void PopupMenu::CustomComponent::triggerMenuItem()
     }\r
 }\r
 \r
+//==============================================================================\r
+PopupMenu::CustomCallback::CustomCallback() {}\r
+PopupMenu::CustomCallback::~CustomCallback() {}\r
+\r
 //==============================================================================\r
 PopupMenu::MenuItemIterator::MenuItemIterator (const PopupMenu& m)  : menu (m), index (0) {}\r
 PopupMenu::MenuItemIterator::~MenuItemIterator() {}\r
index 0a7f2778a6ebfcb4b921d2521e4b1978345250e9..76b18a2e7a0e0e415afd3f871142cd0305fcf411 100644 (file)
@@ -81,6 +81,7 @@ private:
 \r
 public:\r
     class CustomComponent;\r
+    class CustomCallback;\r
 \r
     //==============================================================================\r
     /** Creates an empty popup menu. */\r
@@ -134,6 +135,9 @@ public:
         /** A custom component for the item to display, or nullptr if there isn't one. */\r
         ReferenceCountedObjectPtr<CustomComponent> customComponent;\r
 \r
+        /** A custom callback for the item to use, or nullptr if there isn't one. */\r
+        ReferenceCountedObjectPtr<CustomCallback> customCallback;\r
+\r
         /** A command manager to use to automatically invoke the command, or nullptr if none is specified. */\r
         ApplicationCommandManager* commandManager;\r
 \r
@@ -238,7 +242,7 @@ public:
     */\r
     void addCommandItem (ApplicationCommandManager* commandManager,\r
                          CommandID commandID,\r
-                         const String& displayName = String::empty,\r
+                         const String& displayName = String(),\r
                          Drawable* iconToUse = nullptr);\r
 \r
 \r
@@ -435,12 +439,12 @@ public:
                                         in zero.\r
         @param standardItemHeight       if this is non-zero, it will be used as the standard\r
                                         height for menu items (apart from custom items)\r
-        @param callback                 if this is non-zero, the menu will be launched asynchronously,\r
-                                        returning immediately, and the callback will receive a\r
-                                        call when the menu is either dismissed or has an item\r
-                                        selected. This object will be owned and deleted by the\r
-                                        system, so make sure that it works safely and that any\r
-                                        pointers that it uses are safely within scope.\r
+        @param callback                 if this is not a nullptr, the menu will be launched\r
+                                        asynchronously, returning immediately, and the callback\r
+                                        will receive a call when the menu is either dismissed or\r
+                                        has an item selected. This object will be owned and\r
+                                        deleted by the system, so make sure that it works safely\r
+                                        and that any pointers that it uses are safely within scope.\r
         @see showAt\r
     */\r
     int show (int itemIDThatMustBeVisible = 0,\r
@@ -625,6 +629,26 @@ public:
         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomComponent)\r
     };\r
 \r
+    //==============================================================================\r
+    /** A user-defined callback that can be used for specific items in a popup menu.\r
+        @see PopupMenu::Item::customCallback\r
+    */\r
+    class JUCE_API  CustomCallback  : public SingleThreadedReferenceCountedObject\r
+    {\r
+    public:\r
+        CustomCallback();\r
+        ~CustomCallback();\r
+\r
+        /** Callback to indicate this item has been triggered.\r
+            @returns true if the itemID should be sent to the exitModalState method, or\r
+                     false if it should send 0, indicating no further action should be taken\r
+        */\r
+        virtual bool menuItemTriggered() = 0;\r
+\r
+    private:\r
+        JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomCallback)\r
+    };\r
+\r
     //==============================================================================\r
     /** This abstract base class is implemented by LookAndFeel classes to provide\r
         menu drawing functionality.\r
@@ -683,6 +707,8 @@ public:
                                       MenuBarComponent&) = 0;\r
 \r
         virtual Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) = 0;\r
+\r
+        virtual void preparePopupMenuWindow (Component& newWindow) = 0;\r
     };\r
 \r
 private:\r
index 3f83081a4bf351da59619a9ec1972ce637980da5..bcc4e8488b2b7f61462fc25442f26a1149f1db76 100644 (file)
@@ -146,7 +146,7 @@ public:
     void sendMouseUp (Component& comp, Point<float> screenPos, Time time, const ModifierKeys oldMods)\r
     {\r
         JUCE_MOUSE_EVENT_DBG ("up")\r
-        comp.internalMouseUp (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, oldMods);\r
+        comp.internalMouseUp (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, oldMods, pressure);\r
     }\r
 \r
     void sendMouseWheel (Component& comp, Point<float> screenPos, Time time, const MouseWheelDetails& wheel)\r
index 764191b85ce02781512368d4e9f9664196aba76c..6535e82956dfb35152916699ae3e0f7a0ec98e46 100644 (file)
@@ -75,7 +75,7 @@ public:
 \r
             for (int i = selectedItems.size(); --i >= 0;)\r
                 if (! other.isSelected (selectedItems.getReference (i)))\r
-                    itemDeselected (selectedItems.remove (i));\r
+                    itemDeselected (selectedItems.removeAndReturn (i));\r
 \r
             for (SelectableItemType* i = other.selectedItems.begin(), *e = other.selectedItems.end(); i != e; ++i)\r
             {\r
@@ -235,7 +235,7 @@ public:
         if (i >= 0)\r
         {\r
             changed();\r
-            itemDeselected (selectedItems.remove (i));\r
+            itemDeselected (selectedItems.removeAndReturn (i));\r
         }\r
     }\r
 \r
@@ -248,7 +248,7 @@ public:
 \r
             for (int i = selectedItems.size(); --i >= 0;)\r
             {\r
-                itemDeselected (selectedItems.remove (i));\r
+                itemDeselected (selectedItems.removeAndReturn (i));\r
                 i = jmin (i, selectedItems.size());\r
             }\r
         }\r
index 0e52b97463aee3df49e94aded231655b02818f53..9183004f7b984ccaf9a581e2e981fad8a3d51819 100644 (file)
@@ -787,6 +787,7 @@ static float getMaximumTouchForce (UITouch* touch) noexcept
         return (float) touch.maximumPossibleForce;\r
    #endif\r
 \r
+    ignoreUnused (touch);\r
     return 0.0f;\r
 }\r
 \r
@@ -797,6 +798,7 @@ static float getTouchForce (UITouch* touch) noexcept
         return (float) touch.force;\r
    #endif\r
 \r
+    ignoreUnused (touch);\r
     return 0.0f;\r
 }\r
 \r
index 5896787c9fe73503a212576a6867d27dca26bb98..e81872b7bd790e37e168956a1804f9ecf36b42ab 100644 (file)
@@ -3513,7 +3513,7 @@ private:
             if (Atoms::isMimeTypeFile (dragAndDropCurrentMimeType))\r
             {\r
                 for (int i = 0; i < lines.size(); ++i)\r
-                    dragInfo.files.add (URL::removeEscapeChars (lines[i].replace ("file://", String::empty, true)));\r
+                    dragInfo.files.add (URL::removeEscapeChars (lines[i].replace ("file://", String(), true)));\r
 \r
                 dragInfo.files.trim();\r
                 dragInfo.files.removeEmptyStrings();\r
@@ -4159,7 +4159,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIcon
                                                           Component* associatedComponent,\r
                                                           ModalComponentManager::Callback* callback)\r
 {\r
-    AlertWindow::showMessageBoxAsync (iconType, title, message, String::empty, associatedComponent, callback);\r
+    AlertWindow::showMessageBoxAsync (iconType, title, message, String(), associatedComponent, callback);\r
 }\r
 \r
 bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType,\r
@@ -4167,7 +4167,7 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType
                                                       Component* associatedComponent,\r
                                                       ModalComponentManager::Callback* callback)\r
 {\r
-    return AlertWindow::showOkCancelBox (iconType, title, message, String::empty, String::empty,\r
+    return AlertWindow::showOkCancelBox (iconType, title, message, String(), String(),\r
                                          associatedComponent, callback);\r
 }\r
 \r
@@ -4177,7 +4177,7 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy
                                                         ModalComponentManager::Callback* callback)\r
 {\r
     return AlertWindow::showYesNoCancelBox (iconType, title, message,\r
-                                            String::empty, String::empty, String::empty,\r
+                                            String(), String(), String(),\r
                                             associatedComponent, callback);\r
 }\r
 \r
index 42cfd93ad61c59efd48492de1583692f8511e19c..69f4a64b0dd951887e921e34c0c7c8bcbe8eb33b 100644 (file)
@@ -151,7 +151,7 @@ void FileChooser::showPlatformDialog (Array<File>& results,
             tempMenu = new TemporaryMainMenuWithStandardCommands();\r
 \r
         StringArray* filters = new StringArray();\r
-        filters->addTokens (filter.replaceCharacters (",:", ";;"), ";", String::empty);\r
+        filters->addTokens (filter.replaceCharacters (",:", ";;"), ";", String());\r
         filters->trim();\r
         filters->removeEmptyStrings();\r
 \r
index 9888a8e67175d9eb894540dbded74c825c7f19c2..10de90b737537547af2c2b55e7b9d51656920f68 100644 (file)
@@ -39,7 +39,7 @@ public:
 \r
     ~JuceMainMenuHandler()\r
     {\r
-        setMenu (nullptr, nullptr, String::empty);\r
+        setMenu (nullptr, nullptr, String());\r
 \r
         jassert (instance == this);\r
         instance = nullptr;\r
@@ -69,23 +69,20 @@ public:
         extraAppleMenuItems = createCopyIfNotNull (newExtraAppleMenuItems);\r
     }\r
 \r
-    void addTopLevelMenu (NSMenu* parent, const PopupMenu& child,\r
-                          const String& name, const int menuId, const int tag)\r
+    void addTopLevelMenu (NSMenu* parent, const PopupMenu& child, const String& name, int menuId, int topLevelIndex)\r
     {\r
         NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name)\r
                                              action: nil\r
                                       keyEquivalent: nsEmptyString()];\r
-        [item setTag: tag];\r
 \r
-        NSMenu* sub = createMenu (child, name, menuId, tag, true);\r
+        NSMenu* sub = createMenu (child, name, menuId, topLevelIndex, true);\r
 \r
         [parent setSubmenu: sub forItem: item];\r
         [sub setAutoenablesItems: false];\r
         [sub release];\r
     }\r
 \r
-    void updateTopLevelMenu (NSMenuItem* parentItem, const PopupMenu& menuToCopy,\r
-                             const String& name, const int menuId, const int tag)\r
+    void updateTopLevelMenu (NSMenuItem* parentItem, const PopupMenu& menuToCopy, const String& name, int menuId, int topLevelIndex)\r
     {\r
         // Note: This method used to update the contents of the existing menu in-place, but that caused\r
         // weird side-effects which messed-up keyboard focus when switching between windows. By creating\r
@@ -93,11 +90,10 @@ public:
         NSMenu* menu = [[NSMenu alloc] initWithTitle: juceStringToNS (name)];\r
 \r
         for (PopupMenu::MenuItemIterator iter (menuToCopy); iter.next();)\r
-            addMenuItem (iter, menu, menuId, tag);\r
+            addMenuItem (iter, menu, menuId, topLevelIndex);\r
 \r
         [menu setAutoenablesItems: false];\r
         [menu update];\r
-        [parentItem setTag: tag];\r
         [parentItem setSubmenu: menu];\r
         [menu release];\r
     }\r
@@ -138,8 +134,10 @@ public:
 \r
     void menuCommandInvoked (MenuBarModel*, const ApplicationCommandTarget::InvocationInfo& info)\r
     {\r
-        if (NSMenuItem* item = findMenuItem ([NSApp mainMenu], info))\r
-            flashMenuBar ([item menu]);\r
+        if ((info.commandFlags & ApplicationCommandInfo::dontTriggerVisualFeedback) == 0\r
+              && info.invocationMethod != ApplicationCommandTarget::InvocationInfo::fromKeyPress)\r
+            if (NSMenuItem* item = findMenuItemWithTag ([NSApp mainMenu], info.commandID))\r
+                flashMenuBar ([item menu]);\r
     }\r
 \r
     void updateMenus (NSMenu* menu)\r
@@ -156,7 +154,7 @@ public:
             (new AsyncMenuUpdater())->post();\r
     }\r
 \r
-    void invoke (const int commandId, ApplicationCommandManager* const commandManager, const int topLevelIndex) const\r
+    void invoke (int commandId, ApplicationCommandManager* commandManager, int topLevelIndex) const\r
     {\r
         if (currentModel != nullptr)\r
         {\r
@@ -172,7 +170,7 @@ public:
         }\r
     }\r
 \r
-    void invokeDirectly (const int commandId, const int topLevelIndex)\r
+    void invokeDirectly (int commandId, int topLevelIndex)\r
     {\r
         if (currentModel != nullptr)\r
             currentModel->menuItemSelected (commandId, topLevelIndex);\r
@@ -356,16 +354,16 @@ private:
     ScopedPointer<RecentFilesMenuItem> recent;\r
 \r
     //==============================================================================\r
-    static NSMenuItem* findMenuItem (NSMenu* const menu, const ApplicationCommandTarget::InvocationInfo& info)\r
+    static NSMenuItem* findMenuItemWithTag (NSMenu* const menu, int tag)\r
     {\r
         for (NSInteger i = [menu numberOfItems]; --i >= 0;)\r
         {\r
             NSMenuItem* m = [menu itemAtIndex: i];\r
-            if ([m tag] == info.commandID)\r
+            if ([m tag] == tag)\r
                 return m;\r
 \r
             if (NSMenu* sub = [m submenu])\r
-                if (NSMenuItem* found = findMenuItem (sub, info))\r
+                if (NSMenuItem* found = findMenuItemWithTag (sub, tag))\r
                     return found;\r
         }\r
 \r
@@ -421,9 +419,8 @@ private:
         return m;\r
     }\r
 \r
-    class AsyncMenuUpdater  : public CallbackMessage\r
+    struct AsyncMenuUpdater  : public CallbackMessage\r
     {\r
-    public:\r
         AsyncMenuUpdater() {}\r
 \r
         void messageCallback() override\r
@@ -432,14 +429,12 @@ private:
                 instance->menuBarItemsChanged (nullptr);\r
         }\r
 \r
-    private:\r
         JUCE_DECLARE_NON_COPYABLE (AsyncMenuUpdater)\r
     };\r
 \r
-    class AsyncCommandInvoker  : public CallbackMessage\r
+    struct AsyncCommandInvoker  : public CallbackMessage\r
     {\r
-    public:\r
-        AsyncCommandInvoker (const int commandId_, const int topLevelIndex_)\r
+        AsyncCommandInvoker (int commandId_, int topLevelIndex_)\r
             : commandId (commandId_), topLevelIndex (topLevelIndex_)\r
         {}\r
 \r
@@ -449,9 +444,7 @@ private:
                 instance->invokeDirectly (commandId, topLevelIndex);\r
         }\r
 \r
-    private:\r
         const int commandId, topLevelIndex;\r
-\r
         JUCE_DECLARE_NON_COPYABLE (AsyncCommandInvoker)\r
     };\r
 \r
@@ -581,9 +574,8 @@ private:
     // This override is also important because it stops the base class\r
     // calling ModalComponentManager::bringToFront, which can get\r
     // recursive when file dialogs are involved\r
-    class SilentDummyModalComp  : public Component\r
+    struct SilentDummyModalComp  : public Component\r
     {\r
-    public:\r
         SilentDummyModalComp() {}\r
         void inputAttemptWhenModal() override {}\r
     };\r
@@ -728,6 +720,9 @@ static void mainMenuTrackingChanged (bool isTracking)
     {\r
         menuHandler->isOpen = isTracking;\r
 \r
+        if (MenuBarModel* model = menuHandler->currentModel)\r
+            model->handleMenuBarActivate (isTracking);\r
+\r
         if (menuHandler->defferedUpdateRequested && ! isTracking)\r
         {\r
             menuHandler->defferedUpdateRequested = false;\r
index 09a63d8af62e60964614247c723b30eb21073696..434bcf2cc5d188d3ebf4dbec35fdd279fee8710a 100644 (file)
 //==============================================================================\r
 namespace MouseCursorHelpers\r
 {\r
-    NSImage* createNSImage (const Image&);\r
-    NSImage* createNSImage (const Image& image)\r
+    NSImage* createNSImage (const Image&, float scaleFactor = 1.f);\r
+    NSImage* createNSImage (const Image& image, float scaleFactor)\r
     {\r
         JUCE_AUTORELEASEPOOL\r
         {\r
             NSImage* im = [[NSImage alloc] init];\r
-            [im setSize: NSMakeSize (image.getWidth(), image.getHeight())];\r
-            [im lockFocus];\r
+            const NSSize requiredSize = NSMakeSize (image.getWidth() / scaleFactor, image.getHeight() / scaleFactor);\r
 \r
+            [im setSize: requiredSize];\r
             CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();\r
-            CGImageRef imageRef = juce_createCoreGraphicsImage (image, colourSpace, false);\r
+            CGImageRef imageRef = juce_createCoreGraphicsImage (image, colourSpace, true);\r
             CGColorSpaceRelease (colourSpace);\r
 \r
-            CGContextRef cg = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];\r
-            CGContextDrawImage (cg, convertToCGRect (image.getBounds()), imageRef);\r
-\r
+            NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithCGImage: imageRef];\r
+            [imageRep setSize: requiredSize];\r
+            [im addRepresentation: imageRep];\r
+            [imageRep release];\r
             CGImageRelease (imageRef);\r
-            [im unlockFocus];\r
-\r
             return im;\r
         }\r
     }\r
@@ -92,6 +91,8 @@ namespace MouseCursorHelpers
                 }\r
             }\r
 \r
+            [originalImage release];\r
+\r
             NSDictionary* info = [NSDictionary dictionaryWithContentsOfFile: juceStringToNS (cursorPath + "/info.plist")];\r
 \r
             const float hotspotX = (float) [[info valueForKey: nsStringLiteral ("hotx")] doubleValue];\r
@@ -104,7 +105,7 @@ namespace MouseCursorHelpers
 \r
 void* CustomMouseCursorInfo::create() const\r
 {\r
-    return MouseCursorHelpers::fromNSImage (MouseCursorHelpers::createNSImage (image),\r
+    return MouseCursorHelpers::fromNSImage (MouseCursorHelpers::createNSImage (image, scaleFactor),\r
                                             NSMakePoint (hotspot.x, hotspot.y));\r
 }\r
 \r
index a4cea29ef20f1eb66ffe60484847c85216e5aa94..e98a7b0be7c2ec8a71b1bc92ac7754029835f286 100644 (file)
@@ -58,6 +58,10 @@ static NSRect flippedScreenRect (NSRect r) noexcept
     return r;\r
 }\r
 \r
+#if JUCE_MODULE_AVAILABLE_juce_opengl\r
+void componentPeerAboutToBeRemovedFromScreen (ComponentPeer&);\r
+#endif\r
+\r
 //==============================================================================\r
 class NSViewComponentPeer  : public ComponentPeer,\r
                              private AsyncUpdater\r
@@ -75,7 +79,10 @@ public:
           usingCoreGraphics (false),\r
          #endif\r
           isZooming (false),\r
+          isFirstLiveResize (false),\r
           textWasInserted (false),\r
+          isStretchingTop (false), isStretchingLeft (false),\r
+          isStretchingBottom (false), isStretchingRight (false),\r
           notificationCenter (nil)\r
     {\r
         appFocusChangeCallback = appFocusChanged;\r
@@ -235,9 +242,9 @@ public:
     void setRepresentedFile (const File& file) override\r
     {\r
         if (! isSharedWindow)\r
-            [window setRepresentedFilename: juceStringToNS (file != File::nonexistent\r
+            [window setRepresentedFilename: juceStringToNS (file != File()\r
                                                                 ? file.getFullPathName()\r
-                                                                : String::empty)];\r
+                                                                : String())];\r
     }\r
 \r
     void setBounds (const Rectangle<int>& newBounds, bool isNowFullScreen) override\r
@@ -669,6 +676,16 @@ public:
     void redirectPaste (NSObject*) { handleKeyPress (KeyPress ('v', ModifierKeys (ModifierKeys::commandModifier), 'v')); }\r
     void redirectCut   (NSObject*) { handleKeyPress (KeyPress ('x', ModifierKeys (ModifierKeys::commandModifier), 'x')); }\r
 \r
+    void redirectWillMoveToWindow (NSWindow* newWindow)\r
+    {\r
+       #if JUCE_MODULE_AVAILABLE_juce_opengl\r
+        if ([view window] == window && newWindow == nullptr)\r
+            componentPeerAboutToBeRemovedFromScreen (*this);\r
+       #else\r
+        ignoreUnused (newWindow);\r
+       #endif\r
+    }\r
+\r
     void sendMouseEvent (NSEvent* ev)\r
     {\r
         updateModifiers (ev);\r
@@ -874,9 +891,16 @@ public:
 \r
     void handleAsyncUpdate() override\r
     {\r
+       #if JucePlugin_Build_AAX || JucePlugin_Build_RTAS || JucePlugin_Build_AUv3 || JucePlugin_Build_AU || JucePlugin_Build_VST3 || JucePlugin_Build_VST\r
+        const bool shouldThrottle = true;\r
+       #else\r
+        const bool shouldThrottle = areAnyWindowsInLiveResize();\r
+       #endif\r
+\r
         // When windows are being resized, artificially throttling high-frequency repaints helps\r
-        // to stop the event queue getting clogged, and keeps everything working smoothly\r
-        if (areAnyWindowsInLiveResize()\r
+        // to stop the event queue getting clogged, and keeps everything working smoothly.\r
+        // For some reason Logic also needs this throttling to recored parameter events correctly.\r
+        if (shouldThrottle\r
               && Time::getCurrentTime() < lastRepaintTime + RelativeTime::milliseconds (1000 / 30))\r
         {\r
             triggerAsyncUpdate();\r
@@ -886,6 +910,7 @@ public:
         for (const Rectangle<float>* i = deferredRepaints.begin(), *e = deferredRepaints.end(); i != e; ++i)\r
             [view setNeedsDisplayInRect: makeNSRect (*i)];\r
 \r
+        lastRepaintTime = Time::getCurrentTime();\r
         deferredRepaints.clear();\r
     }\r
 \r
@@ -903,7 +928,6 @@ public:
 \r
     void invokePaint (LowLevelGraphicsContext& context)\r
     {\r
-        lastRepaintTime = Time::getCurrentTime();\r
         handlePaint (context);\r
     }\r
 \r
@@ -986,7 +1010,10 @@ public:
     void liveResizingStart()\r
     {\r
         if (constrainer != nullptr)\r
+        {\r
             constrainer->resizeStart();\r
+            isFirstLiveResize = true;\r
+        }\r
     }\r
 \r
     void liveResizingEnd()\r
@@ -1007,26 +1034,26 @@ public:
             const Rectangle<int> screenBounds (Desktop::getInstance().getDisplays().getTotalBounds (true));\r
 \r
            #if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6\r
-            if ([window inLiveResize])\r
+            const bool inLiveResize = [window inLiveResize];\r
            #else\r
-            if ([window respondsToSelector: @selector (inLiveResize)]\r
-                 && [window performSelector: @selector (inLiveResize)])\r
+            const bool inLiveResize = [window respondsToSelector: @selector (inLiveResize)]\r
+                                   && [window performSelector: @selector (inLiveResize)];\r
            #endif\r
+\r
+            if (! inLiveResize || isFirstLiveResize)\r
             {\r
-                constrainer->checkBounds (pos, original, screenBounds,\r
-                                          false, false, true, true);\r
-            }\r
-            else\r
-            {\r
-                constrainer->checkBounds (pos, original, screenBounds,\r
-                                          pos.getY() != original.getY() && pos.getBottom() == original.getBottom(),\r
-                                          pos.getX() != original.getX() && pos.getRight()  == original.getRight(),\r
-                                          pos.getY() == original.getY() && pos.getBottom() != original.getBottom(),\r
-                                          pos.getX() == original.getX() && pos.getRight()  != original.getRight());\r
+                isFirstLiveResize = false;\r
+\r
+                isStretchingTop    = (pos.getY() != original.getY() && pos.getBottom() == original.getBottom());\r
+                isStretchingLeft   = (pos.getX() != original.getX() && pos.getRight()  == original.getRight());\r
+                isStretchingBottom = (pos.getY() == original.getY() && pos.getBottom() != original.getBottom());\r
+                isStretchingRight  = (pos.getX() == original.getX() && pos.getRight()  != original.getRight());\r
             }\r
 \r
-            pos = ScalingHelpers::scaledScreenPosToUnscaled (scale, pos);\r
+            constrainer->checkBounds (pos, original, screenBounds,\r
+                                      isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight);\r
 \r
+            pos = ScalingHelpers::scaledScreenPosToUnscaled (scale, pos);\r
             r = flippedScreenRect (makeNSRect (pos));\r
         }\r
 \r
@@ -1318,7 +1345,8 @@ public:
     NSWindow* window;\r
     NSView* view;\r
     bool isSharedWindow, fullScreen;\r
-    bool usingCoreGraphics, isZooming, textWasInserted;\r
+    bool usingCoreGraphics, isZooming, isFirstLiveResize, textWasInserted;\r
+    bool isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight;\r
     String stringBeingComposed;\r
     NSNotificationCenter* notificationCenter;\r
 \r
@@ -1522,6 +1550,8 @@ struct JuceNSViewClass   : public ObjCClass<NSView>
         addMethod (@selector (copy:),                         copy,                       "v@:@");\r
         addMethod (@selector (cut:),                          cut,                        "v@:@");\r
 \r
+        addMethod (@selector (viewWillMoveToWindow:),         willMoveToWindow,           "v@:@");\r
+\r
         addProtocol (@protocol (NSTextInput));\r
 \r
         registerClass();\r
@@ -1571,6 +1601,11 @@ private:
     static void paste          (id self, SEL, NSObject* s)   { if (NSViewComponentPeer* p = getOwner (self)) p->redirectPaste      (s);  }\r
     static void cut            (id self, SEL, NSObject* s)   { if (NSViewComponentPeer* p = getOwner (self)) p->redirectCut        (s);  }\r
 \r
+    static void willMoveToWindow (id self, SEL, NSWindow* window)\r
+    {\r
+        if (NSViewComponentPeer* p = getOwner (self)) p->redirectWillMoveToWindow (window);\r
+    }\r
+\r
     static BOOL acceptsFirstMouse (id, SEL, NSEvent*)        { return YES; }\r
     static BOOL wantsDefaultClipping (id, SEL)               { return YES; } // (this is the default, but may want to customise it in future)\r
     static BOOL worksWhenModal (id self, SEL)                { if (NSViewComponentPeer* p = getOwner (self)) return p->worksWhenModal(); return NO; };\r
index ad11d4063d24a41a0c819f2f293fd4246f34bd77..a6076a422888fdbeb7fabceeff63531a3d460175 100644 (file)
@@ -147,7 +147,7 @@ void FileChooser::showPlatformDialog (Array<File>& results, const String& title_
 \r
     // use a modal window as the parent for this dialog box\r
     // to block input from other app windows\r
-    Component parentWindow (String::empty);\r
+    Component parentWindow;\r
     const Rectangle<int> mainMon (Desktop::getInstance().getDisplays().getMainDisplay().userArea);\r
     parentWindow.setBounds (mainMon.getX() + mainMon.getWidth() / 4,\r
                             mainMon.getY() + mainMon.getHeight() / 4,\r
index 264b81bd7e19e40b5f26c9aa870828160b2a3ae1..cada40a6b113f9b953ce692d56ca24f38a40ac55 100644 (file)
@@ -782,6 +782,9 @@ public:
 \r
         if (isFullScreen() != shouldBeFullScreen)\r
         {\r
+            if (constrainer != nullptr)\r
+                constrainer->resizeStart();\r
+\r
             fullScreen = shouldBeFullScreen;\r
             const WeakReference<Component> deletionChecker (&component);\r
 \r
@@ -805,6 +808,9 @@ public:
 \r
             if (deletionChecker != nullptr)\r
                 handleMovedOrResized();\r
+\r
+            if (constrainer != nullptr)\r
+                constrainer->resizeEnd();\r
         }\r
     }\r
 \r
@@ -1117,14 +1123,6 @@ public:
 \r
             ownerInfo->dragInfo.clear();\r
 \r
-            DroppedData textData (dataObject, CF_UNICODETEXT);\r
-\r
-            if (SUCCEEDED (textData.error))\r
-            {\r
-                ownerInfo->dragInfo.text = String (CharPointer_UTF16 ((const WCHAR*) textData.data),\r
-                                                   CharPointer_UTF16 ((const WCHAR*) addBytesToPointer (textData.data, textData.dataSize)));\r
-            }\r
-            else\r
             {\r
                 DroppedData fileData (dataObject, CF_HDROP);\r
 \r
@@ -1137,14 +1135,21 @@ public:
                         ownerInfo->parseFileList (static_cast<const WCHAR*> (names), fileData.dataSize);\r
                     else\r
                         ownerInfo->parseFileList (static_cast<const char*>  (names), fileData.dataSize);\r
-                }\r
-                else\r
-                {\r
-                    return fileData.error;\r
+\r
+                    return S_OK;\r
                 }\r
             }\r
 \r
-            return S_OK;\r
+            DroppedData textData (dataObject, CF_UNICODETEXT);\r
+\r
+            if (SUCCEEDED (textData.error))\r
+            {\r
+                ownerInfo->dragInfo.text = String (CharPointer_UTF16 ((const WCHAR*) textData.data),\r
+                                                   CharPointer_UTF16 ((const WCHAR*) addBytesToPointer (textData.data, textData.dataSize)));\r
+                return S_OK;\r
+            }\r
+\r
+            return textData.error;\r
         }\r
 \r
         JUCE_DECLARE_NON_COPYABLE (JuceDropTarget)\r
@@ -1967,6 +1972,7 @@ private:
     bool handleTouchInput (const TOUCHINPUT& touch, const bool isDown, const bool isUp)\r
     {\r
         bool isCancel = false;\r
+\r
         const int touchIndex = currentTouches.getIndexOfTouch (touch.dwID);\r
         const int64 time = getMouseEventTime();\r
         const Point<float> pos (globalToLocal (Point<float> (touch.x / 100.0f,\r
@@ -2697,6 +2703,16 @@ private:
                     break;\r
 \r
                 case SC_KEYMENU:\r
+                   #if ! JUCE_WINDOWS_ALT_KEY_TRIGGERS_MENU\r
+                    // This test prevents a press of the ALT key from triggering the ancient top-left window menu.\r
+                    // By default we suppress this behaviour because it's unlikely that more than a tiny subset of\r
+                    // our users will actually want it, and it causes problems if you're trying to use the ALT key\r
+                    // as a modifier for mouse actions. If you really need the old behaviour, then just define\r
+                    // JUCE_WINDOWS_ALT_KEY_TRIGGERS_MENU=1 in your app.\r
+                    if ((lParam >> 16) <= 0) // Values above zero indicate that a mouse-click triggered the menu\r
+                        return 0;\r
+                   #endif\r
+\r
                     // (NB mustn't call sendInputAttemptWhenModalMessage() here because of very obscure\r
                     // situations that can arise if a modal loop is started from an alt-key keypress).\r
                     if (hasTitleBar() && h == GetCapture())\r
index 99eccbd9cadcc261ac3c0fa642643c20ce23e1ca..d13fa0e4b164cffeadfa1b40fb61437229ab7d65 100644 (file)
@@ -238,7 +238,7 @@ void PropertyPanel::addProperties (const Array<PropertyComponent*>& newPropertie
     if (isEmpty())\r
         repaint();\r
 \r
-    propertyHolderComponent->insertSection (-1, new SectionComponent (String::empty, newProperties, true));\r
+    propertyHolderComponent->insertSection (-1, new SectionComponent (String(), newProperties, true));\r
     updatePropHolderLayout();\r
 }\r
 \r
index 43615b95019fa8e164077d15cef4e8001c184a1c..aca85988e9bc1b7e39cd3899144939a431c62b39 100644 (file)
@@ -149,6 +149,10 @@ public:
     */\r
     const String& getMessageWhenEmpty() const noexcept;\r
 \r
+    //==============================================================================\r
+    /** Returns the PropertyPanel's internal Viewport. */\r
+    Viewport& getViewport() noexcept        { return viewport; }\r
+\r
     //==============================================================================\r
     /** @internal */\r
     void paint (Graphics&) override;\r
index 75c4581d752fce27337bed60a74fae0f5c2783fa..46ee985ada34135912e5d7ce86e9618623589f7a 100644 (file)
@@ -26,13 +26,14 @@ SliderPropertyComponent::SliderPropertyComponent (const String& name,
                                                   const double rangeMin,\r
                                                   const double rangeMax,\r
                                                   const double interval,\r
-                                                  const double skewFactor)\r
+                                                  const double skewFactor,\r
+                                                  bool symmetricSkew)\r
     : PropertyComponent (name)\r
 {\r
     addAndMakeVisible (slider);\r
 \r
     slider.setRange (rangeMin, rangeMax, interval);\r
-    slider.setSkewFactor (skewFactor);\r
+    slider.setSkewFactor (skewFactor, symmetricSkew);\r
     slider.setSliderStyle (Slider::LinearBar);\r
 \r
     slider.addListener (this);\r
@@ -43,13 +44,14 @@ SliderPropertyComponent::SliderPropertyComponent (const Value& valueToControl,
                                                   const double rangeMin,\r
                                                   const double rangeMax,\r
                                                   const double interval,\r
-                                                  const double skewFactor)\r
+                                                  const double skewFactor,\r
+                                                  bool symmetricSkew)\r
     : PropertyComponent (name)\r
 {\r
     addAndMakeVisible (slider);\r
 \r
     slider.setRange (rangeMin, rangeMax, interval);\r
-    slider.setSkewFactor (skewFactor);\r
+    slider.setSkewFactor (skewFactor, symmetricSkew);\r
     slider.setSliderStyle (Slider::LinearBar);\r
 \r
     slider.getValueObject().referTo (valueToControl);\r
index 35983df68df8eb579568b4aafafde160fc0661e2..d45e448b87b64476941b8e1afbe33c27a2be8821 100644 (file)
@@ -48,7 +48,8 @@ protected:
                              double rangeMin,\r
                              double rangeMax,\r
                              double interval,\r
-                             double skewFactor = 1.0);\r
+                             double skewFactor = 1.0,\r
+                             bool symmetricSkew = false);\r
 \r
 public:\r
     //==============================================================================\r
@@ -68,7 +69,8 @@ public:
                              double rangeMin,\r
                              double rangeMax,\r
                              double interval,\r
-                             double skewFactor = 1.0);\r
+                             double skewFactor = 1.0,\r
+                             bool symmetricSkew = false);\r
 \r
     /** Destructor. */\r
     ~SliderPropertyComponent();\r
index f765cd0a0f7b7ec899a33e53f61773ae78743a41..5a52f9c61036e4261cbae60bd90d2af344b2a564 100644 (file)
@@ -27,7 +27,7 @@ class TextPropertyComponent::LabelComp  : public Label,
 {\r
 public:\r
     LabelComp (TextPropertyComponent& tpc, const int charLimit, const bool multiline)\r
-        : Label (String::empty, String::empty),\r
+        : Label (String(), String()),\r
           owner (tpc),\r
           maxChars (charLimit),\r
           isMultiline (multiline)\r
index 2b16bbdc53dc9b6d505308e99e03946c7bf3bfd4..de9d467dd49aa1b9b6d550b16bceffd8989e4080 100644 (file)
@@ -38,8 +38,10 @@ protected:
     //==============================================================================\r
     /** Creates a text property component.\r
 \r
-        The maxNumChars is used to set the length of string allowable, and isMultiLine\r
-        sets whether the text editor allows carriage returns.\r
+        @param propertyName  The name of the property\r
+        @param maxNumChars   If not zero, then this specifies the maximum allowable length of\r
+                             the string. If zero, then the string will have no length limit.\r
+        @param isMultiLine   isMultiLine sets whether the text editor allows carriage returns.\r
 \r
         @see TextEditor\r
     */\r
@@ -50,8 +52,11 @@ protected:
 public:\r
     /** Creates a text property component.\r
 \r
-        The maxNumChars is used to set the length of string allowable, and isMultiLine\r
-        sets whether the text editor allows carriage returns.\r
+        @param valueToControl The Value that is controlled by the TextPropertyCOmponent\r
+        @param propertyName   The name of the property\r
+        @param maxNumChars    If not zero, then this specifies the maximum allowable length of\r
+                              the string. If zero, then the string will have no length limit.\r
+        @param isMultiLine    isMultiLine sets whether the text editor allows carriage returns.\r
 \r
         @see TextEditor\r
     */\r
index 68e1c23890bb131ce0a18d58707949673365d64e..13fc1644c9747f942536d4bc13bdeed31b36fbaa 100644 (file)
@@ -46,7 +46,8 @@ ComboBox::ComboBox (const String& name)
       menuActive (false),\r
       scrollWheelEnabled (false),\r
       mouseWheelAccumulator (0),\r
-      noChoicesMessage (TRANS("(no choices)"))\r
+      noChoicesMessage (TRANS("(no choices)")),\r
+      labelEditableState (editableUnknown)\r
 {\r
     setRepaintsOnMouseActivity (true);\r
     lookAndFeelChanged();\r
@@ -66,7 +67,9 @@ void ComboBox::setEditableText (const bool isEditable)
     if (label->isEditableOnSingleClick() != isEditable || label->isEditableOnDoubleClick() != isEditable)\r
     {\r
         label->setEditable (isEditable, isEditable, false);\r
-        setWantsKeyboardFocus (! isEditable);\r
+        labelEditableState = (isEditable ? labelIsEditable : labelIsNotEditable);\r
+\r
+        setWantsKeyboardFocus (labelEditableState == labelIsNotEditable);\r
         resized();\r
     }\r
 }\r
@@ -109,7 +112,7 @@ void ComboBox::addItem (const String& newItemText, const int newItemId)
         if (separatorPending)\r
         {\r
             separatorPending = false;\r
-            items.add (new ItemInfo (String::empty, 0, false, false));\r
+            items.add (new ItemInfo (String(), 0, false, false));\r
         }\r
 \r
         items.add (new ItemInfo (newItemText, newItemId, true, false));\r
@@ -137,7 +140,7 @@ void ComboBox::addSectionHeading (const String& headingName)
         if (separatorPending)\r
         {\r
             separatorPending = false;\r
-            items.add (new ItemInfo (String::empty, 0, false, false));\r
+            items.add (new ItemInfo (String(), 0, false, false));\r
         }\r
 \r
         items.add (new ItemInfo (headingName, 0, true, true));\r
@@ -216,7 +219,7 @@ String ComboBox::getItemText (const int index) const
     if (const ItemInfo* const item = getItemForIndex (index))\r
         return item->name;\r
 \r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 int ComboBox::getItemId (const int index) const noexcept\r
@@ -271,7 +274,7 @@ int ComboBox::getSelectedId() const noexcept
 void ComboBox::setSelectedId (const int newItemId, const NotificationType notification)\r
 {\r
     const ItemInfo* const item = getItemForId (newItemId);\r
-    const String newItemText (item != nullptr ? item->name : String::empty);\r
+    const String newItemText (item != nullptr ? item->name : String());\r
 \r
     if (lastCurrentId != newItemId || label->getText() != newItemText)\r
     {\r
@@ -437,7 +440,14 @@ void ComboBox::lookAndFeelChanged()
     }\r
 \r
     addAndMakeVisible (label);\r
-    setWantsKeyboardFocus (! label->isEditable());\r
+\r
+    EditableState newEditableState = (label->isEditable() ? labelIsEditable : labelIsNotEditable);\r
+\r
+    if (newEditableState != labelEditableState)\r
+    {\r
+        labelEditableState = newEditableState;\r
+        setWantsKeyboardFocus (labelEditableState == labelIsNotEditable);\r
+    }\r
 \r
     label->addListener (this);\r
     label->addMouseListener (this, false);\r
index 515e5d2e5fc8f7cc9b523ce823da764c2c27ae7e..ca05da6c997c75195ad4742365a3751a45067d77 100644 (file)
@@ -57,7 +57,7 @@ public:
 \r
         @param componentName    the name to set for the component (see Component::setName())\r
     */\r
-    explicit ComboBox (const String& componentName = String::empty);\r
+    explicit ComboBox (const String& componentName = String());\r
 \r
     /** Destructor. */\r
     ~ComboBox();\r
@@ -427,6 +427,13 @@ private:
         bool isEnabled : 1, isHeading : 1;\r
     };\r
 \r
+    enum EditableState\r
+    {\r
+        editableUnknown,\r
+        labelIsNotEditable,\r
+        labelIsEditable\r
+    };\r
+\r
     OwnedArray<ItemInfo> items;\r
     Value currentId;\r
     int lastCurrentId;\r
@@ -435,6 +442,7 @@ private:
     ListenerList<Listener> listeners;\r
     ScopedPointer<Label> label;\r
     String textWhenNothingSelected, noChoicesMessage;\r
+    EditableState labelEditableState;\r
 \r
     ItemInfo* getItemForId (int) const noexcept;\r
     ItemInfo* getItemForIndex (int) const noexcept;\r
index 584f35fb8f46c8b42c8cd0f3d8740722e336a8e8..0c7bad43d639fce2fcad4640d7c7f2f2ad9b6fa8 100644 (file)
@@ -38,7 +38,7 @@ class JUCE_API  ImageComponent  : public Component,
 public:\r
     //==============================================================================\r
     /** Creates an ImageComponent. */\r
-    ImageComponent (const String& componentName = String::empty);\r
+    ImageComponent (const String& componentName = String());\r
 \r
     /** Destructor. */\r
     ~ImageComponent();\r
index 8c18f690f3b57d6a5930224bd50f57d636800bed..dfb74ef00e43a46043048ff7225071f10c8b3acc 100644 (file)
@@ -44,8 +44,8 @@ public:
         @param componentName    the name to give the component\r
         @param labelText        the text to show in the label\r
     */\r
-    Label (const String& componentName = String::empty,\r
-           const String& labelText = String::empty);\r
+    Label (const String& componentName = String(),\r
+           const String& labelText = String());\r
 \r
     /** Destructor. */\r
     ~Label();\r
index 6445402f7e349b787c400d13cbe35021ccb2f9ce..5aa9ff58a3e40cdd5acee6c301f06c3cab70f822 100644 (file)
@@ -138,7 +138,7 @@ public:
         if (ListBoxModel* m = owner.getModel())\r
             return m->getTooltipForRow (row);\r
 \r
-        return String::empty;\r
+        return String();\r
     }\r
 \r
     ScopedPointer<Component> customComponent;\r
@@ -552,7 +552,7 @@ SparseSet<int> ListBox::getSelectedRows() const
     return selected;\r
 }\r
 \r
-void ListBox::selectRangeOfRows (int firstRow, int lastRow)\r
+void ListBox::selectRangeOfRows (int firstRow, int lastRow, bool dontScrollToShowThisRange)\r
 {\r
     if (multipleSelection && (firstRow != lastRow))\r
     {\r
@@ -566,7 +566,7 @@ void ListBox::selectRangeOfRows (int firstRow, int lastRow)
         selected.removeRange (Range<int> (lastRow, lastRow + 1));\r
     }\r
 \r
-    selectRowInternal (lastRow, false, false, true);\r
+    selectRowInternal (lastRow, dontScrollToShowThisRange, false, true);\r
 }\r
 \r
 void ListBox::flipRowSelection (const int row)\r
@@ -964,5 +964,5 @@ void ListBoxModel::deleteKeyPressed (int) {}
 void ListBoxModel::returnKeyPressed (int) {}\r
 void ListBoxModel::listWasScrolled() {}\r
 var ListBoxModel::getDragSourceDescription (const SparseSet<int>&)      { return var(); }\r
-String ListBoxModel::getTooltipForRow (int)                             { return String::empty; }\r
+String ListBoxModel::getTooltipForRow (int)                             { return String(); }\r
 MouseCursor ListBoxModel::getMouseCursorForRow (int)                    { return MouseCursor::NormalCursor; }\r
index 5a5c3a4a4fe10ceb4f36c2f377c24290e278674c..436be0f299e10645066f87dd9079b56733fb8935 100644 (file)
@@ -184,7 +184,7 @@ public:
         The model pointer passed-in can be null, in which case you can set it later\r
         with setModel().\r
     */\r
-    ListBox (const String& componentName = String::empty,\r
+    ListBox (const String& componentName = String(),\r
              ListBoxModel* model = nullptr);\r
 \r
     /** Destructor. */\r
@@ -265,11 +265,15 @@ public:
         This will add these rows to the current selection, so you might need to\r
         clear the current selection first with deselectAllRows()\r
 \r
-        @param firstRow     the first row to select (inclusive)\r
-        @param lastRow      the last row to select (inclusive)\r
+        @param firstRow                       the first row to select (inclusive)\r
+        @param lastRow                        the last row to select (inclusive)\r
+        @param dontScrollToShowThisRange      if true, the list's position won't change; if false and\r
+                                              the selected range is off-screen, it'll scroll to make\r
+                                              sure that the range of rows is on-screen\r
     */\r
     void selectRangeOfRows (int firstRow,\r
-                            int lastRow);\r
+                            int lastRow,\r
+                            bool dontScrollToShowThisRange = false);\r
 \r
     /** Deselects a row.\r
         If it's not currently selected, this will do nothing.\r
index 75aaddc932d8555267f44fb590708d3d15fc53d6..86c13d34d637b981ca444f3948443f927c0366a2 100644 (file)
@@ -33,7 +33,7 @@ public:
         style (sliderStyle),\r
         lastCurrentValue (0), lastValueMin (0), lastValueMax (0),\r
         minimum (0), maximum (10), interval (0), doubleClickReturnValue (0),\r
-        skewFactor (1.0), velocityModeSensitivity (1.0),\r
+        skewFactor (1.0), symmetricSkew (false), velocityModeSensitivity (1.0),\r
         velocityModeOffset (0.0), velocityModeThreshold (1),\r
         sliderRegionStart (0), sliderRegionSize (1), sliderBeingDragged (-1),\r
         pixelsForFullDragExtent (250),\r
@@ -477,8 +477,8 @@ public:
     void setSkewFactorFromMidPoint (const double sliderValueToShowAtMidPoint)\r
     {\r
         if (maximum > minimum)\r
-            skewFactor = log (0.5) / log ((sliderValueToShowAtMidPoint - minimum)\r
-                                            / (maximum - minimum));\r
+            skewFactor = std::log (0.5) / std::log ((sliderValueToShowAtMidPoint - minimum)\r
+                                        / (maximum - minimum));\r
     }\r
 \r
     void setIncDecButtonsMode (const IncDecButtonMode mode)\r
@@ -777,13 +777,16 @@ public:
 \r
     void handleVelocityDrag (const MouseEvent& e)\r
     {\r
-        const float mouseDiff = style == RotaryHorizontalVerticalDrag\r
-                                   ? (e.position.x - mousePosWhenLastDragged.x) + (mousePosWhenLastDragged.y - e.position.y)\r
-                                   : (isHorizontal()\r
-                                       || style == RotaryHorizontalDrag\r
-                                       || (style == IncDecButtons && incDecDragDirectionIsHorizontal()))\r
-                                         ? e.position.x - mousePosWhenLastDragged.x\r
-                                         : e.position.y - mousePosWhenLastDragged.y;\r
+        const bool hasHorizontalStyle =\r
+            (isHorizontal() ||  style == RotaryHorizontalDrag\r
+                            || (style == IncDecButtons && incDecDragDirectionIsHorizontal()));\r
+\r
+        float mouseDiff;\r
+        if (style == RotaryHorizontalVerticalDrag)\r
+            mouseDiff = (e.position.x - mousePosWhenLastDragged.x) + (mousePosWhenLastDragged.y - e.position.y);\r
+        else\r
+            mouseDiff = (hasHorizontalStyle ? e.position.x - mousePosWhenLastDragged.x\r
+                                            : e.position.y - mousePosWhenLastDragged.y);\r
 \r
         const double maxSpeed = jmax (200, sliderRegionSize);\r
         double speed = jlimit (0.0, maxSpeed, (double) std::abs (mouseDiff));\r
@@ -1181,6 +1184,7 @@ public:
     double lastCurrentValue, lastValueMin, lastValueMax;\r
     double minimum, maximum, interval, doubleClickReturnValue;\r
     double valueWhenLastDragged, valueOnMouseDown, skewFactor, lastAngle;\r
+    bool symmetricSkew;\r
     double velocityModeSensitivity, velocityModeOffset, minMaxDiff;\r
     int velocityModeThreshold;\r
     RotaryParameters rotaryParams;\r
@@ -1318,7 +1322,6 @@ void Slider::setRotaryParameters (RotaryParameters p) noexcept
     // make sure the values are sensible..\r
     jassert (p.startAngleRadians >= 0 && p.endAngleRadians >= 0);\r
     jassert (p.startAngleRadians < float_Pi * 4.0f && p.endAngleRadians < float_Pi * 4.0f);\r
-    jassert (p.startAngleRadians < p.endAngleRadians);\r
 \r
     pimpl->rotaryParams = p;\r
 }\r
@@ -1352,11 +1355,18 @@ void Slider::setVelocityModeParameters (const double sensitivity, const int thre
 }\r
 \r
 double Slider::getSkewFactor() const noexcept               { return pimpl->skewFactor; }\r
-void Slider::setSkewFactor (const double factor)            { pimpl->skewFactor = factor; }\r
+bool Slider::isSymmetricSkew() const noexcept               { return pimpl->symmetricSkew; }\r
+\r
+void Slider::setSkewFactor (double factor, bool symmetricSkew)\r
+{\r
+    pimpl->skewFactor = factor;\r
+    pimpl->symmetricSkew = symmetricSkew;\r
+}\r
 \r
 void Slider::setSkewFactorFromMidPoint (const double sliderValueToShowAtMidPoint)\r
 {\r
     pimpl->setSkewFactorFromMidPoint (sliderValueToShowAtMidPoint);\r
+    pimpl->symmetricSkew = false;\r
 }\r
 \r
 int Slider::getMouseDragSensitivity() const noexcept        { return pimpl->pixelsForFullDragExtent; }\r
@@ -1495,10 +1505,21 @@ double Slider::proportionOfLengthToValue (double proportion)
 {\r
     const double skew = getSkewFactor();\r
 \r
-    if (skew != 1.0 && proportion > 0.0)\r
-        proportion = exp (log (proportion) / skew);\r
+    if (! isSymmetricSkew())\r
+    {\r
+        if (skew != 1.0 && proportion > 0.0)\r
+            proportion = std::exp (std::log (proportion) / skew);\r
+\r
+        return getMinimum() + (getMaximum() - getMinimum()) * proportion;\r
+    }\r
+\r
+    double distanceFromMiddle = 2.0 * proportion - 1.0;\r
 \r
-    return getMinimum() + (getMaximum() - getMinimum()) * proportion;\r
+    if (skew != 1.0 && distanceFromMiddle != 0.0)\r
+        distanceFromMiddle =  std::exp (std::log (std::abs (distanceFromMiddle)) / skew)\r
+                                     * (distanceFromMiddle < 0 ? -1 : 1);\r
+\r
+    return getMinimum() + (getMaximum() - getMinimum()) / 2.0 * (1 + distanceFromMiddle);\r
 }\r
 \r
 double Slider::valueToProportionOfLength (double value)\r
@@ -1506,7 +1527,14 @@ double Slider::valueToProportionOfLength (double value)
     const double n = (value - getMinimum()) / (getMaximum() - getMinimum());\r
     const double skew = getSkewFactor();\r
 \r
-    return skew == 1.0 ? n : pow (n, skew);\r
+    if (skew == 1.0)\r
+        return n;\r
+\r
+    if (! isSymmetricSkew())\r
+        return std::pow (n, skew);\r
+\r
+    double distanceFromMiddle = 2.0 * n - 1.0;\r
+    return (1.0 + std::pow (std::abs (distanceFromMiddle), skew) * (distanceFromMiddle < 0 ? -1 : 1)) / 2.0;\r
 }\r
 \r
 double Slider::snapValue (double attemptedValue, DragMode)\r
index 29c89de8e14de41231cd79e909f1f8f5b127a65b..e7cd686d4cab6561a124b84b8428a68c4b5dcd76 100644 (file)
@@ -244,28 +244,37 @@ public:
         slider's length; if the factor is > 1.0, the upper end of the range\r
         will be expanded instead. A factor of 1.0 doesn't skew it at all.\r
 \r
+        If symmetricSkew is true, the skew factor applies from the middle of the slider\r
+        to each of its ends.\r
+\r
         To set the skew position by using a mid-point, use the setSkewFactorFromMidPoint()\r
         method instead.\r
 \r
-        @see getSkewFactor, setSkewFactorFromMidPoint\r
+        @see getSkewFactor, setSkewFactorFromMidPoint, isSymmetricSkew\r
     */\r
-    void setSkewFactor (double factor);\r
+    void setSkewFactor (double factor, bool symmetricSkew = false);\r
 \r
     /** Sets up a skew factor to alter the way values are distributed.\r
 \r
         This allows you to specify the slider value that should appear in the\r
         centre of the slider's visible range.\r
 \r
-        @see setSkewFactor, getSkewFactor\r
+        @see setSkewFactor, getSkewFactor, isSymmetricSkew\r
      */\r
     void setSkewFactorFromMidPoint (double sliderValueToShowAtMidPoint);\r
 \r
     /** Returns the current skew factor.\r
         See setSkewFactor for more info.\r
-        @see setSkewFactor, setSkewFactorFromMidPoint\r
+        @see setSkewFactor, setSkewFactorFromMidPoint, isSymmetricSkew\r
     */\r
     double getSkewFactor() const noexcept;\r
 \r
+    /** Returns the whether the skew is symmetric from the midpoint to both sides.\r
+        See setSkewFactor for more info.\r
+        @see getSkewFactor, setSkewFactor, setSkewFactorFromMidPoint\r
+     */\r
+    bool isSymmetricSkew() const noexcept;\r
+\r
     //==============================================================================\r
     /** Used by setIncDecButtonsMode().\r
     */\r
index 13fee7e23dcc1d394209bb0030d42c781b0aa1fc..8f2fdf5ec239dd70d746d75e6dce5f1be5d0f4c3 100644 (file)
@@ -95,7 +95,7 @@ String TableHeaderComponent::getColumnName (const int columnId) const
     if (const ColumnInfo* const ci = getInfoForId (columnId))\r
         return ci->name;\r
 \r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 void TableHeaderComponent::setColumnName (const int columnId, const String& newName)\r
index 41b8f4d8255fc45c66f18226c338e1a097ebb016..73b04297feadf871be71f57a53faf8a14415f0b2 100644 (file)
@@ -915,6 +915,7 @@ TextEditor::TextEditor (const String& name,
       menuActive (false),\r
       valueTextNeedsUpdating (false),\r
       consumeEscAndReturnKeys (true),\r
+      styleChanged (false),\r
       leftIndent (4),\r
       topIndent (4),\r
       lastTransactionTime (0),\r
@@ -1080,6 +1081,7 @@ void TextEditor::colourChanged()
 {\r
     setOpaque (findColour (backgroundColourId).isOpaque());\r
     repaint();\r
+    styleChanged = true;\r
 }\r
 \r
 void TextEditor::lookAndFeelChanged()\r
@@ -1186,7 +1188,7 @@ void TextEditor::setText (const String& newText,
 {\r
     const int newLength = newText.length();\r
 \r
-    if (newLength != getTotalNumChars() || getText() != newText)\r
+    if (newLength != getTotalNumChars() || getText() != newText || styleChanged)\r
     {\r
         textValue = newText;\r
 \r
@@ -1212,6 +1214,8 @@ void TextEditor::setText (const String& newText,
         scrollToMakeSureCursorIsVisible();\r
         undoManager.clearUndoHistory();\r
 \r
+        styleChanged = false;\r
+\r
         repaint();\r
     }\r
 }\r
index 6d2bd5fb19d341dccef5496913869cacdd1c38f4..573909d45dfaa269c745c2fc9787c39297d21e89 100644 (file)
@@ -684,6 +684,7 @@ private:
     bool menuActive;\r
     bool valueTextNeedsUpdating;\r
     bool consumeEscAndReturnKeys;\r
+    bool styleChanged;\r
 \r
     UndoManager undoManager;\r
     ScopedPointer<CaretComponent> caret;\r
index c9362c23b5f39579b9bac1020071b2744b3e5aa2..5c450d9888135b3613908cb873443a4fa0ed4866 100644 (file)
@@ -29,7 +29,7 @@ class Toolbar::Spacer  : public ToolbarItemComponent
 {\r
 public:\r
     Spacer (const int itemId_, const float fixedSize_, const bool drawBar_)\r
-        : ToolbarItemComponent (itemId_, String::empty, false),\r
+        : ToolbarItemComponent (itemId_, String(), false),\r
           fixedSize (fixedSize_),\r
           drawBar (drawBar_)\r
     {\r
@@ -178,7 +178,7 @@ public:
                 if (ToolbarItemComponent* const tc = dynamic_cast<ToolbarItemComponent*> (getChildComponent (i)))\r
                 {\r
                     tc->setVisible (false);\r
-                    const int index = oldIndexes.remove (i);\r
+                    const int index = oldIndexes.removeAndReturn (i);\r
                     owner->addChildComponent (tc, index);\r
                     --i;\r
                 }\r
@@ -709,9 +709,9 @@ private:
     public:\r
         CustomiserPanel (ToolbarItemFactory& tbf, Toolbar& bar, int optionFlags)\r
           : factory (tbf), toolbar (bar), palette (tbf, bar),\r
-            instructions (String::empty, TRANS ("You can drag the items above and drop them onto a toolbar to add them.")\r
-                                          + "\n\n"\r
-                                          + TRANS ("Items on the toolbar can also be dragged around to change their order, or dragged off the edge to delete them.")),\r
+            instructions (String(), TRANS ("You can drag the items above and drop them onto a toolbar to add them.")\r
+                                      + "\n\n"\r
+                                      + TRANS ("Items on the toolbar can also be dragged around to change their order, or dragged off the edge to delete them.")),\r
             defaultButton (TRANS ("Restore to default set of items"))\r
         {\r
             addAndMakeVisible (palette);\r
index 973808274f53814879abc72da5eb9e37f917209e..b4b34187855b02f51af0c0f5d589d4c6a98220a9 100644 (file)
@@ -861,7 +861,7 @@ void TreeView::recalculateIfNeeded()
         if (rootItem != nullptr)\r
         {\r
             viewport->getViewedComponent()\r
-                ->setSize (jmax (viewport->getMaximumVisibleWidth(), rootItem->totalWidth),\r
+                ->setSize (jmax (viewport->getMaximumVisibleWidth(), rootItem->totalWidth + 50),\r
                            rootItem->totalHeight - (rootItemVisible ? 0 : rootItem->itemHeight));\r
         }\r
         else\r
@@ -1091,7 +1091,7 @@ void TreeView::fileDragEnter (const StringArray& files, int x, int y)
 \r
 void TreeView::fileDragMove (const StringArray& files, int x, int y)\r
 {\r
-    handleDrag (files, SourceDetails (String::empty, this, Point<int> (x, y)));\r
+    handleDrag (files, SourceDetails (String(), this, Point<int> (x, y)));\r
 }\r
 \r
 void TreeView::fileDragExit (const StringArray&)\r
@@ -1101,7 +1101,7 @@ void TreeView::fileDragExit (const StringArray&)
 \r
 void TreeView::filesDropped (const StringArray& files, int x, int y)\r
 {\r
-    handleDrop (files, SourceDetails (String::empty, this, Point<int> (x, y)));\r
+    handleDrop (files, SourceDetails (String(), this, Point<int> (x, y)));\r
 }\r
 \r
 bool TreeView::isInterestedInDragSource (const SourceDetails& /*dragSourceDetails*/)\r
@@ -1156,7 +1156,7 @@ TreeViewItem::~TreeViewItem()
 \r
 String TreeViewItem::getUniqueName() const\r
 {\r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 void TreeViewItem::itemOpennessChanged (bool)\r
@@ -1378,7 +1378,7 @@ void TreeViewItem::itemSelectionChanged (bool)
 \r
 String TreeViewItem::getTooltip()\r
 {\r
-    return String::empty;\r
+    return String();\r
 }\r
 \r
 void TreeViewItem::ownerViewChanged (TreeView*)\r
@@ -1755,6 +1755,9 @@ int TreeViewItem::getRowNumberInTree() const noexcept
 {\r
     if (parentItem != nullptr && ownerView != nullptr)\r
     {\r
+        if (! parentItem->isOpen())\r
+            return parentItem->getRowNumberInTree();\r
+\r
         int n = 1 + parentItem->getRowNumberInTree();\r
 \r
         int ourIndex = parentItem->subItems.indexOf (this);\r
index 1ab9c0c7544474e64ecdeed76ece750072c2ba1e..78c064b4f46fb5d8d809c21d938de75ff772d161 100644 (file)
@@ -645,7 +645,7 @@ public:
         Once you've got a treeview component, you'll need to give it something to\r
         display, using the setRootItem() method.\r
     */\r
-    TreeView (const String& componentName = String::empty);\r
+    TreeView (const String& componentName = String());\r
 \r
     /** Destructor. */\r
     ~TreeView();\r
index 19c9468829241a7870fde583dc5f5b386918965b..0e02c30c1b1c9d2412a5a1718f54429dc251d3c4 100644 (file)
@@ -593,6 +593,8 @@ private:
 \r
         jassert (alertBox != nullptr); // you have to return one of these!\r
 \r
+        alertBox->setAlwaysOnTop (juce_areThereAnyAlwaysOnTopWindows());\r
+\r
        #if JUCE_MODAL_LOOPS_PERMITTED\r
         if (modal)\r
         {\r
index 55bf4202459457a9462fb33ebc112d291bf3cb57..4e6094105511ff7a05e27717c4748ff0c7baa80d 100644 (file)
@@ -41,7 +41,11 @@ CallOutBox::CallOutBox (Component& c, const Rectangle<int>& area, Component* con
                                 .getDisplayContaining (area.getCentre()).userArea);\r
 \r
         addToDesktop (ComponentPeer::windowIsTemporary);\r
+\r
+        startTimer (100);\r
     }\r
+\r
+    creationTime = Time::getCurrentTime();\r
 }\r
 \r
 CallOutBox::~CallOutBox()\r
@@ -129,7 +133,14 @@ void CallOutBox::inputAttemptWhenModal()
         // if you click on the area that originally popped-up the callout, you expect it\r
         // to get rid of the box, but deleting the box here allows the click to pass through and\r
         // probably re-trigger it, so we need to dismiss the box asynchronously to consume the click..\r
-        dismiss();\r
+\r
+        // For touchscreens, we make sure not to dismiss the CallOutBox immediately,\r
+        // as Windows still sends touch events before the CallOutBox had a chance\r
+        // to really open.\r
+\r
+        RelativeTime elapsed = Time::getCurrentTime() - creationTime;\r
+        if (elapsed.inMilliseconds() > 200)\r
+            dismiss();\r
     }\r
     else\r
     {\r
@@ -240,3 +251,9 @@ void CallOutBox::refreshPath()
                        targetPoint - getPosition().toFloat(),\r
                        9.0f, arrowSize * 0.7f);\r
 }\r
+\r
+void CallOutBox::timerCallback()\r
+{\r
+    toFront (true);\r
+    stopTimer();\r
+}\r
index 6ff5990b0dd0b5b9941826c18321947abc1947cc..1e598eb219849ec4f2e08b8a5105af45d8533f16 100644 (file)
@@ -53,7 +53,8 @@
 \r
     The call-out will resize and position itself when the content changes size.\r
 */\r
-class JUCE_API  CallOutBox    : public Component\r
+class JUCE_API  CallOutBox    : public Component,\r
+                                private Timer\r
 {\r
 public:\r
     //==============================================================================\r
@@ -67,8 +68,8 @@ public:
         @param areaToPointTo        the area that the call-out's arrow should point towards. If\r
                                     a parentComponent is supplied, then this is relative to that\r
                                     parent; otherwise, it's a global screen coord.\r
-        @param parentComponent      if non-zero, this is the component to add the call-out to. If\r
-                                    this is a nullptr, the call-out will be added to the desktop.\r
+        @param parentComponent      if not a nullptr, this is the component to add the call-out to.\r
+                                    If this is a nullptr, the call-out will be added to the desktop.\r
     */\r
     CallOutBox (Component& contentComponent,\r
                 const Rectangle<int>& areaToPointTo,\r
@@ -111,8 +112,8 @@ public:
         @param areaToPointTo        the area that the call-out's arrow should point towards. If\r
                                     a parentComponent is supplied, then this is relative to that\r
                                     parent; otherwise, it's a global screen coord.\r
-        @param parentComponent      if non-zero, this is the component to add the call-out to. If\r
-                                    this is a nullptr, the call-out will be added to the desktop.\r
+        @param parentComponent      if not a nullptr, this is the component to add the call-out to.\r
+                                    If this is a nullptr, the call-out will be added to the desktop.\r
     */\r
     static CallOutBox& launchAsynchronously (Component* contentComponent,\r
                                              const Rectangle<int>& areaToPointTo,\r
@@ -173,7 +174,10 @@ private:
     Image background;\r
     bool dismissalMouseClicksAreAlwaysConsumed;\r
 \r
+    Time creationTime;\r
+\r
     void refreshPath();\r
+    void timerCallback() override;\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CallOutBox)\r
 };\r
index 637faae0362f8f2ed74142f6ec0c8c29adcf4a5a..ab927e2bc09b34b496d98f78820ea5b285ff5aa0 100644 (file)
@@ -171,7 +171,7 @@ public:
                                     be before calling this method. The component won't\r
                                     be deleted by this call, so you can re-use it or delete\r
                                     it afterwards\r
-        @param componentToCentreAround  if this is non-zero, it indicates a component that\r
+        @param componentToCentreAround  if this is not a nullptr, it indicates a component that\r
                                     you'd like to show this dialog box in front of. See the\r
                                     DocumentWindow::centreAroundComponent() method for more\r
                                     info on this parameter\r
@@ -217,7 +217,7 @@ public:
                                     be before calling this method. The component won't\r
                                     be deleted by this call, so you can re-use it or delete\r
                                     it afterwards\r
-        @param componentToCentreAround  if this is non-zero, it indicates a component that\r
+        @param componentToCentreAround  if this is not a nullptr, it indicates a component that\r
                                     you'd like to show this dialog box in front of. See the\r
                                     DocumentWindow::centreAroundComponent() method for more\r
                                     info on this parameter\r
index 90972c2c3a6f5fa549cde13fdce8ae7b170079f0..ea31eb46b6f177802928fa2c0d13df50bc2af51d 100644 (file)
@@ -141,9 +141,9 @@ public:
         @param menuBarModel     this specifies a MenuBarModel that should be used to\r
                                 generate the contents of a menu bar that will be placed\r
                                 just below the title bar, and just above any content\r
-                                component. If this value is zero, any existing menu bar\r
-                                will be removed from the component; if non-zero, one will\r
-                                be added if it's required.\r
+                                component. If this value is a nullptr, any existing menu bar\r
+                                will be removed from the component; if it is not a nullptr,\r
+                                one will be added if it's required.\r
         @param menuBarHeight    the height of the menu bar component, if one is needed. Pass a value of zero\r
                                 or less to use the look-and-feel's default size.\r
     */\r
index e18d767a61fe87e603b16b92c8fef21491a82edb..ca74804c2c5cedc055d84790065fa07c214cbd66 100644 (file)
@@ -142,7 +142,7 @@ FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile,
                                                          const bool askUserForFileIfNotSpecified,\r
                                                          const bool showMessageOnFailure)\r
 {\r
-    if (newFile == File::nonexistent)\r
+    if (newFile == File())\r
     {\r
         if (askUserForFileIfNotSpecified)\r
             return saveAsInteractive (true);\r
index cd903b8aeb98d24d2d300b816608674bac6631f5..eab3d1e3185e9b886186d432e52f7169e3c37700 100644 (file)
@@ -203,7 +203,7 @@ public:
     //==============================================================================\r
     /** Returns the file that this document was last successfully saved or loaded from.\r
 \r
-        When the document object is created, this will be set to File::nonexistent.\r
+        When the document object is created, this will be set to File().\r
 \r
         It is changed when one of the load or save methods is used, or when setFile()\r
         is used to explicitly set it.\r
@@ -249,8 +249,8 @@ protected:
         This method works very well in conjunction with a RecentlyOpenedFilesList\r
         object to manage your recent-files list.\r
 \r
-        As a default value, it's ok to return File::nonexistent, and the document\r
-        object will use a sensible one instead.\r
+        As a default value, it's ok to return File(), and the document object will\r
+        use a sensible one instead.\r
 \r
         @see RecentlyOpenedFilesList\r
     */\r
index 63d930522c5c3ffc02684e5b79a5cd2791327d3b..14e423901f553a5563e641bef0c93df7cb0b164f 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_gui_extra\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE extended GUI classes\r
   description:      Miscellaneous GUI classes for specialised tasks.\r
   website:          http://www.juce.com/juce\r
index ed34f1ec345e9c208694ae5a1fb0845265d86057..3eef3d36324c3f93cc7a29421b9afb2fd41c19ac 100644 (file)
@@ -336,7 +336,7 @@ ColourSelector::ColourSelector (const int sectionsToShow, const int edge, const
         addAndMakeVisible (hueSelector = new HueSelectorComp (*this, h,  gapAroundColourSpaceComponent));\r
     }\r
 \r
-    update();\r
+    update (dontSendNotification);\r
 }\r
 \r
 ColourSelector::~ColourSelector()\r
@@ -351,14 +351,14 @@ Colour ColourSelector::getCurrentColour() const
     return ((flags & showAlphaChannel) != 0) ? colour : colour.withAlpha ((uint8) 0xff);\r
 }\r
 \r
-void ColourSelector::setCurrentColour (Colour c)\r
+void ColourSelector::setCurrentColour (Colour c, NotificationType notification)\r
 {\r
     if (c != colour)\r
     {\r
         colour = ((flags & showAlphaChannel) != 0) ? c : c.withAlpha ((uint8) 0xff);\r
 \r
         updateHSV();\r
-        update();\r
+        update (notification);\r
     }\r
 }\r
 \r
@@ -370,7 +370,7 @@ void ColourSelector::setHue (float newH)
     {\r
         h = newH;\r
         colour = Colour (h, s, v, colour.getFloatAlpha());\r
-        update();\r
+        update (sendNotification);\r
     }\r
 }\r
 \r
@@ -384,7 +384,7 @@ void ColourSelector::setSV (float newS, float newV)
         s = newS;\r
         v = newV;\r
         colour = Colour (h, s, v, colour.getFloatAlpha());\r
-        update();\r
+        update (sendNotification);\r
     }\r
 }\r
 \r
@@ -394,14 +394,14 @@ void ColourSelector::updateHSV()
     colour.getHSB (h, s, v);\r
 }\r
 \r
-void ColourSelector::update()\r
+void ColourSelector::update (NotificationType notification)\r
 {\r
     if (sliders[0] != nullptr)\r
     {\r
-        sliders[0]->setValue ((int) colour.getRed());\r
-        sliders[1]->setValue ((int) colour.getGreen());\r
-        sliders[2]->setValue ((int) colour.getBlue());\r
-        sliders[3]->setValue ((int) colour.getAlpha());\r
+        sliders[0]->setValue ((int) colour.getRed(),   notification);\r
+        sliders[1]->setValue ((int) colour.getGreen(), notification);\r
+        sliders[2]->setValue ((int) colour.getBlue(),  notification);\r
+        sliders[3]->setValue ((int) colour.getAlpha(), notification);\r
     }\r
 \r
     if (colourSpace != nullptr)\r
@@ -413,7 +413,11 @@ void ColourSelector::update()
     if ((flags & showColourAtTop) != 0)\r
         repaint (previewArea);\r
 \r
-    sendChangeMessage();\r
+    if (notification != dontSendNotification)\r
+        sendChangeMessage();\r
+\r
+    if (notification == sendNotificationSync)\r
+        dispatchPendingMessages();\r
 }\r
 \r
 //==============================================================================\r
index ff2901b2dbc0c0931c6419099fe92cf09f580dce..6f2006a69e51afb91ead91e4f548b47ac4f5e51d 100644 (file)
@@ -80,7 +80,7 @@ public:
     Colour getCurrentColour() const;\r
 \r
     /** Changes the colour that is currently being shown. */\r
-    void setCurrentColour (Colour newColour);\r
+    void setCurrentColour (Colour newColour, NotificationType notificationType = sendNotification);\r
 \r
     //==============================================================================\r
     /** Tells the selector how many preset colour swatches you want to have on the component.\r
@@ -153,7 +153,7 @@ private:
     void setHue (float newH);\r
     void setSV (float newS, float newV);\r
     void updateHSV();\r
-    void update();\r
+    void update (NotificationType);\r
     void sliderValueChanged (Slider*) override;\r
     void paint (Graphics&) override;\r
     void resized() override;\r
index 3014021ab2672aa6a261c4cb3a6cd7e028dc4e7d..efce528b8740aa570288eee338f2c729bb7ace6a 100644 (file)
@@ -42,7 +42,7 @@ public:
     void paintButton (Graphics& g, bool /*isOver*/, bool /*isDown*/) override\r
     {\r
         getLookAndFeel().drawKeymapChangeButton (g, getWidth(), getHeight(), *this,\r
-                                                 keyNum >= 0 ? getName() : String::empty);\r
+                                                 keyNum >= 0 ? getName() : String());\r
     }\r
 \r
     static void menuCallback (int result, ChangeKeyButton* button)\r
@@ -219,7 +219,7 @@ public:
         for (int i = 0; i < jmin ((int) maxNumAssignments, keyPresses.size()); ++i)\r
             addKeyPressButton (owner.getDescriptionForKeyPress (keyPresses.getReference (i)), i, isReadOnly);\r
 \r
-        addKeyPressButton (String::empty, -1, isReadOnly);\r
+        addKeyPressButton (String(), -1, isReadOnly);\r
     }\r
 \r
     void addKeyPressButton (const String& desc, const int index, const bool isReadOnly)\r
@@ -386,7 +386,7 @@ public:
                                       TRANS("Reset to defaults"),\r
                                       TRANS("Are you sure you want to reset all the key-mappings to their default state?"),\r
                                       TRANS("Reset"),\r
-                                      String::empty,\r
+                                      String(),\r
                                       &owner,\r
                                       ModalCallbackFunction::forComponent (resetToDefaultsCallback, &owner));\r
     }\r
index 78da78f50b4f7ea76e777a415fb7cee900d9e84e..ad8dc243e08de956372dcc61f0cfd6be3df9a51c 100644 (file)
@@ -433,10 +433,9 @@ Component* createColourEditor (LivePropertyEditorBase& editor)
 }\r
 \r
 //==============================================================================\r
-class SliderComp   : public Component,\r
-                     private Slider::Listener\r
+struct SliderComp   : public Component,\r
+                      private Slider::Listener\r
 {\r
-public:\r
     SliderComp (LivePropertyEditorBase& e, bool useFloat)\r
         : editor (e), isFloat (useFloat)\r
     {\r
@@ -446,7 +445,7 @@ public:
         slider.addListener (this);\r
     }\r
 \r
-    void updateRange()\r
+    virtual void updateRange()\r
     {\r
         double v = isFloat ? parseDouble (editor.value.getStringValue (false))\r
                            : (double) parseInt (editor.value.getStringValue (false));\r
@@ -457,30 +456,43 @@ public:
         slider.setValue (v, dontSendNotification);\r
     }\r
 \r
-private:\r
-    LivePropertyEditorBase& editor;\r
-    Slider slider;\r
-    bool isFloat;\r
-\r
-    void sliderValueChanged (Slider*)\r
+    void sliderValueChanged (Slider*) override\r
     {\r
         editor.applyNewValue (isFloat ? getAsString ((double) slider.getValue(), editor.wasHex)\r
                                       : getAsString ((int64)  slider.getValue(), editor.wasHex));\r
 \r
     }\r
 \r
-    void sliderDragStarted (Slider*)  {}\r
-    void sliderDragEnded (Slider*)    { updateRange(); }\r
+    void sliderDragStarted (Slider*) override  {}\r
+    void sliderDragEnded (Slider*) override    { updateRange(); }\r
 \r
-    void resized()\r
+    void resized() override\r
     {\r
         slider.setBounds (getLocalBounds().removeFromTop (25));\r
     }\r
+\r
+    LivePropertyEditorBase& editor;\r
+    Slider slider;\r
+    bool isFloat;\r
 };\r
 \r
+//==============================================================================\r
+struct BoolSliderComp  : public SliderComp\r
+{\r
+    BoolSliderComp (LivePropertyEditorBase& e) : SliderComp (e, false) {}\r
+\r
+    void updateRange() override\r
+    {\r
+        slider.setRange (0.0, 1.0, dontSendNotification);\r
+        slider.setValue (editor.value.getStringValue (false) == "true", dontSendNotification);\r
+    }\r
+\r
+    void sliderValueChanged (Slider*) override  { editor.applyNewValue (slider.getValue() > 0.5 ? "true" : "false"); }\r
+};\r
 \r
 Component* createIntegerSlider (LivePropertyEditorBase& editor) { return new SliderComp (editor, false); }\r
 Component* createFloatSlider   (LivePropertyEditorBase& editor) { return new SliderComp (editor, true);  }\r
+Component* createBoolSlider    (LivePropertyEditorBase& editor) { return new BoolSliderComp (editor); }\r
 \r
 }\r
 \r
index 20deb0967a2e8e9cf2ef9b952d6900039ffa6112..4978d3e451a9f6f117f308ada3551e717829310a 100644 (file)
@@ -52,6 +52,7 @@ namespace LiveConstantEditor
     inline void setFromString (uint64& v,         const String& s)    { v = (uint64)         parseInt (s); }\r
     inline void setFromString (double& v,         const String& s)    { v = parseDouble (s); }\r
     inline void setFromString (float& v,          const String& s)    { v = (float) parseDouble (s); }\r
+    inline void setFromString (bool& v,           const String& s)    { v = (s == "true"); }\r
     inline void setFromString (String& v,         const String& s)    { v = s; }\r
     inline void setFromString (Colour& v,         const String& s)    { v = Colour ((uint32) parseInt (s)); }\r
 \r
@@ -63,6 +64,7 @@ namespace LiveConstantEditor
     inline String getAsString (unsigned short v, bool preferHex) { return intToString ((int) v, preferHex); }\r
     inline String getAsString (int v, bool preferHex)            { return intToString ((int) v, preferHex); }\r
     inline String getAsString (unsigned int v, bool preferHex)   { return intToString ((int) v, preferHex); }\r
+    inline String getAsString (bool v, bool)                     { return v ? "true" : "false"; }\r
     inline String getAsString (int64 v, bool preferHex)          { return intToString ((int64) v, preferHex); }\r
     inline String getAsString (uint64 v, bool preferHex)         { return intToString ((int64) v, preferHex); }\r
     inline String getAsString (Colour v, bool)                   { return intToString ((int) v.getARGB(), true); }\r
@@ -135,6 +137,7 @@ namespace LiveConstantEditor
     Component* createColourEditor (LivePropertyEditorBase&);\r
     Component* createIntegerSlider (LivePropertyEditorBase&);\r
     Component* createFloatSlider (LivePropertyEditorBase&);\r
+    Component* createBoolSlider (LivePropertyEditorBase&);\r
 \r
     template <typename Type> struct CustomEditor    { static Component* create (LivePropertyEditorBase&)   { return nullptr; } };\r
     template<> struct CustomEditor<char>            { static Component* create (LivePropertyEditorBase& e) { return createIntegerSlider (e); } };\r
@@ -148,6 +151,7 @@ namespace LiveConstantEditor
     template<> struct CustomEditor<float>           { static Component* create (LivePropertyEditorBase& e) { return createFloatSlider (e); } };\r
     template<> struct CustomEditor<double>          { static Component* create (LivePropertyEditorBase& e) { return createFloatSlider (e); } };\r
     template<> struct CustomEditor<Colour>          { static Component* create (LivePropertyEditorBase& e) { return createColourEditor (e); } };\r
+    template<> struct CustomEditor<bool>            { static Component* create (LivePropertyEditorBase& e) { return createBoolSlider (e); } };\r
 \r
     template <typename Type>\r
     struct LivePropertyEditor  : public LivePropertyEditorBase\r
index 9fa424f084fb757d36cc10eff3f7d7f1686f3ed0..14d4f51416feb74a3acb439d388db62d0b56b1e2 100644 (file)
@@ -118,10 +118,10 @@ public:
         If dontAddNonExistentFiles is true, then each file will be checked and only those\r
         that exist will be added.\r
 \r
-        If filesToAvoid is non-zero, then it is considered to be a zero-terminated array of\r
-        pointers to file objects. Any files that appear in this list will not be added to the\r
-        menu - the reason for this is that you might have a number of files already open, so\r
-        might not want these to be shown in the menu.\r
+        If filesToAvoid is not a nullptr, then it is considered to be a zero-terminated array\r
+        of pointers to file objects. Any files that appear in this list will not be added to\r
+        the menu - the reason for this is that you might have a number of files already open,\r
+        so might not want these to be shown in the menu.\r
 \r
         It returns the number of items that were added.\r
     */\r
index 0375c37a19d04cd8a6a61c6b03fd5054e45156a4..2188c6acd734d9c2be65d5cf582a3c4df844fcec 100644 (file)
@@ -31,25 +31,40 @@ SplashScreen::SplashScreen (const String& title, const Image& image, bool useDro
     jassert (backgroundImage.isValid());\r
 \r
     setOpaque (! backgroundImage.hasAlphaChannel());\r
-    makeVisible (image.getWidth(), image.getHeight(), useDropShadow);\r
+\r
+   #if JUCE_IOS || JUCE_ANDROID\r
+    const bool useFullScreen = true;\r
+   #else\r
+    const bool useFullScreen = false;\r
+   #endif\r
+\r
+    makeVisible (image.getWidth(), image.getHeight(), useDropShadow, useFullScreen);\r
 }\r
 \r
 SplashScreen::SplashScreen (const String& title, int width, int height, bool useDropShadow)\r
     : Component (title),\r
       clickCountToDelete (0)\r
 {\r
-    makeVisible (width, height, useDropShadow);\r
+    makeVisible (width, height, useDropShadow, false);\r
 }\r
 \r
-void SplashScreen::makeVisible (int w, int h, bool useDropShadow)\r
+void SplashScreen::makeVisible (int w, int h, bool useDropShadow, bool fullscreen)\r
 {\r
     clickCountToDelete = Desktop::getInstance().getMouseButtonClickCounter();\r
     creationTime = Time::getCurrentTime();\r
 \r
+    const Rectangle<int> screenSize = Desktop::getInstance().getDisplays().getMainDisplay().userArea;\r
+    const int width  = (fullscreen ? screenSize.getWidth()   : w);\r
+    const int height = (fullscreen ? screenSize.getHeight()  : h);\r
+\r
     setAlwaysOnTop (true);\r
     setVisible (true);\r
-    centreWithSize (w, h);\r
+    centreWithSize (width, height);\r
     addToDesktop (useDropShadow ? ComponentPeer::windowHasDropShadow : 0);\r
+\r
+    if (fullscreen)\r
+        getPeer()->setFullScreen (true);\r
+\r
     toFront (false);\r
 }\r
 \r
@@ -69,10 +84,7 @@ void SplashScreen::deleteAfterDelay (RelativeTime timeout, bool removeOnMouseCli
 void SplashScreen::paint (Graphics& g)\r
 {\r
     g.setOpacity (1.0f);\r
-\r
-    g.drawImage (backgroundImage,\r
-                 0, 0, getWidth(), getHeight(),\r
-                 0, 0, backgroundImage.getWidth(), backgroundImage.getHeight());\r
+    g.drawImage (backgroundImage, getLocalBounds().toFloat(), RectanglePlacement (RectanglePlacement::fillDestination));\r
 }\r
 \r
 void SplashScreen::timerCallback()\r
index ae2b77bf84cc2203ec8abbd00b99f433a1aac4a4..d65d136ab031bc178f909f3099d5e0b8f448baee 100644 (file)
@@ -146,7 +146,7 @@ private:
     int clickCountToDelete;\r
 \r
     void timerCallback() override;\r
-    void makeVisible (int w, int h, bool shadow);\r
+    void makeVisible (int w, int h, bool shadow, bool fullscreen);\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SplashScreen)\r
 };\r
index c04e109041ea608d8d156f2cb3b93f3a6e4068bf..21daad43696482b163a97e6edd70984e81b5e49b 100644 (file)
@@ -24,7 +24,7 @@
 \r
 namespace MouseCursorHelpers\r
 {\r
-    extern NSImage* createNSImage (const Image&);\r
+    extern NSImage* createNSImage (const Image&, float scaleFactor = 1.f);\r
 }\r
 \r
 extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId,\r
index 190ef113f41aa1858b2082484aeb7ecac8829aad..da8a0c039889198d4b158493f50896dffc7b5551 100644 (file)
 \r
 extern int64 getMouseEventTime();\r
 \r
+#if JUCE_MINGW\r
+ #define JUCE_COMCLASS(name, guid) \\r
+    template<> struct UUIDGetter<::name>   { static CLSID get() { return uuidFromString (guid); } };\r
+\r
+ #ifdef __uuidof\r
+  #undef __uuidof\r
+ #endif\r
+\r
+ #define __uuidof(cls) UUIDGetter<::cls>::get()\r
+\r
+#else\r
+ #define JUCE_COMCLASS(name, guid)\r
+#endif\r
+\r
+JUCE_COMCLASS (IOleObject,                "00000112-0000-0000-C000-000000000046")\r
+JUCE_COMCLASS (IOleWindow,                "00000114-0000-0000-C000-000000000046")\r
+JUCE_COMCLASS (IOleInPlaceSite,           "00000119-0000-0000-C000-000000000046")\r
+\r
 namespace ActiveXHelpers\r
 {\r
     //==============================================================================\r
@@ -133,7 +151,7 @@ namespace ActiveXHelpers
 \r
         JUCE_COMRESULT QueryInterface (REFIID type, void** result)\r
         {\r
-            if (type == IID_IOleInPlaceSite)\r
+            if (type == __uuidof (IOleInPlaceSite))\r
             {\r
                 inplaceSite->AddRef();\r
                 *result = static_cast<IOleInPlaceSite*> (inplaceSite);\r
@@ -160,7 +178,7 @@ namespace ActiveXHelpers
     HWND getHWND (const ActiveXControlComponent* const component)\r
     {\r
         HWND hwnd = 0;\r
-        const IID iid = IID_IOleWindow;\r
+        const IID iid = __uuidof(IOleWindow);\r
 \r
         if (IOleWindow* const window = (IOleWindow*) component->queryInterface (&iid))\r
         {\r
@@ -340,7 +358,7 @@ bool ActiveXControlComponent::createControl (const void* controlIID)
         ScopedPointer<Pimpl> newControl (new Pimpl (hwnd, *this));\r
 \r
         HRESULT hr;\r
-        if ((hr = OleCreate (*(const IID*) controlIID, IID_IOleObject, 1 /*OLERENDER_DRAW*/, 0,\r
+        if ((hr = OleCreate (*(const IID*) controlIID, __uuidof (IOleObject), 1 /*OLERENDER_DRAW*/, 0,\r
                              newControl->clientSite, newControl->storage,\r
                              (void**) &(newControl->control))) == S_OK)\r
         {\r
index 8737955c74887dff5ffe15833c67a7a3e455be69..e7fd60b599dafb5be8ee0bff33125a38aed47a53 100644 (file)
@@ -226,7 +226,7 @@ void SystemTrayIconComponent::showInfoBubble (const String& title, const String&
 \r
 void SystemTrayIconComponent::hideInfoBubble()\r
 {\r
-    showInfoBubble (String::empty, String::empty);\r
+    showInfoBubble (String(), String());\r
 }\r
 \r
 void* SystemTrayIconComponent::getNativeHandle() const\r
index 0b9ec01d384ed46a7550107c0410359472fbd324..96612094a3cc40e6437d1f9cba30f9fa82e2b18d 100644 (file)
   ==============================================================================\r
 */\r
 \r
+JUCE_COMCLASS (DWebBrowserEvents2,        "34A715A0-6587-11D0-924A-0020AFC7AC4D")\r
+JUCE_COMCLASS (IConnectionPointContainer, "B196B284-BAB4-101A-B69C-00AA00341D07")\r
+JUCE_COMCLASS (IWebBrowser2,              "D30C1661-CDAF-11D0-8A3E-00C04FC9E26E")\r
+JUCE_COMCLASS (WebBrowser,                "8856F961-340A-11D0-A96B-00C04FD705A2")\r
+\r
 class WebBrowserComponent::Pimpl   : public ActiveXControlComponent\r
 {\r
 public:\r
@@ -43,13 +48,18 @@ public:
 \r
     void createBrowser()\r
     {\r
-        createControl (&CLSID_WebBrowser);\r
-        browser = (IWebBrowser2*) queryInterface (&IID_IWebBrowser2);\r
+        CLSID webCLSID = __uuidof (WebBrowser);\r
+        createControl (&webCLSID);\r
+\r
+    GUID iidWebBrowser2              = __uuidof (IWebBrowser2);\r
+    GUID iidConnectionPointContainer = __uuidof (IConnectionPointContainer);\r
+\r
+        browser = (IWebBrowser2*) queryInterface (&iidWebBrowser2);\r
 \r
         if (IConnectionPointContainer* connectionPointContainer\r
-                = (IConnectionPointContainer*) queryInterface (&IID_IConnectionPointContainer))\r
+            = (IConnectionPointContainer*) queryInterface (&iidConnectionPointContainer))\r
         {\r
-            connectionPointContainer->FindConnectionPoint (DIID_DWebBrowserEvents2, &connectionPoint);\r
+            connectionPointContainer->FindConnectionPoint (__uuidof (DWebBrowserEvents2), &connectionPoint);\r
 \r
             if (connectionPoint != nullptr)\r
             {\r
@@ -330,9 +340,12 @@ void WebBrowserComponent::visibilityChanged()
 \r
 void WebBrowserComponent::focusGained (FocusChangeType)\r
 {\r
-    if (IOleObject* oleObject = (IOleObject*) browser->queryInterface (&IID_IOleObject))\r
+    GUID iidOleObject = __uuidof (IOleObject);\r
+    GUID iidOleWindow = __uuidof (IOleWindow);\r
+\r
+    if (IOleObject* oleObject = (IOleObject*) browser->queryInterface (&iidOleObject))\r
     {\r
-        if (IOleWindow* oleWindow = (IOleWindow*) browser->queryInterface (&IID_IOleWindow))\r
+        if (IOleWindow* oleWindow = (IOleWindow*) browser->queryInterface (&iidOleWindow))\r
         {\r
             IOleClientSite* oleClientSite = nullptr;\r
 \r
index da65fbb2f8984f61ae9dfb6fa382e5ed945508cb..59af0f4e6a225a72eeed166a95526d906d5a4cb7 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_opengl\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE OpenGL classes\r
   description:      Classes for rendering OpenGL in a JUCE window.\r
   website:          http://www.juce.com/juce\r
index aa2c71e0381438f0ccd0d019405804046d76c0ce..3f34ef7e4d7c6541d6f1859b726c84f030fe44cb 100644 (file)
@@ -243,3 +243,23 @@ bool OpenGLHelpers::isContextActive()
 {\r
     return CGLGetCurrentContext() != 0;\r
 }\r
+\r
+//==============================================================================\r
+void componentPeerAboutToBeRemovedFromScreen (ComponentPeer& peer)\r
+{\r
+    Array<Component*> stack;\r
+    stack.add (&peer.getComponent());\r
+\r
+    while (stack.size() != 0)\r
+    {\r
+        Component& comp = *stack.removeAndReturn (0);\r
+\r
+        const int n = comp.getNumChildComponents();\r
+        for (int i = 0; i < n; ++i)\r
+            if (Component* child = comp.getChildComponent (i))\r
+                stack.add (child);\r
+\r
+        if (OpenGLContext* context = OpenGLContext::getContextAttachedTo (comp))\r
+            context->detach();\r
+    }\r
+}\r
index 98e895544aae017ccc224aa4cf9417702d307dcd..d5935f4e5d03e0e708de316975482b525a4ed5f4 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_osc\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE OSC classes\r
   description:      Open Sound Control implementation.\r
   website:          http://www.juce.com/juce\r
index 80c8c5f2d51b9de34af3d9a0d31ea011a48ae8e1..ee7d9911b84db0ba0755655ae81b29d072b7b634 100644 (file)
 namespace juce\r
 {\r
     #include "marketplace/juce_OnlineUnlockStatus.cpp"\r
+\r
+   #if JUCE_MODULE_AVAILABLE_juce_data_structures\r
     #include "marketplace/juce_TracktionMarketplaceStatus.cpp"\r
+   #endif\r
 \r
    #if JUCE_MODULE_AVAILABLE_juce_gui_extra\r
     #include "marketplace/juce_OnlineUnlockForm.cpp"\r
index e39c62541b90f916eee8fe9a1ec63c17213fd481..5cdb14b249e7c959225b77814645e0c51ad7280f 100644 (file)
 \r
   ID:               juce_tracktion_marketplace\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE Tracktion marketplace support\r
   description:      Classes for online product authentication via the Tracktion marketplace.\r
   website:          http://www.juce.com/juce\r
   license:          GPL/Commercial\r
 \r
-  dependencies:     juce_data_structures juce_cryptography\r
+  dependencies:     juce_cryptography\r
 \r
  END_JUCE_MODULE_DECLARATION\r
 \r
 \r
 //==============================================================================\r
 #include <juce_cryptography/juce_cryptography.h>\r
-#include <juce_data_structures/juce_data_structures.h>\r
+\r
+#if JUCE_MODULE_AVAILABLE_juce_data_structures\r
+ #include <juce_data_structures/juce_data_structures.h>\r
+#endif\r
 \r
 #if JUCE_MODULE_AVAILABLE_juce_gui_extra\r
  #include <juce_gui_extra/juce_gui_extra.h>\r
 \r
 namespace juce\r
 {\r
+   #if JUCE_MODULE_AVAILABLE_juce_data_structures\r
     #include "marketplace/juce_OnlineUnlockStatus.h"\r
     #include "marketplace/juce_TracktionMarketplaceStatus.h"\r
+   #endif\r
     #include "marketplace/juce_KeyFileGeneration.h"\r
 \r
    #if JUCE_MODULE_AVAILABLE_juce_gui_extra\r
index aab19a9a6bdd844522469d9f24a6f6673aee4668..0178a4ad533f0ea24f0c43252932a3191d50150b 100644 (file)
@@ -51,6 +51,22 @@ public:
                                                  const String& machineNumbers,\r
                                                  const RSAKey& privateKey);\r
 \r
+    /** Similar to the above key file generation method but with an expiry time.\r
+        You must supply a Time after which this key file should no longer be considered as active.\r
+\r
+        N.B. when an app is unlocked with an expiring key file, OnlineUnlockStatus::isUnlocked will\r
+        still return false. You must then check OnlineUnlockStatus::getExpiryTime to see if this\r
+        expiring key file is still in date and act accordingly.\r
+\r
+        @see OnlineUnlockStatus\r
+    */\r
+    static String JUCE_CALLTYPE generateExpiringKeyFile (const String& appName,\r
+                                                         const String& userEmail,\r
+                                                         const String& userName,\r
+                                                         const String& machineNumbers,\r
+                                                         const Time expiryTime,\r
+                                                         const RSAKey& privateKey);\r
+\r
     //==============================================================================\r
     /** This is a simple implementation of a key-generator that you could easily wrap in\r
         a command-line main() function for use on your server.\r
index 8ef5920bc0c7e3b4adcc3d678f17d1078a30ef3c..9c6b43641bdaaf47d77fd06ff5505473bb3f71d7 100644 (file)
@@ -207,12 +207,12 @@ void OnlineUnlockForm::resized()
     passwordBox.setInputRestrictions (64);\r
     passwordBox.setFont (font);\r
 \r
-    r.removeFromBottom (30);\r
+    r.removeFromBottom (20);\r
     emailBox.setBounds (r.removeFromBottom (boxHeight));\r
     emailBox.setInputRestrictions (512);\r
     emailBox.setFont (font);\r
 \r
-    r.removeFromBottom (30);\r
+    r.removeFromBottom (20);\r
 \r
     message.setBounds (r);\r
 \r
index 739da1f653da0d958298d43d5f6295681e55ef1f..4ec731c10084957315db6f0488e6f931f9c9c490 100644 (file)
 \r
 struct KeyFileUtils\r
 {\r
+    static XmlElement createKeyFileContent (const String& appName,\r
+                                            const String& userEmail,\r
+                                            const String& userName,\r
+                                            const String& machineNumbers,\r
+                                            const String& machineNumbersAttributeName)\r
+    {\r
+        XmlElement xml ("key");\r
+\r
+        xml.setAttribute ("user", userName);\r
+        xml.setAttribute ("email", userEmail);\r
+        xml.setAttribute (machineNumbersAttributeName, machineNumbers);\r
+        xml.setAttribute ("app", appName);\r
+        xml.setAttribute ("date", String::toHexString (Time::getCurrentTime().toMilliseconds()));\r
+\r
+        return xml;\r
+    }\r
+\r
+    static String createKeyFileComment (const String& appName,\r
+                                        const String& userEmail,\r
+                                        const String& userName,\r
+                                        const String& machineNumbers)\r
+    {\r
+        String comment;\r
+        comment << "Keyfile for " << appName << newLine;\r
+\r
+        if (userName.isNotEmpty())\r
+            comment << "User: " << userName << newLine;\r
+\r
+        comment << "Email: " << userEmail << newLine\r
+                << "Machine numbers: " << machineNumbers << newLine\r
+                << "Created: " << Time::getCurrentTime().toString (true, true);\r
+\r
+        return comment;\r
+    }\r
+\r
+    //==============================================================================\r
     static String encryptXML (const XmlElement& xml, RSAKey privateKey)\r
     {\r
         MemoryOutputStream text;\r
@@ -93,10 +129,10 @@ struct KeyFileUtils
         return decryptXML (keyFileText.fromLastOccurrenceOf ("#", false, false).trim(), rsaPublicKey);\r
     }\r
 \r
-    static StringArray getMachineNumbers (XmlElement xml)\r
+    static StringArray getMachineNumbers (XmlElement xml, StringRef attributeName)\r
     {\r
         StringArray numbers;\r
-        numbers.addTokens (xml.getStringAttribute ("mach"), ",; ", StringRef());\r
+        numbers.addTokens (xml.getStringAttribute (attributeName), ",; ", StringRef());\r
         numbers.trim();\r
         numbers.removeEmptyStrings();\r
         return numbers;\r
@@ -110,6 +146,9 @@ struct KeyFileUtils
     {\r
         String licensee, email, appID;\r
         StringArray machineNumbers;\r
+\r
+        bool keyFileExpires;\r
+        Time expiryTime;\r
     };\r
 \r
     static KeyFileData getDataFromKeyFile (XmlElement xml)\r
@@ -119,14 +158,27 @@ struct KeyFileUtils
         data.licensee = getLicensee (xml);\r
         data.email = getEmail (xml);\r
         data.appID = getAppID (xml);\r
-        data.machineNumbers.addArray (getMachineNumbers (xml));\r
+\r
+        if (xml.hasAttribute ("expiryTime") && xml.hasAttribute ("expiring_mach"))\r
+        {\r
+            data.keyFileExpires = true;\r
+            data.machineNumbers.addArray (getMachineNumbers (xml, "expiring_mach"));\r
+            data.expiryTime = Time (xml.getStringAttribute ("expiryTime").getHexValue64());\r
+        }\r
+        else\r
+        {\r
+            data.keyFileExpires = false;\r
+            data.machineNumbers.addArray (getMachineNumbers (xml, "mach"));\r
+        }\r
 \r
         return data;\r
     }\r
 };\r
 \r
 //==============================================================================\r
+#if JUCE_MODULE_AVAILABLE_juce_data_structures\r
 const char* OnlineUnlockStatus::unlockedProp = "u";\r
+const char* OnlineUnlockStatus::expiryTimeProp = "t";\r
 static const char* stateTagName = "REG";\r
 static const char* userNameProp = "user";\r
 static const char* keyfileDataProp = "key";\r
@@ -183,11 +235,22 @@ void OnlineUnlockStatus::load()
     KeyFileUtils::KeyFileData data;\r
     data = KeyFileUtils::getDataFromKeyFile (KeyFileUtils::getXmlFromKeyFile (status[keyfileDataProp], getPublicKey()));\r
 \r
-    if (! doesProductIDMatch (data.appID))\r
-        status.removeProperty (unlockedProp, nullptr);\r
+    if (data.keyFileExpires)\r
+    {\r
+        if (! doesProductIDMatch (data.appID))\r
+            status.removeProperty (expiryTimeProp, nullptr);\r
 \r
-    if (! machineNumberAllowed (data.machineNumbers, localMachineNums))\r
-        status.removeProperty (unlockedProp, nullptr);\r
+        if (! machineNumberAllowed (data.machineNumbers, localMachineNums))\r
+            status.removeProperty (expiryTimeProp, nullptr);\r
+    }\r
+    else\r
+    {\r
+        if (! doesProductIDMatch (data.appID))\r
+            status.removeProperty (unlockedProp, nullptr);\r
+\r
+        if (! machineNumberAllowed (data.machineNumbers, localMachineNums))\r
+            status.removeProperty (unlockedProp, nullptr);\r
+    }\r
 }\r
 \r
 void OnlineUnlockStatus::save()\r
@@ -289,7 +352,7 @@ bool OnlineUnlockStatus::applyKeyFile (String keyFileContent)
     {\r
         setUserEmail (data.email);\r
         status.setProperty (keyfileDataProp, keyFileContent, nullptr);\r
-        status.removeProperty (unlockedProp, nullptr);\r
+        status.removeProperty (data.keyFileExpires ? expiryTimeProp : unlockedProp, nullptr);\r
 \r
         var actualResult (0), dummyResult (1.0);\r
         var v (machineNumberAllowed (data.machineNumbers, getLocalMachineIDs()));\r
@@ -298,6 +361,14 @@ bool OnlineUnlockStatus::applyKeyFile (String keyFileContent)
         dummyResult.swapWith (v);\r
         jassert (! dummyResult);\r
 \r
+        if (data.keyFileExpires)\r
+        {\r
+            if ((! dummyResult) && actualResult)\r
+                status.setProperty (expiryTimeProp, data.expiryTime.toMilliseconds(), nullptr);\r
+\r
+            return getExpiryTime().toMilliseconds() > 0;\r
+        }\r
+\r
         if ((! dummyResult) && actualResult)\r
             status.setProperty (unlockedProp, actualResult, nullptr);\r
 \r
@@ -388,6 +459,8 @@ OnlineUnlockStatus::UnlockResult OnlineUnlockStatus::attemptWebserverUnlock (con
     return handleFailedConnection();\r
 }\r
 \r
+#endif // JUCE_MODULE_AVAILABLE_juce_data_structures\r
+\r
 //==============================================================================\r
 String KeyGeneration::generateKeyFile (const String& appName,\r
                                        const String& userEmail,\r
@@ -395,23 +468,24 @@ String KeyGeneration::generateKeyFile (const String& appName,
                                        const String& machineNumbers,\r
                                        const RSAKey& privateKey)\r
 {\r
-    XmlElement xml ("key");\r
+    XmlElement xml (KeyFileUtils::createKeyFileContent (appName, userEmail, userName, machineNumbers, "mach"));\r
+    const String comment (KeyFileUtils::createKeyFileComment (appName, userEmail, userName, machineNumbers));\r
 \r
-    xml.setAttribute ("user", userName);\r
-    xml.setAttribute ("email", userEmail);\r
-    xml.setAttribute ("mach", machineNumbers);\r
-    xml.setAttribute ("app", appName);\r
-    xml.setAttribute ("date", String::toHexString (Time::getCurrentTime().toMilliseconds()));\r
-\r
-    String comment;\r
-    comment << "Keyfile for " << appName << newLine;\r
+    return KeyFileUtils::createKeyFile (comment, xml, privateKey);\r
+}\r
 \r
-    if (userName.isNotEmpty())\r
-        comment << "User: " << userName << newLine;\r
+String KeyGeneration::generateExpiringKeyFile (const String& appName,\r
+                                               const String& userEmail,\r
+                                               const String& userName,\r
+                                               const String& machineNumbers,\r
+                                               const Time expiryTime,\r
+                                               const RSAKey& privateKey)\r
+{\r
+    XmlElement xml (KeyFileUtils::createKeyFileContent (appName, userEmail, userName, machineNumbers, "expiring_mach"));\r
+    xml.setAttribute ("expiryTime", String::toHexString (expiryTime.toMilliseconds()));\r
 \r
-    comment << "Email: " << userEmail << newLine\r
-            << "Machine numbers: " << machineNumbers << newLine\r
-            << "Created: " << Time::getCurrentTime().toString (true, true);\r
+    String comment (KeyFileUtils::createKeyFileComment (appName, userEmail, userName, machineNumbers));\r
+    comment << newLine << "Expires: " << expiryTime.toString (true, true);\r
 \r
     return KeyFileUtils::createKeyFile (comment, xml, privateKey);\r
 }\r
index 2bf8193642dfdd841c49b06abf4b2a29b512f1af..18efa9f397b243a8696b0ae91e22c23a0929420c 100644 (file)
@@ -126,7 +126,15 @@ public:
         changed by a cracker in order to unlock your app, so the more places you call this\r
         method, the more hassle it will be for them to find and crack them all.\r
     */\r
-    inline var isUnlocked() const       { return status[unlockedProp]; }\r
+    inline var isUnlocked() const               { return status[unlockedProp]; }\r
+\r
+    /** Returns the Time when the keyfile expires.\r
+\r
+        If a the key file obtained has an expiry time, isUnlocked will return false and this\r
+        will return a non-zero time. The interpretation of this is up to your app but could\r
+        be used for subscription based models or trial periods.\r
+    */\r
+    inline Time getExpiryTime() const           { return Time (static_cast<int64> (status[expiryTimeProp])); }\r
 \r
     /** Optionally allows the app to provide the user's email address if\r
         it is known.\r
@@ -244,6 +252,7 @@ private:
     UnlockResult handleFailedConnection();\r
 \r
     static const char* unlockedProp;\r
+    static const char* expiryTimeProp;\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OnlineUnlockStatus)\r
 };\r
index e879bba223ce4254e34678cb609ae7ce07c2a8e8..85bd7f9347dc8f89fa3aea89691cbedaa78eef68 100644 (file)
@@ -22,8 +22,9 @@
   ==============================================================================\r
 */\r
 \r
-CameraDevice::CameraDevice (const String& nm, int index, int minWidth, int minHeight, int maxWidth, int maxHeight)\r
-   : name (nm), pimpl (new Pimpl (name, index, minWidth, minHeight, maxWidth, maxHeight))\r
+CameraDevice::CameraDevice (const String& nm, int index, int minWidth, int minHeight, int maxWidth, int maxHeight,\r
+                            bool highQuality)\r
+   : name (nm), pimpl (new Pimpl (name, index, minWidth, minHeight, maxWidth, maxHeight, highQuality))\r
 {\r
 }\r
 \r
@@ -77,10 +78,12 @@ StringArray CameraDevice::getAvailableDevices()
 \r
 CameraDevice* CameraDevice::openDevice (int index,\r
                                         int minWidth, int minHeight,\r
-                                        int maxWidth, int maxHeight)\r
+                                        int maxWidth, int maxHeight,\r
+                                        bool highQuality)\r
 {\r
     ScopedPointer<CameraDevice> d (new CameraDevice (getAvailableDevices() [index], index,\r
-                                                     minWidth, minHeight, maxWidth, maxHeight));\r
+                                                     minWidth, minHeight, maxWidth, maxHeight,\r
+                                                     highQuality));\r
 \r
     if (d->pimpl->openedOk())\r
         return d.release();\r
index ec76b24d050329f5aa4c15c9e5b237b375f5eac1..5f560e1d52d918df47b11bed0aef23c73eb7c25a 100644 (file)
@@ -58,10 +58,15 @@ public:
         The size constraints allow the method to choose between different resolutions if\r
         the camera supports this. If the resolution cam't be specified (e.g. on the Mac)\r
         then these will be ignored.\r
+\r
+        On Mac, if highQuality is false, then the camera will be opened in preview mode\r
+        which will allow the OS to drop frames if the computer cannot keep up in processing\r
+        the frames.\r
     */\r
     static CameraDevice* openDevice (int deviceIndex,\r
                                      int minWidth = 128, int minHeight = 64,\r
-                                     int maxWidth = 1024, int maxHeight = 768);\r
+                                     int maxWidth = 1024, int maxHeight = 768,\r
+                                     bool highQuality = true);\r
 \r
     //==============================================================================\r
     /** Returns the name of this device */\r
@@ -147,7 +152,7 @@ private:
     friend struct ViewerComponent;\r
 \r
     CameraDevice (const String& name, int index,\r
-                  int minWidth, int minHeight, int maxWidth, int maxHeight);\r
+                  int minWidth, int minHeight, int maxWidth, int maxHeight, bool highQuality);\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CameraDevice)\r
 };\r
index 770f977ff3432d8445b59552215761ec65aaa220..b9f7497bd84498a83c0d7b10345fad171c8448a0 100644 (file)
@@ -34,7 +34,7 @@
 \r
   ID:               juce_video\r
   vendor:           juce\r
-  version:          4.2.3\r
+  version:          4.2.4\r
   name:             JUCE video playback and capture classes\r
   description:      Classes for playing video and capturing camera input.\r
   website:          http://www.juce.com/juce\r
index d237b69acc45abce58f972285081de02f7c92bdf..1b310c99a1cff5cf25b8a091b5916f2b06fe364c 100644 (file)
@@ -30,7 +30,8 @@ extern Image juce_createImageFromCIImage (CIImage*, int w, int h);
 \r
 struct CameraDevice::Pimpl\r
 {\r
-    Pimpl (const String&, const int index, int /*minWidth*/, int /*minHeight*/, int /*maxWidth*/, int /*maxHeight*/)\r
+    Pimpl (const String&, const int index, int /*minWidth*/, int /*minHeight*/, int /*maxWidth*/, int /*maxHeight*/,\r
+           bool useHighQuality)\r
         : input (nil),\r
           audioDevice (nil),\r
           audioInput (nil),\r
@@ -66,8 +67,9 @@ struct CameraDevice::Pimpl
                 if (err == nil)\r
                 {\r
                     resetFile();\r
+                    imageOutput = useHighQuality ? [[QTCaptureDecompressedVideoOutput alloc] init] :\r
+                                                   [[QTCaptureVideoPreviewOutput alloc] init];\r
 \r
-                    imageOutput = [[QTCaptureDecompressedVideoOutput alloc] init];\r
                     [imageOutput setDelegate: callbackDelegate];\r
 \r
                     if (err == nil)\r
@@ -263,7 +265,7 @@ struct CameraDevice::Pimpl
     QTCaptureDeviceInput* audioInput;\r
     QTCaptureSession* session;\r
     QTCaptureMovieFileOutput* fileOutput;\r
-    QTCaptureDecompressedVideoOutput* imageOutput;\r
+    QTCaptureOutput* imageOutput;\r
     NSObject* callbackDelegate;\r
     String openingError;\r
     int64 firstPresentationTime, averageTimeOffset;\r
index 4af327ecdb67bee67552f5490cd0968c11d62959..a47e447260dcd55f8b4ba82621d4eb687ba9ee7a 100644 (file)
@@ -188,7 +188,7 @@ void QuickTimeMovieComponent::closeMovie()
     [view setMovie: nil];\r
     [theMovie release];\r
     movie = 0;\r
-    movieFile = File::nonexistent;\r
+    movieFile = File();\r
 }\r
 \r
 bool QuickTimeMovieComponent::isMovieOpen() const\r
index 83d16e6241546d6669e9baa1f682b92b0fcbf950..4880e6c03a9f3b3553457860727ee4023b7cf9d6 100644 (file)
@@ -49,7 +49,7 @@ struct CameraDevice::Pimpl  : public ChangeBroadcaster
 {\r
     Pimpl (const String&, int index,\r
            int minWidth, int minHeight,\r
-           int maxWidth, int maxHeight)\r
+           int maxWidth, int maxHeight, bool /*highQuality*/)\r
        : isRecording (false),\r
          openedSuccessfully (false),\r
          imageNeedsFlipping (false),\r
index 003a2ecbbf608c29a862afd468ea0ae89435c9b3..8ad6e3e63756d92d9b34165558011e366c4d9878 100644 (file)
@@ -597,10 +597,10 @@ private:
             if (wc->isRegistered())\r
             {\r
                 DWORD exstyle = 0;\r
-                DWORD type = WS_CHILD;\r
+                DWORD windowType = WS_CHILD;\r
 \r
                 hwnd = CreateWindowEx (exstyle, wc->getWindowClassName(),\r
-                                       L"", type, 0, 0, 0, 0, parentToAddTo, 0,\r
+                                       L"", windowType, 0, 0, 0, 0, parentToAddTo, 0,\r
                                        (HINSTANCE) Process::getCurrentModuleInstanceHandle(), 0);\r
 \r
                 if (hwnd != 0)\r
index 9d7edc08e278ad3070e9847de504438e7d3d214d..c60ad41a7a056b24a2e4974796fa0a61e5a4fc30 100644 (file)
@@ -101,7 +101,7 @@ void QuickTimeMovieComponent::createControlIfNeeded()
                 pimpl->qtControl->QuickTimeInitialize();\r
                 pimpl->qtControl->PutSizing (qtMovieFitsControl);\r
 \r
-                if (movieFile != File::nonexistent)\r
+                if (movieFile != File())\r
                     loadMovie (movieFile, controllerVisible);\r
             }\r
         }\r
@@ -118,7 +118,7 @@ bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream,
 {\r
     const ScopedPointer<InputStream> movieStreamDeleter (movieStream);\r
 \r
-    movieFile = File::nonexistent;\r
+    movieFile = File();\r
     movieLoaded = false;\r
     pimpl->qtMovie = 0;\r
     controllerVisible = isControllerVisible;\r
@@ -162,7 +162,7 @@ bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream,
 void QuickTimeMovieComponent::closeMovie()\r
 {\r
     stop();\r
-    movieFile = File::nonexistent;\r
+    movieFile = File();\r
     movieLoaded = false;\r
     pimpl->qtMovie = 0;\r
 \r
index cd8201bd50e367f323084d3342c8dd8d4c96333a..ae158b2f84a0509baa52a630d5ea9d68e9b86543 100644 (file)
@@ -109,8 +109,7 @@ public:
     void closeMovie();\r
 \r
     /** Returns the movie file that is currently open.\r
-\r
-        If there isn't one, this returns File::nonexistent\r
+        If there isn't one, this returns File()\r
     */\r
     File getCurrentMovieFile() const;\r
 \r