Browse Source

Introjucer: Added Android Studio exporter

tags/2021-05-28
jules 10 years ago
parent
commit
810f2bfb2a
40 changed files with 2245 additions and 364 deletions
  1. +899
    -0
      examples/Demo/Builds/Android/jni/Android.mk
  2. +16
    -2
      examples/Demo/Builds/Android/src/com/juce/jucedemo/JuceDemo.java
  3. +8
    -0
      extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp
  4. +26
    -22
      extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
  5. +11
    -0
      extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj
  6. +11
    -0
      extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj
  7. +2
    -0
      extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj
  8. +6
    -0
      extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters
  9. +2
    -0
      extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj
  10. +6
    -0
      extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters
  11. +2
    -0
      extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj
  12. +6
    -0
      extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters
  13. +2
    -0
      extras/Introjucer/Builds/VisualStudio2015/The Introjucer.vcxproj
  14. +6
    -0
      extras/Introjucer/Builds/VisualStudio2015/The Introjucer.vcxproj.filters
  15. +4
    -0
      extras/Introjucer/Introjucer.jucer
  16. +86
    -42
      extras/Introjucer/JuceLibraryCode/BinaryData.cpp
  17. +4
    -1
      extras/Introjucer/JuceLibraryCode/BinaryData.h
  18. +1
    -0
      extras/Introjucer/Source/Application/jucer_CommandIDs.h
  19. +37
    -0
      extras/Introjucer/Source/BinaryData/background_logo.svg
  20. +221
    -189
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h
  21. +616
    -0
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_AndroidStudio.h
  22. +28
    -23
      extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp
  23. +2
    -0
      extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h
  24. +3
    -19
      extras/Introjucer/Source/Project/jucer_ConfigTree_Base.h
  25. +28
    -3
      extras/Introjucer/Source/Project/jucer_ConfigTree_Exporter.h
  26. +1
    -0
      extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h
  27. +1
    -0
      extras/Introjucer/Source/Project/jucer_Project.h
  28. +82
    -22
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
  29. +1
    -0
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h
  30. +5
    -7
      extras/Introjucer/Source/Project/jucer_ProjectTree_Base.h
  31. +0
    -5
      extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp
  32. +8
    -8
      extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h
  33. +1
    -1
      extras/Introjucer/Source/Wizards/jucer_NewProjectWizardComponent.h
  34. +35
    -0
      modules/juce_core/files/juce_File.cpp
  35. +21
    -15
      modules/juce_core/files/juce_File.h
  36. +1
    -1
      modules/juce_core/native/juce_linux_CommonFile.cpp
  37. +7
    -2
      modules/juce_core/native/juce_mac_Files.mm
  38. +34
    -2
      modules/juce_core/native/juce_win32_Files.cpp
  39. +6
    -0
      modules/juce_core/text/juce_StringArray.cpp
  40. +9
    -0
      modules/juce_core/text/juce_StringArray.h

+ 899
- 0
examples/Demo/Builds/Android/jni/Android.mk View File

@@ -13,9 +13,13 @@ LOCAL_MODULE := juce_jni
LOCAL_SRC_FILES := \
../../../Source/Main.cpp\
../../../Source/MainWindow.cpp\
../../../Source/MainWindow.h\
../../../Source/DemoUtilities.h\
../../../Source/IntroScreen.cpp\
../../../Source/JuceDemoHeader.h\
../../../Source/Demos/AnimationDemo.cpp\
../../../Source/Demos/AudioLatencyDemo.cpp\
../../../Source/Demos/AudioLiveScrollingDisplay.h\
../../../Source/Demos/AudioPlaybackDemo.cpp\
../../../Source/Demos/AudioRecordingDemo.cpp\
../../../Source/Demos/AudioSettingsDemo.cpp\
@@ -47,11 +51,905 @@ LOCAL_SRC_FILES := \
../../../Source/Demos/UnitTestsDemo.cpp\
../../../Source/Demos/ValueTreesDemo.cpp\
../../../Source/Demos/VideoDemo.cpp\
../../../Source/Demos/WavefrontObjParser.h\
../../../Source/Demos/WebBrowserDemo.cpp\
../../../Source/Demos/WidgetsDemo.cpp\
../../../Source/Demos/WindowsDemo.cpp\
../../../Source/Demos/XMLandJSONDemo.cpp\
../../../Resources/tile_background.png\
../../../Resources/cello.wav\
../../../Resources/demo\ table\ data.xml\
../../../Resources/icons.zip\
../../../Resources/juce_icon.png\
../../../Resources/juce_module_info\
../../../Resources/portmeirion.jpg\
../../../Resources/teapot.obj\
../../../Resources/treedemo.xml\
../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp\
../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h\
../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h\
../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp\
../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h\
../../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp\
../../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h\
../../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp\
../../../../../modules/juce_audio_basics/midi/juce_MidiFile.h\
../../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp\
../../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h\
../../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp\
../../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h\
../../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp\
../../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h\
../../../../../modules/juce_audio_basics/effects/juce_Decibels.h\
../../../../../modules/juce_audio_basics/effects/juce_FFT.cpp\
../../../../../modules/juce_audio_basics/effects/juce_FFT.h\
../../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp\
../../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h\
../../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp\
../../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h\
../../../../../modules/juce_audio_basics/effects/juce_Reverb.h\
../../../../../modules/juce_audio_basics/sources/juce_AudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_PositionableAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h\
../../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp\
../../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h\
../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp\
../../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h\
../../../../../modules/juce_audio_basics/juce_module_info\
../../../../../modules/juce_audio_basics/juce_audio_basics.h\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp\
../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h\
../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h\
../../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h\
../../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp\
../../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h\
../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp\
../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h\
../../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp\
../../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h\
../../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp\
../../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h\
../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h\
../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp\
../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h\
../../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp\
../../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp\
../../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp\
../../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp\
../../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp\
../../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp\
../../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.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_AudioCDReader.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_MidiDataConcatenator.h\
../../../../../modules/juce_audio_devices/native/juce_win32_ASIO.cpp\
../../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp\
../../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp\
../../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp\
../../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp\
../../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp\
../../../../../modules/juce_audio_devices/juce_module_info\
../../../../../modules/juce_audio_devices/juce_audio_devices.h\
../../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h\
../../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp\
../../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h\
../../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp\
../../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h\
../../../../../modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h\
../../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h\
../../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp\
../../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h\
../../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp\
../../../../../modules/juce_audio_formats/sampler/juce_Sampler.h\
../../../../../modules/juce_audio_formats/juce_module_info\
../../../../../modules/juce_audio_formats/juce_audio_formats.h\
../../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h\
../../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h\
../../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.cpp\
../../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h\
../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.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/processors/juce_AudioProcessorListener.h\
../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h\
../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp\
../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h\
../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp\
../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h\
../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp\
../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h\
../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp\
../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.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_LADSPAPluginFormat.cpp\
../../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h\
../../../../../modules/juce_audio_processors/format_types/juce_VST3Common.h\
../../../../../modules/juce_audio_processors/format_types/juce_VST3Headers.h\
../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp\
../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h\
../../../../../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/scanning/juce_KnownPluginList.cpp\
../../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h\
../../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp\
../../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h\
../../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp\
../../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h\
../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h\
../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h\
../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h\
../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h\
../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.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_processors/juce_module_info\
../../../../../modules/juce_audio_processors/juce_audio_processors.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp\
../../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp\
../../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp\
../../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp\
../../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h\
../../../../../modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.cpp\
../../../../../modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h\
../../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp\
../../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h\
../../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp\
../../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h\
../../../../../modules/juce_audio_utils/juce_module_info\
../../../../../modules/juce_audio_utils/juce_audio_utils.h\
../../../../../modules/juce_box2d/box2d/Box2D.h\
../../../../../modules/juce_box2d/box2d/README.txt\
../../../../../modules/juce_box2d/utils/juce_Box2DRenderer.cpp\
../../../../../modules/juce_box2d/utils/juce_Box2DRenderer.h\
../../../../../modules/juce_box2d/juce_module_info\
../../../../../modules/juce_box2d/juce_box2d.h\
../../../../../modules/juce_core/text/juce_Base64.cpp\
../../../../../modules/juce_core/text/juce_Base64.h\
../../../../../modules/juce_core/text/juce_CharacterFunctions.cpp\
../../../../../modules/juce_core/text/juce_CharacterFunctions.h\
../../../../../modules/juce_core/text/juce_CharPointer_ASCII.h\
../../../../../modules/juce_core/text/juce_CharPointer_UTF8.h\
../../../../../modules/juce_core/text/juce_CharPointer_UTF16.h\
../../../../../modules/juce_core/text/juce_CharPointer_UTF32.h\
../../../../../modules/juce_core/text/juce_Identifier.cpp\
../../../../../modules/juce_core/text/juce_Identifier.h\
../../../../../modules/juce_core/text/juce_LocalisedStrings.cpp\
../../../../../modules/juce_core/text/juce_LocalisedStrings.h\
../../../../../modules/juce_core/text/juce_NewLine.h\
../../../../../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_StringArray.h\
../../../../../modules/juce_core/text/juce_StringPairArray.cpp\
../../../../../modules/juce_core/text/juce_StringPairArray.h\
../../../../../modules/juce_core/text/juce_StringPool.cpp\
../../../../../modules/juce_core/text/juce_StringPool.h\
../../../../../modules/juce_core/text/juce_StringRef.h\
../../../../../modules/juce_core/text/juce_TextDiff.cpp\
../../../../../modules/juce_core/text/juce_TextDiff.h\
../../../../../modules/juce_core/maths/juce_BigInteger.cpp\
../../../../../modules/juce_core/maths/juce_BigInteger.h\
../../../../../modules/juce_core/maths/juce_Expression.cpp\
../../../../../modules/juce_core/maths/juce_Expression.h\
../../../../../modules/juce_core/maths/juce_MathsFunctions.h\
../../../../../modules/juce_core/maths/juce_NormalisableRange.h\
../../../../../modules/juce_core/maths/juce_Random.cpp\
../../../../../modules/juce_core/maths/juce_Random.h\
../../../../../modules/juce_core/maths/juce_Range.h\
../../../../../modules/juce_core/memory/juce_Atomic.h\
../../../../../modules/juce_core/memory/juce_ByteOrder.h\
../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h\
../../../../../modules/juce_core/memory/juce_HeapBlock.h\
../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h\
../../../../../modules/juce_core/memory/juce_Memory.h\
../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp\
../../../../../modules/juce_core/memory/juce_MemoryBlock.h\
../../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h\
../../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h\
../../../../../modules/juce_core/memory/juce_ScopedPointer.h\
../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h\
../../../../../modules/juce_core/memory/juce_Singleton.h\
../../../../../modules/juce_core/memory/juce_WeakReference.h\
../../../../../modules/juce_core/containers/juce_AbstractFifo.cpp\
../../../../../modules/juce_core/containers/juce_AbstractFifo.h\
../../../../../modules/juce_core/containers/juce_Array.h\
../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h\
../../../../../modules/juce_core/containers/juce_DynamicObject.cpp\
../../../../../modules/juce_core/containers/juce_DynamicObject.h\
../../../../../modules/juce_core/containers/juce_ElementComparator.h\
../../../../../modules/juce_core/containers/juce_HashMap.h\
../../../../../modules/juce_core/containers/juce_LinkedListPointer.h\
../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp\
../../../../../modules/juce_core/containers/juce_NamedValueSet.h\
../../../../../modules/juce_core/containers/juce_OwnedArray.h\
../../../../../modules/juce_core/containers/juce_PropertySet.cpp\
../../../../../modules/juce_core/containers/juce_PropertySet.h\
../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h\
../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h\
../../../../../modules/juce_core/containers/juce_SortedSet.h\
../../../../../modules/juce_core/containers/juce_SparseSet.h\
../../../../../modules/juce_core/containers/juce_Variant.cpp\
../../../../../modules/juce_core/containers/juce_Variant.h\
../../../../../modules/juce_core/threads/juce_ChildProcess.cpp\
../../../../../modules/juce_core/threads/juce_ChildProcess.h\
../../../../../modules/juce_core/threads/juce_CriticalSection.h\
../../../../../modules/juce_core/threads/juce_DynamicLibrary.h\
../../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp\
../../../../../modules/juce_core/threads/juce_HighResolutionTimer.h\
../../../../../modules/juce_core/threads/juce_InterProcessLock.h\
../../../../../modules/juce_core/threads/juce_Process.h\
../../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp\
../../../../../modules/juce_core/threads/juce_ReadWriteLock.h\
../../../../../modules/juce_core/threads/juce_ScopedLock.h\
../../../../../modules/juce_core/threads/juce_ScopedReadLock.h\
../../../../../modules/juce_core/threads/juce_ScopedWriteLock.h\
../../../../../modules/juce_core/threads/juce_SpinLock.h\
../../../../../modules/juce_core/threads/juce_Thread.cpp\
../../../../../modules/juce_core/threads/juce_Thread.h\
../../../../../modules/juce_core/threads/juce_ThreadLocalValue.h\
../../../../../modules/juce_core/threads/juce_ThreadPool.cpp\
../../../../../modules/juce_core/threads/juce_ThreadPool.h\
../../../../../modules/juce_core/threads/juce_TimeSliceThread.cpp\
../../../../../modules/juce_core/threads/juce_TimeSliceThread.h\
../../../../../modules/juce_core/threads/juce_WaitableEvent.h\
../../../../../modules/juce_core/time/juce_PerformanceCounter.cpp\
../../../../../modules/juce_core/time/juce_PerformanceCounter.h\
../../../../../modules/juce_core/time/juce_RelativeTime.cpp\
../../../../../modules/juce_core/time/juce_RelativeTime.h\
../../../../../modules/juce_core/time/juce_Time.cpp\
../../../../../modules/juce_core/time/juce_Time.h\
../../../../../modules/juce_core/files/juce_DirectoryIterator.cpp\
../../../../../modules/juce_core/files/juce_DirectoryIterator.h\
../../../../../modules/juce_core/files/juce_File.cpp\
../../../../../modules/juce_core/files/juce_File.h\
../../../../../modules/juce_core/files/juce_FileFilter.cpp\
../../../../../modules/juce_core/files/juce_FileFilter.h\
../../../../../modules/juce_core/files/juce_FileInputStream.cpp\
../../../../../modules/juce_core/files/juce_FileInputStream.h\
../../../../../modules/juce_core/files/juce_FileOutputStream.cpp\
../../../../../modules/juce_core/files/juce_FileOutputStream.h\
../../../../../modules/juce_core/files/juce_FileSearchPath.cpp\
../../../../../modules/juce_core/files/juce_FileSearchPath.h\
../../../../../modules/juce_core/files/juce_MemoryMappedFile.h\
../../../../../modules/juce_core/files/juce_TemporaryFile.cpp\
../../../../../modules/juce_core/files/juce_TemporaryFile.h\
../../../../../modules/juce_core/files/juce_WildcardFileFilter.cpp\
../../../../../modules/juce_core/files/juce_WildcardFileFilter.h\
../../../../../modules/juce_core/network/juce_IPAddress.cpp\
../../../../../modules/juce_core/network/juce_IPAddress.h\
../../../../../modules/juce_core/network/juce_MACAddress.cpp\
../../../../../modules/juce_core/network/juce_MACAddress.h\
../../../../../modules/juce_core/network/juce_NamedPipe.cpp\
../../../../../modules/juce_core/network/juce_NamedPipe.h\
../../../../../modules/juce_core/network/juce_Socket.cpp\
../../../../../modules/juce_core/network/juce_Socket.h\
../../../../../modules/juce_core/network/juce_URL.cpp\
../../../../../modules/juce_core/network/juce_URL.h\
../../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp\
../../../../../modules/juce_core/streams/juce_BufferedInputStream.h\
../../../../../modules/juce_core/streams/juce_FileInputSource.cpp\
../../../../../modules/juce_core/streams/juce_FileInputSource.h\
../../../../../modules/juce_core/streams/juce_InputSource.h\
../../../../../modules/juce_core/streams/juce_InputStream.cpp\
../../../../../modules/juce_core/streams/juce_InputStream.h\
../../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp\
../../../../../modules/juce_core/streams/juce_MemoryInputStream.h\
../../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp\
../../../../../modules/juce_core/streams/juce_MemoryOutputStream.h\
../../../../../modules/juce_core/streams/juce_OutputStream.cpp\
../../../../../modules/juce_core/streams/juce_OutputStream.h\
../../../../../modules/juce_core/streams/juce_SubregionStream.cpp\
../../../../../modules/juce_core/streams/juce_SubregionStream.h\
../../../../../modules/juce_core/logging/juce_FileLogger.cpp\
../../../../../modules/juce_core/logging/juce_FileLogger.h\
../../../../../modules/juce_core/logging/juce_Logger.cpp\
../../../../../modules/juce_core/logging/juce_Logger.h\
../../../../../modules/juce_core/system/juce_CompilerSupport.h\
../../../../../modules/juce_core/system/juce_PlatformDefs.h\
../../../../../modules/juce_core/system/juce_StandardHeader.h\
../../../../../modules/juce_core/system/juce_SystemStats.cpp\
../../../../../modules/juce_core/system/juce_SystemStats.h\
../../../../../modules/juce_core/system/juce_TargetPlatform.h\
../../../../../modules/juce_core/xml/juce_XmlDocument.cpp\
../../../../../modules/juce_core/xml/juce_XmlDocument.h\
../../../../../modules/juce_core/xml/juce_XmlElement.cpp\
../../../../../modules/juce_core/xml/juce_XmlElement.h\
../../../../../modules/juce_core/javascript/juce_Javascript.cpp\
../../../../../modules/juce_core/javascript/juce_Javascript.h\
../../../../../modules/juce_core/javascript/juce_JSON.cpp\
../../../../../modules/juce_core/javascript/juce_JSON.h\
../../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp\
../../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h\
../../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp\
../../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h\
../../../../../modules/juce_core/zip/juce_ZipFile.cpp\
../../../../../modules/juce_core/zip/juce_ZipFile.h\
../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp\
../../../../../modules/juce_core/unit_tests/juce_UnitTest.h\
../../../../../modules/juce_core/misc/juce_Result.cpp\
../../../../../modules/juce_core/misc/juce_Result.h\
../../../../../modules/juce_core/misc/juce_Uuid.cpp\
../../../../../modules/juce_core/misc/juce_Uuid.h\
../../../../../modules/juce_core/misc/juce_WindowsRegistry.h\
../../../../../modules/juce_core/native/juce_android_Files.cpp\
../../../../../modules/juce_core/native/juce_android_JNIHelpers.h\
../../../../../modules/juce_core/native/juce_android_Misc.cpp\
../../../../../modules/juce_core/native/juce_android_Network.cpp\
../../../../../modules/juce_core/native/juce_android_SystemStats.cpp\
../../../../../modules/juce_core/native/juce_android_Threads.cpp\
../../../../../modules/juce_core/native/juce_BasicNativeHeaders.h\
../../../../../modules/juce_core/native/juce_curl_Network.cpp\
../../../../../modules/juce_core/native/juce_linux_CommonFile.cpp\
../../../../../modules/juce_core/native/juce_linux_Files.cpp\
../../../../../modules/juce_core/native/juce_linux_Network.cpp\
../../../../../modules/juce_core/native/juce_linux_SystemStats.cpp\
../../../../../modules/juce_core/native/juce_linux_Threads.cpp\
../../../../../modules/juce_core/native/juce_mac_Files.mm\
../../../../../modules/juce_core/native/juce_mac_Network.mm\
../../../../../modules/juce_core/native/juce_mac_Strings.mm\
../../../../../modules/juce_core/native/juce_mac_SystemStats.mm\
../../../../../modules/juce_core/native/juce_mac_Threads.mm\
../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h\
../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp\
../../../../../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_Network.cpp\
../../../../../modules/juce_core/native/juce_win32_Registry.cpp\
../../../../../modules/juce_core/native/juce_win32_SystemStats.cpp\
../../../../../modules/juce_core/native/juce_win32_Threads.cpp\
../../../../../modules/juce_core/juce_module_info\
../../../../../modules/juce_core/juce_core.h\
../../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp\
../../../../../modules/juce_cryptography/encryption/juce_BlowFish.h\
../../../../../modules/juce_cryptography/encryption/juce_Primes.cpp\
../../../../../modules/juce_cryptography/encryption/juce_Primes.h\
../../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp\
../../../../../modules/juce_cryptography/encryption/juce_RSAKey.h\
../../../../../modules/juce_cryptography/hashing/juce_MD5.cpp\
../../../../../modules/juce_cryptography/hashing/juce_MD5.h\
../../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp\
../../../../../modules/juce_cryptography/hashing/juce_SHA256.h\
../../../../../modules/juce_cryptography/hashing/juce_Whirlpool.cpp\
../../../../../modules/juce_cryptography/hashing/juce_Whirlpool.h\
../../../../../modules/juce_cryptography/juce_module_info\
../../../../../modules/juce_cryptography/juce_cryptography.h\
../../../../../modules/juce_data_structures/values/juce_Value.cpp\
../../../../../modules/juce_data_structures/values/juce_Value.h\
../../../../../modules/juce_data_structures/values/juce_ValueTree.cpp\
../../../../../modules/juce_data_structures/values/juce_ValueTree.h\
../../../../../modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp\
../../../../../modules/juce_data_structures/values/juce_ValueTreeSynchroniser.h\
../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h\
../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.cpp\
../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h\
../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp\
../../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h\
../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp\
../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h\
../../../../../modules/juce_data_structures/juce_module_info\
../../../../../modules/juce_data_structures/juce_data_structures.h\
../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp\
../../../../../modules/juce_events/messages/juce_ApplicationBase.h\
../../../../../modules/juce_events/messages/juce_CallbackMessage.h\
../../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp\
../../../../../modules/juce_events/messages/juce_DeletedAtShutdown.h\
../../../../../modules/juce_events/messages/juce_Initialisation.h\
../../../../../modules/juce_events/messages/juce_Message.h\
../../../../../modules/juce_events/messages/juce_MessageListener.cpp\
../../../../../modules/juce_events/messages/juce_MessageListener.h\
../../../../../modules/juce_events/messages/juce_MessageManager.cpp\
../../../../../modules/juce_events/messages/juce_MessageManager.h\
../../../../../modules/juce_events/messages/juce_MountedVolumeListChangeDetector.h\
../../../../../modules/juce_events/messages/juce_NotificationType.h\
../../../../../modules/juce_events/timers/juce_MultiTimer.cpp\
../../../../../modules/juce_events/timers/juce_MultiTimer.h\
../../../../../modules/juce_events/timers/juce_Timer.cpp\
../../../../../modules/juce_events/timers/juce_Timer.h\
../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp\
../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h\
../../../../../modules/juce_events/broadcasters/juce_ActionListener.h\
../../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp\
../../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h\
../../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp\
../../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h\
../../../../../modules/juce_events/broadcasters/juce_ChangeListener.h\
../../../../../modules/juce_events/broadcasters/juce_ListenerList.h\
../../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp\
../../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.h\
../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp\
../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h\
../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp\
../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h\
../../../../../modules/juce_events/native/juce_android_Messaging.cpp\
../../../../../modules/juce_events/native/juce_ios_MessageManager.mm\
../../../../../modules/juce_events/native/juce_linux_Messaging.cpp\
../../../../../modules/juce_events/native/juce_mac_MessageManager.mm\
../../../../../modules/juce_events/native/juce_osx_MessageQueue.h\
../../../../../modules/juce_events/native/juce_ScopedXLock.h\
../../../../../modules/juce_events/native/juce_win32_HiddenMessageWindow.h\
../../../../../modules/juce_events/native/juce_win32_Messaging.cpp\
../../../../../modules/juce_events/juce_module_info\
../../../../../modules/juce_events/juce_events.h\
../../../../../modules/juce_graphics/colour/juce_Colour.cpp\
../../../../../modules/juce_graphics/colour/juce_Colour.h\
../../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp\
../../../../../modules/juce_graphics/colour/juce_ColourGradient.h\
../../../../../modules/juce_graphics/colour/juce_Colours.cpp\
../../../../../modules/juce_graphics/colour/juce_Colours.h\
../../../../../modules/juce_graphics/colour/juce_FillType.cpp\
../../../../../modules/juce_graphics/colour/juce_FillType.h\
../../../../../modules/juce_graphics/colour/juce_PixelFormats.h\
../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp\
../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h\
../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h\
../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp\
../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h\
../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp\
../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h\
../../../../../modules/juce_graphics/images/juce_Image.cpp\
../../../../../modules/juce_graphics/images/juce_Image.h\
../../../../../modules/juce_graphics/images/juce_ImageCache.cpp\
../../../../../modules/juce_graphics/images/juce_ImageCache.h\
../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp\
../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h\
../../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp\
../../../../../modules/juce_graphics/images/juce_ImageFileFormat.h\
../../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp\
../../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp\
../../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp\
../../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp\
../../../../../modules/juce_graphics/geometry/juce_AffineTransform.h\
../../../../../modules/juce_graphics/geometry/juce_BorderSize.h\
../../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp\
../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h\
../../../../../modules/juce_graphics/geometry/juce_Line.h\
../../../../../modules/juce_graphics/geometry/juce_Path.cpp\
../../../../../modules/juce_graphics/geometry/juce_Path.h\
../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp\
../../../../../modules/juce_graphics/geometry/juce_PathIterator.h\
../../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp\
../../../../../modules/juce_graphics/geometry/juce_PathStrokeType.h\
../../../../../modules/juce_graphics/geometry/juce_Point.h\
../../../../../modules/juce_graphics/geometry/juce_Rectangle.h\
../../../../../modules/juce_graphics/geometry/juce_RectangleList.h\
../../../../../modules/juce_graphics/placement/juce_Justification.h\
../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp\
../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h\
../../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp\
../../../../../modules/juce_graphics/fonts/juce_AttributedString.h\
../../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp\
../../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h\
../../../../../modules/juce_graphics/fonts/juce_Font.cpp\
../../../../../modules/juce_graphics/fonts/juce_Font.h\
../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp\
../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h\
../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp\
../../../../../modules/juce_graphics/fonts/juce_TextLayout.h\
../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp\
../../../../../modules/juce_graphics/fonts/juce_Typeface.h\
../../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp\
../../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h\
../../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp\
../../../../../modules/juce_graphics/effects/juce_GlowEffect.h\
../../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h\
../../../../../modules/juce_graphics/native/juce_android_Fonts.cpp\
../../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp\
../../../../../modules/juce_graphics/native/juce_freetype_Fonts.cpp\
../../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp\
../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h\
../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm\
../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h\
../../../../../modules/juce_graphics/native/juce_mac_Fonts.mm\
../../../../../modules/juce_graphics/native/juce_RenderingHelpers.h\
../../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp\
../../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp\
../../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp\
../../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp\
../../../../../modules/juce_graphics/juce_module_info\
../../../../../modules/juce_graphics/juce_graphics.h\
../../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h\
../../../../../modules/juce_gui_basics/components/juce_Component.cpp\
../../../../../modules/juce_gui_basics/components/juce_Component.h\
../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp\
../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h\
../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp\
../../../../../modules/juce_gui_basics/components/juce_Desktop.h\
../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp\
../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h\
../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h\
../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h\
../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h\
../../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h\
../../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h\
../../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h\
../../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h\
../../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h\
../../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h\
../../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp\
../../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h\
../../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h\
../../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h\
../../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h\
../../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp\
../../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.h\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp\
../../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h\
../../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp\
../../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h\
../../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h\
../../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h\
../../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h\
../../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h\
../../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h\
../../../../../modules/juce_gui_basics/widgets/juce_Label.cpp\
../../../../../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_ProgressBar.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.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_TableHeaderComponent.h\
../../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h\
../../../../../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_Toolbar.h\
../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h\
../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h\
../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp\
../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h\
../../../../../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_AlertWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp\
../../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h\
../../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp\
../../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h\
../../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h\
../../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h\
../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp\
../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h\
../../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp\
../../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h\
../../../../../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/layout/juce_AnimatedPosition.h\
../../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h\
../../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h\
../../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h\
../../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h\
../../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h\
../../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h\
../../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp\
../../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h\
../../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp\
../../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h\
../../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h\
../../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h\
../../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h\
../../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp\
../../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h\
../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp\
../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h\
../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp\
../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h\
../../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp\
../../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h\
../../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp\
../../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h\
../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp\
../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h\
../../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp\
../../../../../modules/juce_gui_basics/layout/juce_Viewport.h\
../../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_Button.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_Button.h\
../../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_TextButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_TextButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h\
../../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp\
../../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h\
../../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp\
../../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h\
../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp\
../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h\
../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp\
../../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp\
../../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h\
../../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp\
../../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h\
../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp\
../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h\
../../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.cpp\
../../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h\
../../../../../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/lookandfeel/juce_LookAndFeel.cpp\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp\
../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp\
../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.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_FileBrowserListener.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp\
../../../../../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_FileListComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp\
../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp\
../../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp\
../../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h\
../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp\
../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp\
../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h\
../../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp\
../../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h\
../../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.cpp\
../../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h\
../../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp\
../../../../../modules/juce_gui_basics/misc/juce_DropShadower.h\
../../../../../modules/juce_gui_basics/application/juce_Application.cpp\
../../../../../modules/juce_gui_basics/application/juce_Application.h\
../../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp\
../../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp\
../../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm\
../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm\
../../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp\
../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp\
../../../../../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_mac_Windowing.mm\
../../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h\
../../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp\
../../../../../modules/juce_gui_basics/native/juce_win32_FileChooser.cpp\
../../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp\
../../../../../modules/juce_gui_basics/juce_module_info\
../../../../../modules/juce_gui_basics/juce_gui_basics.h\
../../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp\
../../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h\
../../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp\
../../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h\
../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h\
../../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp\
../../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h\
../../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h\
../../../../../modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp\
../../../../../modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h\
../../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp\
../../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h\
../../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp\
../../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h\
../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h\
../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h\
../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h\
../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp\
../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h\
../../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h\
../../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp\
../../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.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_KeyMappingEditorComponent.h\
../../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp\
../../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.h\
../../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp\
../../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h\
../../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp\
../../../../../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/misc/juce_SystemTrayIconComponent.cpp\
../../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h\
../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h\
../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp\
../../../../../modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm\
../../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp\
../../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp\
../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm\
../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h\
../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm\
../../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp\
../../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm\
../../../../../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_gui_extra/juce_module_info\
../../../../../modules/juce_gui_extra/juce_gui_extra.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLImage.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLImage.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLRenderer.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h\
../../../../../modules/juce_opengl/opengl/juce_OpenGLTexture.cpp\
../../../../../modules/juce_opengl/opengl/juce_OpenGLTexture.h\
../../../../../modules/juce_opengl/geometry/juce_Draggable3DOrientation.h\
../../../../../modules/juce_opengl/geometry/juce_Matrix3D.h\
../../../../../modules/juce_opengl/geometry/juce_Quaternion.h\
../../../../../modules/juce_opengl/geometry/juce_Vector3D.h\
../../../../../modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp\
../../../../../modules/juce_opengl/utils/juce_OpenGLAppComponent.h\
../../../../../modules/juce_opengl/native/juce_MissingGLDefinitions.h\
../../../../../modules/juce_opengl/native/juce_OpenGL_android.h\
../../../../../modules/juce_opengl/native/juce_OpenGL_ios.h\
../../../../../modules/juce_opengl/native/juce_OpenGL_linux.h\
../../../../../modules/juce_opengl/native/juce_OpenGL_osx.h\
../../../../../modules/juce_opengl/native/juce_OpenGL_win32.h\
../../../../../modules/juce_opengl/native/juce_OpenGLExtensions.h\
../../../../../modules/juce_opengl/juce_module_info\
../../../../../modules/juce_opengl/juce_opengl.h\
../../../../../modules/juce_video/playback/juce_DirectShowComponent.h\
../../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h\
../../../../../modules/juce_video/capture/juce_CameraDevice.cpp\
../../../../../modules/juce_video/capture/juce_CameraDevice.h\
../../../../../modules/juce_video/native/juce_android_CameraDevice.cpp\
../../../../../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/juce_module_info\
../../../../../modules/juce_video/juce_video.h\
../../../JuceLibraryCode/AppConfig.h\
../../../JuceLibraryCode/BinaryData.cpp\
../../../JuceLibraryCode/BinaryData.h\
../../../../../modules/juce_audio_basics/juce_audio_basics.cpp\
../../../../../modules/juce_audio_devices/juce_audio_devices.cpp\
../../../../../modules/juce_audio_formats/juce_audio_formats.cpp\
@@ -67,6 +965,7 @@ LOCAL_SRC_FILES := \
../../../../../modules/juce_gui_extra/juce_gui_extra.cpp\
../../../../../modules/juce_opengl/juce_opengl.cpp\
../../../../../modules/juce_video/juce_video.cpp\
../../../JuceLibraryCode/JuceHeader.h\
ifeq ($(NDK_DEBUG),1)
LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -I "../../../../modules" -O0 -std=c++11 -std=gnu++11 -D "JUCE_ANDROID=1" -D "JUCE_ANDROID_API_VERSION=9" -D "JUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo" -D JUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000"


+ 16
- 2
examples/Demo/Builds/Android/src/com/juce/jucedemo/JuceDemo.java View File

@@ -43,6 +43,13 @@ import android.text.ClipboardManager;
import android.text.InputType;
import android.util.DisplayMetrics;
import android.util.Log;
import java.lang.Runnable;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.TimerTask;
import java.io.*;
import java.net.URL;
import java.net.HttpURLConnection;
@@ -234,7 +241,7 @@ public class JuceDemo extends Activity
if (keepAliveTimer != null)
{
keepAliveTimer->cancel();
keepAliveTimer.cancel();
keepAliveTimer = null;
}
@@ -256,7 +263,14 @@ public class JuceDemo extends Activity
public void run()
{
android.app.Instrumentation instrumentation = new android.app.Instrumentation();
instrumentation.sendKeyDownUpSync (KeyEvent.KEYCODE_BREAK);
try
{
instrumentation.sendKeyDownUpSync (KeyEvent.KEYCODE_BREAK);
}
catch (Exception e)
{
}
}
}, 2000, 2000);
}


+ 8
- 0
extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp View File

@@ -433,6 +433,10 @@
<Option compile="0"/>
<Option link="0"/>
</Unit>
<Unit filename="../../Source/Project Saving/jucer_ProjectExport_AndroidStudio.h">
<Option compile="0"/>
<Option link="0"/>
</Unit>
<Unit filename="../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h">
<Option compile="0"/>
<Option link="0"/>
@@ -733,6 +737,10 @@
<Option compile="0"/>
<Option link="0"/>
</Unit>
<Unit filename="../../Source/BinaryData/background_logo.svg">
<Option compile="0"/>
<Option link="0"/>
</Unit>
<Unit filename="../../Source/BinaryData/background_tile.png">
<Option compile="0"/>
<Option link="0"/>


+ 26
- 22
extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj View File

@@ -147,6 +147,7 @@
16017456A45F74C692A3AE45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; };
1614411A8699B82D1F7B0346 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
16203C6791259C9718A04C3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutinePanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp"; sourceTree = "SOURCE_ROOT"; };
16385D79A30C6E06EFB46B79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_AndroidStudio.h"; path = "../../Source/Project Saving/jucer_ProjectExport_AndroidStudio.h"; sourceTree = "SOURCE_ROOT"; };
168F5F32F673036DDAEF1D8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; };
1729AEDC34001C31B8CC357C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_FileHelpers.cpp"; path = "../../Source/Utility/jucer_FileHelpers.cpp"; sourceTree = "SOURCE_ROOT"; };
1772B02BAF54F29AD99DF42E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; };
@@ -723,6 +724,7 @@
BA5C7DE347A73A87F687703C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; };
BA95268EEE80F9509EC1F76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; };
BAC43B20E14A340CCF14119C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; };
BB9C1E6E54A16F795908C469 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "background_logo.svg"; path = "../../Source/BinaryData/background_logo.svg"; sourceTree = "SOURCE_ROOT"; };
BC17B02633EF1E31024051C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
BCAD13352CE76BA81629A6E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; };
BCCFDFB2C02C4AA436C0ECF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SliderHandler.h"; path = "../../Source/ComponentEditor/components/jucer_SliderHandler.h"; sourceTree = "SOURCE_ROOT"; };
@@ -756,7 +758,6 @@
C5D5D2FFB030BD43160167EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; };
C5FCECA838D4D12D03929139 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
C61E82D93918A611FAFD9E9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; };
C68355AA4D62939EECAD469E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; };
C6861DB44A31CE7A3DEFA083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../../modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; };
C6E46DBD249D9426C95E2235 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; };
C717D2384896547D1CD993F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; };
@@ -765,7 +766,6 @@
C7B47372A9D5970E3D9A5400 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupInformationComponent.h"; path = "../../Source/Project/jucer_GroupInformationComponent.h"; sourceTree = "SOURCE_ROOT"; };
C7E19F79947BEFC7DB7A9CE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; };
C83992DA0BE30EA3CD06EA98 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; };
C85B4D62B96F4A44890F20E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; };
C8A229ACD244F402C57286CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_MSVC.h"; path = "../../Source/Project Saving/jucer_ProjectExport_MSVC.h"; sourceTree = "SOURCE_ROOT"; };
C90C66C5727759D5CBD5FB07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; };
C9616830BB2474066AC8C910 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceFile.h"; path = "../../Source/Project Saving/jucer_ResourceFile.h"; sourceTree = "SOURCE_ROOT"; };
@@ -780,14 +780,13 @@
CD140A1C0161176682F6CA29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
CD3216F23C7B273B010A8D12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; };
CDCAF0EC777DA2884AEB2B59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; };
CDDF5BDC75277F7B83A38885 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
CDF8F65F9079B2C14A740F0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
CE1DFE4E3908943656E180AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
CF0615A1AF1A514A60322B50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
CF21D9DB3AEC0A4DCAB36A99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; };
CF6C8BD0DA3D8CD4E99EBADA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
CF8011B3C67B609032974DA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewCppFileTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
D00F311BFC3C2625C457CB9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
D041043D3B554B88F855C174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; };
D0D8B580D0689FFF4B9B823B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StrokeType.h"; path = "../../Source/ComponentEditor/paintelements/jucer_StrokeType.h"; sourceTree = "SOURCE_ROOT"; };
D0F1614CC861E8E0B59B7A06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; };
D10D51A0A2D63F38B4D86A60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceFile.cpp"; path = "../../Source/Project Saving/jucer_ResourceFile.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -806,62 +805,61 @@
D5057D7B18ABD5E810A6F830 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
D526C38D581425949BA0E4AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePreviewComponent.h"; path = "../../Source/Application/jucer_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
D53B54D1786A1FFC024BF064 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; };
D678882D133090214AF681BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../../modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; };
D6C91E2BF537F75A80F5C1DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; };
D75EAC16FAECCC51E3669193 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; };
D780ED33573AED5AD383A036 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; };
D782DA091AD3ECE158FC6A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
D800DE818BEDBF4579D15B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; };
D87FC8F6834E9DC9C8E88B94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JustificationProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_JustificationProperty.h"; sourceTree = "SOURCE_ROOT"; };
D926E13AB5AD647A7A00F486 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
D92A6E9404A30EED32DCE4ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePositionedRectangle.h"; path = "../../Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h"; sourceTree = "SOURCE_ROOT"; };
D9342535EA61901A1AD816C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
DA345D5B9DABD049F90DC96F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; };
DC5E7FF30B01118F6DAEC38F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; };
DB876F7873F42DC685A58CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
DC922C6A65D260C18E888E49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_ComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
DD00494140C86144306A9356 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; };
DE8DF5D263F40F65581CFDE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
DFC6364D81D9C60BD4CA9D12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
E0F9CA57E44F7F7E7E217E47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentUndoableAction.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentUndoableAction.h"; sourceTree = "SOURCE_ROOT"; };
E19160CF7208320D128786CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../../modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; };
E1D8CCD9F4ACBE1EC1D5BEA0 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_AudioApp.svg"; path = "../../Source/BinaryData/wizard_AudioApp.svg"; sourceTree = "SOURCE_ROOT"; };
E2374E15D65425C4101237E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewComponentTemplate.h"; path = "../../Source/BinaryData/jucer_NewComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
E2C1C995D554A3F0A363CE58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; };
E2DBA3307837B64AFCCD8F8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
E3B56C5718D87CA0EFCB2662 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_AudioComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
E4BB22E27C5AA4B666F265BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
E4BD4C43370651B49F75855B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_SimpleWindow.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_SimpleWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
E570E57CC1FCEF78B54A7084 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
E5D6C36496F5BC84D7213BE8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
E62D9BA6E92FE7BB6EF65699 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; };
E65A820D34BF39478B7C5925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
E6F5CEC32EDC917B054467EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
E720FBCD836FF3AA466C31B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
E96597BBC6A98255B51B94DC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
25F52316D256B4534BED16D1 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
CF0615A1AF1A514A60322B50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
C68355AA4D62939EECAD469E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../../modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; };
C85B4D62B96F4A44890F20E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; };
CDDF5BDC75277F7B83A38885 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
D041043D3B554B88F855C174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; };
D3E139185095C486DD3D61F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
D6C91E2BF537F75A80F5C1DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; };
D780ED33573AED5AD383A036 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; };
D782DA091AD3ECE158FC6A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
D678882D133090214AF681BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../../modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; };
D7A7F1AA9F313B0CCAAA73A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; };
D800DE818BEDBF4579D15B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; };
D9342535EA61901A1AD816C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
D95D7B49EC6C6BDCB5A1B988 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
D9B077E2ECDDA94961E134D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
D9E59DE07A815AB303A297D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../../modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; };
DAF84A553D264705FA6EB6FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; };
DB20268A566DABEAE3F2CBEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
DB876F7873F42DC685A58CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
DBE0CDE1B017190ABBFF557C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CodeBlocks.h"; path = "../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = "SOURCE_ROOT"; };
DC5E7FF30B01118F6DAEC38F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; };
DCBB17488227A2CA7D3D3947 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_DependencyPathPropertyComponent.cpp"; path = "../../Source/Project/jucer_DependencyPathPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
DCCB75165B7C73A589498E87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
DD2494D5F1C081898D616AF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; };
DD985A60FB76E976AF91852D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; };
DE40B42B57F29C650CB7F2AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; };
DE5F3C9EF6BFFDE73AF9E7FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
DE8DF5D263F40F65581CFDE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
DEF579B1433EB8DEE7AB50F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; };
DF725A596B7BCD7520CC0A9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceEditorPanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
DF7BB5B6B394EDEEF5F5B4B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
DFC6364D81D9C60BD4CA9D12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
E07C56267CBB46FC44EF2026 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
E19160CF7208320D128786CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../../modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; };
E1C16C872E34BCB144B469F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; };
E27F0860F27023BAA9798B46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
E284B565DBD647DC0830D23B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
E2C1C995D554A3F0A363CE58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; };
E2DBA3307837B64AFCCD8F8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
E3869AC657E984565F1718AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConnectedChildProcess.h"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
E3FF16862AA1B2F943DC616C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
E446FFE889CD490FDE3F0F2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -869,11 +867,15 @@
E4F9D1E097CC2C1D1291823C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V2.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp"; sourceTree = "SOURCE_ROOT"; };
E530742870F07704E9616358 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
E54D0994D31E20A0A05EBA2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; };
E570E57CC1FCEF78B54A7084 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
E60E28D1B7491047DEA236AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; };
E62D9BA6E92FE7BB6EF65699 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; };
E63F54CF8D5D922A319C6962 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconXcodeIOS.png; path = ../../Source/BinaryData/projectIconXcodeIOS.png; sourceTree = "SOURCE_ROOT"; };
E642193A9990C48CFB6479A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; };
E654E3A3CD45A888C5F773DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
E6F5CEC32EDC917B054467EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
E70CA21960A64CCB835725FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectType.cpp"; path = "../../Source/Project/jucer_ProjectType.cpp"; sourceTree = "SOURCE_ROOT"; };
E720FBCD836FF3AA466C31B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
E73C7E17116F6085765622E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; };
E7A4604F766ABC8BE26C94A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; };
E7B6A0CBA0D27A095E83F5B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -1072,6 +1074,7 @@
5432B7B9B2CF2EAEC8B66D5C, ); name = ComponentEditor; sourceTree = "<group>"; };
E345840128627D533DF908AC = {isa = PBXGroup; children = (
6E7353DFEA8825B515049ABB,
16385D79A30C6E06EFB46B79,
DBE0CDE1B017190ABBFF557C,
05076CDF1511A5F8A8E18F1D,
C8A229ACD244F402C57286CD,
@@ -1165,6 +1168,7 @@
88DFD62CB6545EE8CA5C485B = {isa = PBXGroup; children = (
955A73C474B8CD4FB0D9A96F,
5F4F4EAB042F2730F94A1CEA,
BB9C1E6E54A16F795908C469,
301592EBAC0FFF6F5B268E99,
41105E536155E394E54BDD35,
5F6584B675E30761521A9F42,


+ 11
- 0
extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj View File

@@ -249,6 +249,7 @@
</Filter>
<Filter Name="Project Saving">
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -544,6 +545,16 @@
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\Source\BinaryData\background_logo.svg">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\Source\BinaryData\background_tile.png">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">


+ 11
- 0
extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj View File

@@ -249,6 +249,7 @@
</Filter>
<Filter Name="Project Saving">
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -544,6 +545,16 @@
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\Source\BinaryData\background_logo.svg">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32"
ExcludedFromBuild="true">
<Tool Name="VCCLCompilerTool"/>
</FileConfiguration>
</File>
<File RelativePath="..\..\Source\BinaryData\background_tile.png">
<FileConfiguration Name="Debug|Win32"
ExcludedFromBuild="true">


+ 2
- 0
extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj View File

@@ -1135,6 +1135,7 @@
<ClInclude Include="..\..\Source\ComponentEditor\jucer_PaintRoutine.h"/>
<ClInclude Include="..\..\Source\ComponentEditor\jucer_UtilityFunctions.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -1541,6 +1542,7 @@
</ItemGroup>
<ItemGroup>
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt"/>
<None Include="..\..\Source\BinaryData\background_logo.svg"/>
<None Include="..\..\Source\BinaryData\background_tile.png"/>
<None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/>
<None Include="..\..\Source\BinaryData\colourscheme_light.xml"/>


+ 6
- 0
extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters View File

@@ -1584,6 +1584,9 @@
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
@@ -2798,6 +2801,9 @@
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_logo.svg">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_tile.png">
<Filter>The Introjucer\BinaryData</Filter>
</None>


+ 2
- 0
extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj View File

@@ -1141,6 +1141,7 @@
<ClInclude Include="..\..\Source\ComponentEditor\jucer_PaintRoutine.h"/>
<ClInclude Include="..\..\Source\ComponentEditor\jucer_UtilityFunctions.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -1547,6 +1548,7 @@
</ItemGroup>
<ItemGroup>
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt"/>
<None Include="..\..\Source\BinaryData\background_logo.svg"/>
<None Include="..\..\Source\BinaryData\background_tile.png"/>
<None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/>
<None Include="..\..\Source\BinaryData\colourscheme_light.xml"/>


+ 6
- 0
extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters View File

@@ -1584,6 +1584,9 @@
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
@@ -2798,6 +2801,9 @@
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_logo.svg">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_tile.png">
<Filter>The Introjucer\BinaryData</Filter>
</None>


+ 2
- 0
extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj View File

@@ -1141,6 +1141,7 @@
<ClInclude Include="..\..\Source\ComponentEditor\jucer_PaintRoutine.h"/>
<ClInclude Include="..\..\Source\ComponentEditor\jucer_UtilityFunctions.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -1547,6 +1548,7 @@
</ItemGroup>
<ItemGroup>
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt"/>
<None Include="..\..\Source\BinaryData\background_logo.svg"/>
<None Include="..\..\Source\BinaryData\background_tile.png"/>
<None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/>
<None Include="..\..\Source\BinaryData\colourscheme_light.xml"/>


+ 6
- 0
extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters View File

@@ -1584,6 +1584,9 @@
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
@@ -2798,6 +2801,9 @@
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_logo.svg">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_tile.png">
<Filter>The Introjucer\BinaryData</Filter>
</None>


+ 2
- 0
extras/Introjucer/Builds/VisualStudio2015/The Introjucer.vcxproj View File

@@ -1141,6 +1141,7 @@
<ClInclude Include="..\..\Source\ComponentEditor\jucer_PaintRoutine.h"/>
<ClInclude Include="..\..\Source\ComponentEditor\jucer_UtilityFunctions.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_MSVC.h"/>
@@ -1547,6 +1548,7 @@
</ItemGroup>
<ItemGroup>
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt"/>
<None Include="..\..\Source\BinaryData\background_logo.svg"/>
<None Include="..\..\Source\BinaryData\background_tile.png"/>
<None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/>
<None Include="..\..\Source\BinaryData\colourscheme_light.xml"/>


+ 6
- 0
extras/Introjucer/Builds/VisualStudio2015/The Introjucer.vcxproj.filters View File

@@ -1584,6 +1584,9 @@
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_AndroidStudio.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h">
<Filter>The Introjucer\Project Saving</Filter>
</ClInclude>
@@ -2798,6 +2801,9 @@
<None Include="..\..\Source\BinaryData\AudioPluginXCodeScript.txt">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_logo.svg">
<Filter>The Introjucer\BinaryData</Filter>
</None>
<None Include="..\..\Source\BinaryData\background_tile.png">
<Filter>The Introjucer\BinaryData</Filter>
</None>


+ 4
- 0
extras/Introjucer/Introjucer.jucer View File

@@ -402,6 +402,8 @@
<GROUP id="{579C9644-D5C2-8469-9439-F91C81337531}" name="Project Saving">
<FILE id="TtXohM" name="jucer_ProjectExport_Android.h" compile="0"
resource="0" file="Source/Project Saving/jucer_ProjectExport_Android.h"/>
<FILE id="AhU3qX" name="jucer_ProjectExport_AndroidStudio.h" compile="0"
resource="0" file="Source/Project Saving/jucer_ProjectExport_AndroidStudio.h"/>
<FILE id="EkBkj1" name="jucer_ProjectExport_CodeBlocks.h" compile="0"
resource="0" file="Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"/>
<FILE id="mVXrLi" name="jucer_ProjectExport_Make.h" compile="0" resource="0"
@@ -583,6 +585,8 @@
</GROUP>
<FILE id="RSJcrRl" name="AudioPluginXCodeScript.txt" compile="0" resource="1"
file="Source/BinaryData/AudioPluginXCodeScript.txt"/>
<FILE id="IW9hGs" name="background_logo.svg" compile="0" resource="1"
file="Source/BinaryData/background_logo.svg"/>
<FILE id="eYn4jB" name="background_tile.png" compile="0" resource="1"
file="Source/BinaryData/background_tile.png"/>
<FILE id="geMos6" name="colourscheme_dark.xml" compile="0" resource="1"


+ 86
- 42
extras/Introjucer/JuceLibraryCode/BinaryData.cpp View File

@@ -1470,15 +1470,57 @@ static const unsigned char temp_binary_data_21[] =
const char* AudioPluginXCodeScript_txt = (const char*) temp_binary_data_21;
//================== background_tile.png ==================
//================== background_logo.svg ==================
static const unsigned char temp_binary_data_22[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n"
"\t viewBox=\"0 0 451.7 451.7\" enable-background=\"new 0 0 451.7 451.7\" xml:space=\"preserve\">\r\n"
"<g>\r\n"
"\t<g>\r\n"
"\t\t<path fill=\"#808285\" d=\"M111.8,421.9c-8.7,0-15.6-3.2-21.8-11.3l8.5-7.3c4.2,5.5,8.2,7.6,13.3,7.6c9.2,0,15.5-6.9,15.5-17.5v-51.8\r\n"
"\t\t\th11.7v51.8C138.9,410.4,127.7,421.9,111.8,421.9z\"/>\r\n"
"\t\t<path fill=\"#808285\" d=\"M185.7,421.9c-17,0-31.6-12.5-31.6-33.1v-47.2h11.7v46.6c0,13.8,8.2,22.8,19.9,22.8c11.7,0,20-8.9,20-22.8\r\n"
"\t\t\tv-46.6h11.7v47.2C217.4,409.4,202.7,421.9,185.7,421.9z\"/>\r\n"
"\t\t<path fill=\"#808285\" d=\"M268.9,421.9c-22.6,0-40.9-18.1-40.9-40.6c0-22.6,18.5-40.6,40.9-40.6c10,0,18.8,3.5,25.7,9.2l-6.9,8.6\r\n"
"\t\t\tc-7.1-5-12-6.8-18.7-6.8c-16.2,0-29.1,13-29.1,29.7c0,16.7,12.9,29.7,29.1,29.7c6.4,0,11.8-2,18.6-6.7l7,8.7\r\n"
"\t\t\tC285.9,419.6,278.1,421.9,268.9,421.9z\"/>\r\n"
"\t\t<path fill=\"#808285\" d=\"M307.5,420.9v-79.3h47.8v10.5h-36.1v23.5h34.7V386h-34.7v24.4h36.1v10.5H307.5z\"/>\r\n"
"\t</g>\r\n"
"</g>\r\n"
"<g>\r\n"
"\t<path fill=\"#808285\" d=\"M222.6,313.3c-78.2,0-141.7-63.6-141.7-141.7S144.5,29.8,222.6,29.8s141.7,63.6,141.7,141.7\r\n"
"\t\tS300.8,313.3,222.6,313.3z M222.6,39.3c-72.9,0-132.3,59.3-132.3,132.3s59.3,132.3,132.3,132.3s132.3-59.3,132.3-132.3\r\n"
"\t\tS295.6,39.3,222.6,39.3z\"/>\r\n"
"\t<path fill=\"#414042\" d=\"M334.5,166.8c2.4,0,4.8-0.9,6.5-2.6c1.9-1.9,2.7-4.4,2.4-7c-2.6-22.2-11.4-43.3-25.3-60.9\r\n"
"\t\tc-1.7-2.2-4.1-3.3-6.6-3.3c-2.3,0-4.5,1-6.2,2.7L236.9,164c-1.1,1.1-0.3,2.9,1.2,2.9L334.5,166.8z\"/>\r\n"
"\t<path fill=\"#58595B\" d=\"M311.5,250.2L311.5,250.2c2.6,0,4.9-1.2,6.6-3.3c13.9-17.6,22.6-38.7,25.3-60.9c0.3-2.6-0.6-5.1-2.4-7\r\n"
"\t\tc-1.7-1.7-4.1-2.6-6.5-2.6l-96.4,0c-1.5,0-2.2,1.8-1.2,2.9l68.4,68.4C307,249.2,309.2,250.2,311.5,250.2z\"/>\r\n"
"\t<path fill=\"#6D6E71\" d=\"M229.9,290L229.9,290c1.8,1.8,4.3,2.7,7.1,2.3c22.3-2.6,43.4-11.3,60.9-25.2c2.1-1.6,3.2-4,3.3-6.7\r\n"
"\t\tc0-2.4-1-4.7-2.8-6.4l-68.1-68.1c-1.1-1.1-2.9-0.3-2.9,1.2l0,96.7C227.4,286.1,228.2,288.4,229.9,290z\"/>\r\n"
"\t<path fill=\"#A7A9AC\" d=\"M133.8,92.9c-2.6,0-4.9,1.2-6.6,3.3c-13.9,17.6-22.6,38.7-25.3,60.9c-0.3,2.6,0.6,5.1,2.4,7\r\n"
"\t\tc1.7,1.7,4.1,2.6,6.5,2.6l96.4,0c1.5,0,2.2-1.8,1.2-2.9L140,95.6C138.3,93.9,136.1,92.9,133.8,92.9z\"/>\r\n"
"\t<path fill=\"#BCBEC0\" d=\"M215.4,53.1c-1.8-1.8-4.3-2.7-7.1-2.3C186.1,53.4,165,62.1,147.4,76c-2.1,1.6-3.2,4-3.3,6.7\r\n"
"\t\tc0,2.4,1,4.7,2.8,6.4l68.1,68.1c1.1,1.1,2.9,0.3,2.9-1.2l0-96.7C217.9,57,217,54.8,215.4,53.1z\"/>\r\n"
"\t<path fill=\"#D1D3D4\" d=\"M301.3,82.7c0-2.6-1.2-4.9-3.3-6.6c-17.6-13.9-38.7-22.6-60.9-25.3c-2.6-0.3-5.1,0.6-7,2.4\r\n"
"\t\tc-1.7,1.7-2.6,4.1-2.6,6.5l0,96.4c0,1.5,1.8,2.2,2.9,1.2l68.4-68.4C300.3,87.2,301.3,85,301.3,82.7z\"/>\r\n"
"\t<path fill=\"#939598\" d=\"M207.2,176.3l-96.4,0c-2.4,0-4.8,0.9-6.5,2.6c-1.9,1.9-2.7,4.4-2.4,7c2.6,22.2,11.4,43.3,25.3,60.9\r\n"
"\t\tc1.7,2.2,4.1,3.3,6.6,3.3c2.3,0,4.5-1,6.2-2.7c0,0,0,0,0,0l68.4-68.4C209.4,178.1,208.7,176.3,207.2,176.3z\"/>\r\n"
"\t<path fill=\"#808285\" d=\"M215.1,185.8L146.9,254c-1.7,1.7-2.8,4-2.8,6.4c0,2.7,1.2,5.1,3.3,6.7c17.6,13.9,38.6,22.6,60.9,25.2\r\n"
"\t\tc2.7,0.3,5.2-0.5,7.1-2.3c1.6-1.6,2.5-3.8,2.5-6.3c0,0,0,0,0,0l0-96.7C217.9,185.5,216.1,184.8,215.1,185.8z\"/>\r\n"
"</g>\r\n"
"</svg>\r\n";
const char* background_logo_svg = (const char*) temp_binary_data_22;
//================== background_tile.png ==================
static const unsigned char temp_binary_data_23[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,7,0,0,0,7,8,6,0,0,0,196,82,87,211,0,0,0,94,73,68,65,84,120,218,85,141,73,14,0,33,8,4,253,137,226,18,19,245,234,255,127,70,75,155,232,56,135,10,132,94,112,33,4,37,222,123,205,57,107,74,105,239,196,137,
8,72,239,29,99,12,204,57,209,90,227,237,19,45,113,161,209,12,234,172,18,49,70,88,229,134,34,103,173,245,159,60,134,82,10,238,79,166,223,106,238,91,100,229,73,191,80,92,47,179,68,223,148,158,98,226,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* background_tile_png = (const char*) temp_binary_data_22;
const char* background_tile_png = (const char*) temp_binary_data_23;
//================== colourscheme_dark.xml ==================
static const unsigned char temp_binary_data_23[] =
static const unsigned char temp_binary_data_24[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@@ -1503,10 +1545,10 @@ static const unsigned char temp_binary_data_23[] =
" <COLOUR name=\"Error\" colour=\"FFE60000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_dark_xml = (const char*) temp_binary_data_23;
const char* colourscheme_dark_xml = (const char*) temp_binary_data_24;
//================== colourscheme_light.xml ==================
static const unsigned char temp_binary_data_24[] =
static const unsigned char temp_binary_data_25[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@@ -1531,10 +1573,10 @@ static const unsigned char temp_binary_data_24[] =
" <COLOUR name=\"Error\" colour=\"ffcc0000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_light_xml = (const char*) temp_binary_data_24;
const char* colourscheme_light_xml = (const char*) temp_binary_data_25;
//================== juce_icon.png ==================
static const unsigned char temp_binary_data_25[] =
static const unsigned char temp_binary_data_26[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,67,120,105,84,88,116,88,77,76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,
112,97,99,107,101,116,32,98,101,103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,99,122,107,99,57,100,34,63,62,10,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,
97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,32,67,111,114,101,32,53,46,54,45,99,48,49,52,32,55,57,46,49,53,54,55,57,55,44,32,50,48,49,52,47,48,56,47,50,48,45,48,57,58,53,51,58,
@@ -2360,10 +2402,10 @@ static const unsigned char temp_binary_data_25[] =
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,255,255,88,234,20,149,130,13,78,186,0,0,0,0,73,69,78,68,
174,66,96,130,0,0 };
const char* juce_icon_png = (const char*) temp_binary_data_25;
const char* juce_icon_png = (const char*) temp_binary_data_26;
//================== projectIconAndroid.png ==================
static const unsigned char temp_binary_data_26[] =
static const unsigned char temp_binary_data_27[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60,0,0,3,134,105,84,88,116,88,77,76,
58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,99,122,107,99,57,100,34,63,62,32,60,
120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,32,67,111,114,101,32,53,46,54,45,99,48,49,52,32,55,57,46,49,53,
@@ -2480,10 +2522,10 @@ static const unsigned char temp_binary_data_26[] =
139,240,165,4,64,57,166,132,157,54,246,220,165,230,39,27,156,211,4,232,176,247,44,193,125,203,174,137,229,132,198,114,231,150,74,124,238,9,19,9,244,154,7,0,175,121,0,240,154,7,0,175,121,0,240,154,7,0,175,121,0,240,154,7,0,175,189,235,246,255,2,12,0,158,
137,39,54,252,6,9,64,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconAndroid_png = (const char*) temp_binary_data_26;
const char* projectIconAndroid_png = (const char*) temp_binary_data_27;
//================== projectIconCodeblocks.png ==================
static const unsigned char temp_binary_data_27[] =
static const unsigned char temp_binary_data_28[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60,0,0,3,134,105,84,88,116,88,77,76,
58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,99,122,107,99,57,100,34,63,62,32,60,
120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,32,67,111,114,101,32,53,46,54,45,99,48,49,52,32,55,57,46,49,53,
@@ -2653,10 +2695,10 @@ static const unsigned char temp_binary_data_27[] =
202,84,15,91,2,120,13,161,41,237,191,111,130,252,4,17,176,224,208,111,140,253,56,221,147,207,16,11,238,233,234,37,192,250,248,241,59,248,122,10,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,
62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,214,12,176,62,126,28,143,255,39,192,0,238,147,31,89,162,25,31,21,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconCodeblocks_png = (const char*) temp_binary_data_27;
const char* projectIconCodeblocks_png = (const char*) temp_binary_data_28;
//================== projectIconLinuxMakefile.png ==================
static const unsigned char temp_binary_data_28[] =
static const unsigned char temp_binary_data_29[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,110,0,0,0,128,8,6,0,0,0,234,21,92,9,0,0,10,65,105,67,67,80,73,67,67,32,80,114,111,102,105,108,101,0,0,72,13,157,150,119,84,83,217,22,135,207,189,55,189,208,18,34,32,37,244,26,122,9,32,210,59,72,21,4,
81,137,73,128,80,2,134,132,38,118,68,5,70,20,17,41,86,100,84,192,1,71,135,34,99,69,20,11,131,130,98,215,9,242,16,80,198,193,81,68,69,229,221,140,107,9,239,173,53,243,222,154,253,199,89,223,217,231,183,215,217,103,239,125,215,186,0,80,252,130,4,194,116,
88,1,128,52,161,88,20,238,235,193,92,18,19,203,196,247,2,24,16,1,14,88,1,192,225,102,102,4,71,248,68,2,212,252,189,61,153,153,168,72,198,179,246,238,46,128,100,187,219,44,191,80,38,115,214,255,127,145,34,55,67,36,6,0,10,69,213,54,60,126,38,23,229,2,148,
@@ -2892,10 +2934,10 @@ static const unsigned char temp_binary_data_28[] =
194,72,142,254,249,31,79,111,60,173,241,241,124,82,34,189,246,233,251,163,179,223,129,178,15,181,97,103,68,217,251,253,17,198,63,35,254,218,150,109,129,235,236,183,141,63,16,97,60,125,157,93,199,211,219,217,245,128,211,250,223,12,238,70,210,82,169,25,
10,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconLinuxMakefile_png = (const char*) temp_binary_data_28;
const char* projectIconLinuxMakefile_png = (const char*) temp_binary_data_29;
//================== projectIconVisualStudio.png ==================
static const unsigned char temp_binary_data_29[] =
static const unsigned char temp_binary_data_30[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,4,166,105,84,88,116,88,77,76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,120,58,120,109,112,109,101,
116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,88,77,80,32,67,111,114,101,32,53,46,52,46,48,34,62,10,32,32,32,60,114,100,102,58,82,68,70,32,120,109,108,110,115,58,114,
100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,10,32,32,32,32,32,32,60,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110,
@@ -2998,10 +3040,10 @@ static const unsigned char temp_binary_data_29[] =
60,9,167,156,184,49,164,154,223,25,2,227,183,193,73,245,49,24,79,213,175,147,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,128,166,192,129,64,
129,255,7,47,12,150,8,60,209,161,194,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconVisualStudio_png = (const char*) temp_binary_data_29;
const char* projectIconVisualStudio_png = (const char*) temp_binary_data_30;
//================== projectIconXcode.png ==================
static const unsigned char temp_binary_data_30[] =
static const unsigned char temp_binary_data_31[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60,0,0,3,40,105,84,88,116,88,77,76,58,
99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,99,122,107,99,57,100,34,63,62,32,60,120,
58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,32,67,111,114,101,32,53,46,54,45,99,48,49,52,32,55,57,46,49,53,54,
@@ -3261,10 +3303,10 @@ static const unsigned char temp_binary_data_30[] =
94,156,0,232,23,120,134,102,179,249,235,17,128,9,19,38,192,59,223,249,206,152,182,172,169,75,67,169,119,178,110,237,223,246,242,196,143,188,48,28,50,88,157,63,127,254,175,124,82,161,71,186,231,200,203,63,99,234,231,229,216,252,127,248,207,255,19,96,0,
221,83,18,25,240,8,112,38,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconXcode_png = (const char*) temp_binary_data_30;
const char* projectIconXcode_png = (const char*) temp_binary_data_31;
//================== projectIconXcodeIOS.png ==================
static const unsigned char temp_binary_data_31[] =
static const unsigned char temp_binary_data_32[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97,203,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60,0,0,3,134,105,84,88,116,88,77,76,
58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101,103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84,99,122,107,99,57,100,34,63,62,32,60,
120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80,32,67,111,114,101,32,53,46,54,45,99,48,49,52,32,55,57,46,49,53,
@@ -3522,10 +3564,10 @@ static const unsigned char temp_binary_data_31[] =
4,97,9,162,191,203,0,199,198,0,162,157,87,213,105,220,35,12,64,131,146,62,249,201,79,186,117,103,130,86,133,76,84,14,16,185,67,123,223,37,252,241,103,134,146,206,234,228,201,147,143,250,164,172,171,29,174,239,254,252,101,253,188,235,155,255,31,255,249,
255,2,12,0,235,154,52,248,249,240,115,28,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* projectIconXcodeIOS_png = (const char*) temp_binary_data_31;
const char* projectIconXcodeIOS_png = (const char*) temp_binary_data_32;
//================== RecentFilesMenuTemplate.nib ==================
static const unsigned char temp_binary_data_32[] =
static const unsigned char temp_binary_data_33[] =
{ 98,112,108,105,115,116,48,48,212,0,1,0,2,0,3,0,4,0,5,0,6,1,53,1,54,88,36,118,101,114,115,105,111,110,88,36,111,98,106,101,99,116,115,89,36,97,114,99,104,105,118,101,114,84,36,116,111,112,18,0,1,134,160,175,16,74,0,7,0,8,0,31,0,35,0,36,0,42,0,46,0,50,
0,53,0,57,0,74,0,77,0,78,0,86,0,87,0,97,0,112,0,113,0,114,0,119,0,120,0,121,0,124,0,128,0,129,0,132,0,143,0,144,0,145,0,149,0,153,0,162,0,163,0,164,0,169,0,173,0,180,0,181,0,182,0,185,0,192,0,193,0,200,0,201,0,208,0,209,0,216,0,217,0,224,0,225,0,226,
0,229,0,230,0,232,0,249,1,11,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,47,1,50,85,36,110,117,108,108,219,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,
@@ -3562,10 +3604,10 @@ static const unsigned char temp_binary_data_32[] =
7,157,7,159,7,161,7,163,7,165,7,167,7,169,7,171,7,173,7,175,7,177,7,179,7,181,7,190,7,192,7,225,7,227,7,229,7,231,7,233,7,235,7,237,7,239,7,241,7,243,7,245,7,247,7,249,7,251,7,253,7,255,8,2,8,5,8,8,8,11,8,14,8,17,8,20,8,23,8,26,8,29,8,32,8,35,8,38,8,
41,8,44,8,53,8,55,8,56,8,65,8,67,8,68,8,77,8,92,8,97,8,115,8,120,8,134,0,0,0,0,0,0,2,2,0,0,0,0,0,0,1,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,136,0,0 };
const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_32;
const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_33;
//================== wizard_AnimatedApp.svg ==================
static const unsigned char temp_binary_data_33[] =
static const unsigned char temp_binary_data_34[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3612,10 +3654,10 @@ static const unsigned char temp_binary_data_33[] =
"<line opacity=\"0.7\" fill=\"none\" stroke=\"#F29100\" stroke-width=\"1.3469\" stroke-miterlimit=\"10\" x1=\"57.7\" y1=\"48.4\" x2=\"34.2\" y2=\"48.4\"/>\r\n"
"</svg>\r\n";
const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_33;
const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_34;
//================== wizard_AudioApp.svg ==================
static const unsigned char temp_binary_data_34[] =
static const unsigned char temp_binary_data_35[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3689,10 +3731,10 @@ static const unsigned char temp_binary_data_34[] =
"<line fill=\"none\" stroke=\"#F29300\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" x1=\"118.8\" y1=\"43.8\" x2=\"118.8\" y2=\"44.5\"/>\r\n"
"</svg>\r\n";
const char* wizard_AudioApp_svg = (const char*) temp_binary_data_34;
const char* wizard_AudioApp_svg = (const char*) temp_binary_data_35;
//================== wizard_AudioPlugin.svg ==================
static const unsigned char temp_binary_data_35[] =
static const unsigned char temp_binary_data_36[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3803,10 +3845,10 @@ static const unsigned char temp_binary_data_35[] =
"</g>\r\n"
"</svg>\r\n";
const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_35;
const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_36;
//================== wizard_ConsoleApp.svg ==================
static const unsigned char temp_binary_data_36[] =
static const unsigned char temp_binary_data_37[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3829,10 +3871,10 @@ static const unsigned char temp_binary_data_36[] =
"</g>\r\n"
"</svg>\r\n";
const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_36;
const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_37;
//================== wizard_DLL.svg ==================
static const unsigned char temp_binary_data_37[] =
static const unsigned char temp_binary_data_38[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3875,10 +3917,10 @@ static const unsigned char temp_binary_data_37[] =
"\tl-7.7,5.3c-0.7,0.5-1.7,0.3-2.2-0.4L70.1,31\"/>\r\n"
"</svg>\r\n";
const char* wizard_DLL_svg = (const char*) temp_binary_data_37;
const char* wizard_DLL_svg = (const char*) temp_binary_data_38;
//================== wizard_GUI.svg ==================
static const unsigned char temp_binary_data_38[] =
static const unsigned char temp_binary_data_39[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3929,10 +3971,10 @@ static const unsigned char temp_binary_data_38[] =
"\tC0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z\"/>\r\n"
"</svg>\r\n";
const char* wizard_GUI_svg = (const char*) temp_binary_data_38;
const char* wizard_GUI_svg = (const char*) temp_binary_data_39;
//================== wizard_Highlight.svg ==================
static const unsigned char temp_binary_data_39[] =
static const unsigned char temp_binary_data_40[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3942,10 +3984,10 @@ static const unsigned char temp_binary_data_39[] =
"\tV108C136.9,111.8,133.9,114.8,130.1,114.8z\"/>\r\n"
"</svg>\r\n";
const char* wizard_Highlight_svg = (const char*) temp_binary_data_39;
const char* wizard_Highlight_svg = (const char*) temp_binary_data_40;
//================== wizard_Openfile.svg ==================
static const unsigned char temp_binary_data_40[] =
static const unsigned char temp_binary_data_41[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3955,10 +3997,10 @@ static const unsigned char temp_binary_data_40[] =
"\tc0-3.8,3.1-6.9,6.9-6.9h151.5c3.8,0,6.9,3.1,6.9,6.9v20.9C171.6,68.3,168.5,71.4,164.7,71.4z\"/>\r\n"
"</svg>\r\n";
const char* wizard_Openfile_svg = (const char*) temp_binary_data_40;
const char* wizard_Openfile_svg = (const char*) temp_binary_data_41;
//================== wizard_OpenGL.svg ==================
static const unsigned char temp_binary_data_41[] =
static const unsigned char temp_binary_data_42[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -3986,10 +4028,10 @@ static const unsigned char temp_binary_data_41[] =
"\ts-13.4-19.6-6.9-30\"/>\r\n"
"</svg>\r\n";
const char* wizard_OpenGL_svg = (const char*) temp_binary_data_41;
const char* wizard_OpenGL_svg = (const char*) temp_binary_data_42;
//================== wizard_StaticLibrary.svg ==================
static const unsigned char temp_binary_data_42[] =
static const unsigned char temp_binary_data_43[] =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n"
@@ -4032,7 +4074,7 @@ static const unsigned char temp_binary_data_42[] =
"\tc-1,0-1.8-0.8-1.8-1.8V20.8\"/>\r\n"
"</svg>\r\n";
const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_42;
const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_43;
const char* getNamedResource (const char*, int&) throw();
@@ -4067,6 +4109,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
case 0x36e634a1: numBytes = 1626; return jucer_NewInlineComponentTemplate_h;
case 0x7fbac252: numBytes = 1827; return jucer_OpenGLComponentTemplate_cpp;
case 0x44be9398: numBytes = 2745; return AudioPluginXCodeScript_txt;
case 0x406db5c1: numBytes = 3117; return background_logo_svg;
case 0x4a0cfd09: numBytes = 151; return background_tile_png;
case 0x763d39dc: numBytes = 1050; return colourscheme_dark_xml;
case 0xe8b08520: numBytes = 1050; return colourscheme_light_xml;
@@ -4119,6 +4162,7 @@ const char* namedResourceList[] =
"jucer_NewInlineComponentTemplate_h",
"jucer_OpenGLComponentTemplate_cpp",
"AudioPluginXCodeScript_txt",
"background_logo_svg",
"background_tile_png",
"colourscheme_dark_xml",
"colourscheme_light_xml",


+ 4
- 1
extras/Introjucer/JuceLibraryCode/BinaryData.h View File

@@ -75,6 +75,9 @@ namespace BinaryData
extern const char* AudioPluginXCodeScript_txt;
const int AudioPluginXCodeScript_txtSize = 2745;
extern const char* background_logo_svg;
const int background_logo_svgSize = 3117;
extern const char* background_tile_png;
const int background_tile_pngSize = 151;
@@ -142,7 +145,7 @@ namespace BinaryData
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 43;
const int namedResourceListSize = 44;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).


+ 1
- 0
extras/Introjucer/Source/Application/jucer_CommandIDs.h View File

@@ -40,6 +40,7 @@ namespace CommandIDs
saveAll = 0x200080,
openInIDE = 0x200072,
saveAndOpenInIDE = 0x200073,
createNewExporter = 0x20007d,
showUTF8Tool = 0x200076,
showGlobalPreferences = 0x200077,


+ 37
- 0
extras/Introjucer/Source/BinaryData/background_logo.svg View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 451.7 451.7" enable-background="new 0 0 451.7 451.7" xml:space="preserve">
<g>
<g>
<path fill="#808285" d="M111.8,421.9c-8.7,0-15.6-3.2-21.8-11.3l8.5-7.3c4.2,5.5,8.2,7.6,13.3,7.6c9.2,0,15.5-6.9,15.5-17.5v-51.8
h11.7v51.8C138.9,410.4,127.7,421.9,111.8,421.9z"/>
<path fill="#808285" d="M185.7,421.9c-17,0-31.6-12.5-31.6-33.1v-47.2h11.7v46.6c0,13.8,8.2,22.8,19.9,22.8c11.7,0,20-8.9,20-22.8
v-46.6h11.7v47.2C217.4,409.4,202.7,421.9,185.7,421.9z"/>
<path fill="#808285" d="M268.9,421.9c-22.6,0-40.9-18.1-40.9-40.6c0-22.6,18.5-40.6,40.9-40.6c10,0,18.8,3.5,25.7,9.2l-6.9,8.6
c-7.1-5-12-6.8-18.7-6.8c-16.2,0-29.1,13-29.1,29.7c0,16.7,12.9,29.7,29.1,29.7c6.4,0,11.8-2,18.6-6.7l7,8.7
C285.9,419.6,278.1,421.9,268.9,421.9z"/>
<path fill="#808285" d="M307.5,420.9v-79.3h47.8v10.5h-36.1v23.5h34.7V386h-34.7v24.4h36.1v10.5H307.5z"/>
</g>
</g>
<g>
<path fill="#808285" d="M222.6,313.3c-78.2,0-141.7-63.6-141.7-141.7S144.5,29.8,222.6,29.8s141.7,63.6,141.7,141.7
S300.8,313.3,222.6,313.3z M222.6,39.3c-72.9,0-132.3,59.3-132.3,132.3s59.3,132.3,132.3,132.3s132.3-59.3,132.3-132.3
S295.6,39.3,222.6,39.3z"/>
<path fill="#414042" d="M334.5,166.8c2.4,0,4.8-0.9,6.5-2.6c1.9-1.9,2.7-4.4,2.4-7c-2.6-22.2-11.4-43.3-25.3-60.9
c-1.7-2.2-4.1-3.3-6.6-3.3c-2.3,0-4.5,1-6.2,2.7L236.9,164c-1.1,1.1-0.3,2.9,1.2,2.9L334.5,166.8z"/>
<path fill="#58595B" d="M311.5,250.2L311.5,250.2c2.6,0,4.9-1.2,6.6-3.3c13.9-17.6,22.6-38.7,25.3-60.9c0.3-2.6-0.6-5.1-2.4-7
c-1.7-1.7-4.1-2.6-6.5-2.6l-96.4,0c-1.5,0-2.2,1.8-1.2,2.9l68.4,68.4C307,249.2,309.2,250.2,311.5,250.2z"/>
<path fill="#6D6E71" d="M229.9,290L229.9,290c1.8,1.8,4.3,2.7,7.1,2.3c22.3-2.6,43.4-11.3,60.9-25.2c2.1-1.6,3.2-4,3.3-6.7
c0-2.4-1-4.7-2.8-6.4l-68.1-68.1c-1.1-1.1-2.9-0.3-2.9,1.2l0,96.7C227.4,286.1,228.2,288.4,229.9,290z"/>
<path fill="#A7A9AC" d="M133.8,92.9c-2.6,0-4.9,1.2-6.6,3.3c-13.9,17.6-22.6,38.7-25.3,60.9c-0.3,2.6,0.6,5.1,2.4,7
c1.7,1.7,4.1,2.6,6.5,2.6l96.4,0c1.5,0,2.2-1.8,1.2-2.9L140,95.6C138.3,93.9,136.1,92.9,133.8,92.9z"/>
<path fill="#BCBEC0" d="M215.4,53.1c-1.8-1.8-4.3-2.7-7.1-2.3C186.1,53.4,165,62.1,147.4,76c-2.1,1.6-3.2,4-3.3,6.7
c0,2.4,1,4.7,2.8,6.4l68.1,68.1c1.1,1.1,2.9,0.3,2.9-1.2l0-96.7C217.9,57,217,54.8,215.4,53.1z"/>
<path fill="#D1D3D4" d="M301.3,82.7c0-2.6-1.2-4.9-3.3-6.6c-17.6-13.9-38.7-22.6-60.9-25.3c-2.6-0.3-5.1,0.6-7,2.4
c-1.7,1.7-2.6,4.1-2.6,6.5l0,96.4c0,1.5,1.8,2.2,2.9,1.2l68.4-68.4C300.3,87.2,301.3,85,301.3,82.7z"/>
<path fill="#939598" d="M207.2,176.3l-96.4,0c-2.4,0-4.8,0.9-6.5,2.6c-1.9,1.9-2.7,4.4-2.4,7c2.6,22.2,11.4,43.3,25.3,60.9
c1.7,2.2,4.1,3.3,6.6,3.3c2.3,0,4.5-1,6.2-2.7c0,0,0,0,0,0l68.4-68.4C209.4,178.1,208.7,176.3,207.2,176.3z"/>
<path fill="#808285" d="M215.1,185.8L146.9,254c-1.7,1.7-2.8,4-2.8,6.4c0,2.7,1.2,5.1,3.3,6.7c17.6,13.9,38.6,22.6,60.9,25.2
c2.7,0.3,5.2-0.5,7.1-2.3c1.6-1.6,2.5-3.8,2.5-6.3c0,0,0,0,0,0l0-96.7C217.9,185.5,216.1,184.8,215.1,185.8z"/>
</g>
</svg>

+ 221
- 189
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h View File

@@ -22,30 +22,12 @@
==============================================================================
*/
class AndroidProjectExporter : public ProjectExporter
class AndroidProjectExporterBase : public ProjectExporter
{
public:
//==============================================================================
static const char* getNameAndroid() { return "Android Project"; }
static const char* getValueTreeTypeName() { return "ANDROID"; }
static AndroidProjectExporter* createForSettings (Project& project, const ValueTree& settings)
{
if (settings.hasType (getValueTreeTypeName()))
return new AndroidProjectExporter (project, settings);
return nullptr;
}
//==============================================================================
AndroidProjectExporter (Project& p, const ValueTree& t)
AndroidProjectExporterBase (Project& p, const ValueTree& t)
: ProjectExporter (p, t)
{
name = getNameAndroid();
if (getTargetLocationString().isEmpty())
getTargetLocationValue() = getDefaultBuildsRootFolder() + "Android";
if (getVersionCodeString().isEmpty())
getVersionCodeValue() = 1;
@@ -67,13 +49,21 @@ public:
initialiseDependencyPathValues();
}
//==============================================================================
bool canLaunchProject() override { return false; }
bool launchProject() override { return false; }
bool isAndroid() const override { return true; }
bool usesMMFiles() const override { return false; }
bool canCopeWithDuplicateFiles() override { return false; }
void create (const OwnedArray<LibraryModule>& modules) const override
{
const String package (getActivityClassPackage());
const String path (package.replaceCharacter ('.', File::separator));
const File target (getTargetFolder().getChildFile ("src").getChildFile (path));
copyActivityJavaFiles (modules, target, package);
}
void createExporterProperties (PropertyListBuilder& props) override
{
props.add (new TextPropertyComponent (getActivityClassPathValue(), "Android Activity class name", 256, false),
@@ -172,6 +162,7 @@ public:
Value getCPP11EnabledValue() { return getSetting (Ids::androidCpp11); }
bool isCPP11Enabled() const { return settings [Ids::androidCpp11]; }
//==============================================================================
String createDefaultClassName() const
{
String s (project.getBundleIdentifier().toString().toLowerCase());
@@ -192,84 +183,168 @@ public:
return s + CodeHelpers::makeValidIdentifier (project.getProjectFilenameRoot(), false, true, false);
}
//==============================================================================
void create (const OwnedArray<LibraryModule>& modules) const override
void initialiseDependencyPathValues()
{
const File target (getTargetFolder());
const File jniFolder (target.getChildFile ("jni"));
sdkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidSDKPath),
Ids::androidSDKPath, TargetOS::getThisOS())));
copyActivityJavaFiles (modules);
createDirectoryOrThrow (jniFolder);
createDirectoryOrThrow (target.getChildFile ("res").getChildFile ("values"));
createDirectoryOrThrow (target.getChildFile ("libs"));
createDirectoryOrThrow (target.getChildFile ("bin"));
ndkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidNDKPath),
Ids::androidNDKPath, TargetOS::getThisOS())));
}
void copyActivityJavaFiles (const OwnedArray<LibraryModule>& modules, const File& targetFolder, const String& package) const
{
const String className (getActivityName());
if (className.isEmpty())
throw SaveError ("Invalid Android Activity class name: " + getActivityClassPath());
createDirectoryOrThrow (targetFolder);
LibraryModule* const coreModule = getCoreModule (modules);
if (coreModule != nullptr)
{
ScopedPointer<XmlElement> manifest (createManifestXML());
writeXmlOrThrow (*manifest, target.getChildFile ("AndroidManifest.xml"), "utf-8", 100, true);
File javaDestFile (targetFolder.getChildFile (className + ".java"));
File javaSourceFile (coreModule->getFolder().getChildFile ("native")
.getChildFile ("java")
.getChildFile ("JuceAppActivity.java"));
MemoryOutputStream newFile;
newFile << javaSourceFile.loadFileAsString()
.replace ("JuceAppActivity", className)
.replace ("package com.juce;", "package " + package + ";");
overwriteFileIfDifferentOrThrow (javaDestFile, newFile);
}
}
writeApplicationMk (jniFolder.getChildFile ("Application.mk"));
writeAndroidMk (jniFolder.getChildFile ("Android.mk"));
String getAppPlatform() const
{
int ndkVersion = getMinimumSDKVersionString().getIntValue();
if (ndkVersion == 9)
ndkVersion = 10; // (doesn't seem to be a version '9')
return "android-" + String (ndkVersion);
}
String getActivityName() const
{
return getActivityClassPath().fromLastOccurrenceOf (".", false, false);
}
String getActivitySubClassName() const
{
String activityPath = getActivitySubClassPath();
return (activityPath.isEmpty()) ? getActivityName() : activityPath.fromLastOccurrenceOf (".", false, false);
}
String getActivityClassPackage() const
{
return getActivityClassPath().upToLastOccurrenceOf (".", false, false);
}
String getJNIActivityClassName() const
{
return getActivityClassPath().replaceCharacter ('.', '/');
}
static LibraryModule* getCoreModule (const OwnedArray<LibraryModule>& modules)
{
for (int i = modules.size(); --i >= 0;)
if (modules.getUnchecked(i)->getID() == "juce_core")
return modules.getUnchecked(i);
return nullptr;
}
String getCppFlags() const
{
String flags ("-fsigned-char -fexceptions -frtti");
if (! getNDKToolchainVersionString().startsWithIgnoreCase ("clang"))
flags << " -Wno-psabi";
return flags;
}
StringArray getPermissionsRequired() const
{
StringArray s;
s.addTokens (getOtherPermissions(), ", ", "");
if (getInternetNeeded()) s.add ("android.permission.INTERNET");
if (getAudioRecordNeeded()) s.add ("android.permission.RECORD_AUDIO");
return getCleanedStringArray (s);
}
template <typename PredicateT>
void findAllProjectItemsWithPredicate (const Project::Item& projectItem, Array<RelativePath>& results, const PredicateT& predicate) const
{
if (projectItem.isGroup())
{
ScopedPointer<XmlElement> antBuildXml (createAntBuildXML());
writeXmlOrThrow (*antBuildXml, target.getChildFile ("build.xml"), "UTF-8", 100);
for (int i = 0; i < projectItem.getNumChildren(); ++i)
findAllProjectItemsWithPredicate (projectItem.getChild(i), results, predicate);
}
else
{
if (predicate (projectItem))
results.add (RelativePath (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder));
}
}
writeProjectPropertiesFile (target.getChildFile ("project.properties"));
writeLocalPropertiesFile (target.getChildFile ("local.properties"));
writeStringsFile (target.getChildFile ("res/values/strings.xml"));
void writeIcon (const File& file, const Image& im) const
{
if (im.isValid())
{
createDirectoryOrThrow (file.getParentDirectory());
PNGImageFormat png;
MemoryOutputStream mo;
if (! png.writeImageToStream (im, mo))
throw SaveError ("Can't generate Android icon file");
overwriteFileIfDifferentOrThrow (file, mo);
}
}
void writeIcons (const File& folder) const
{
ScopedPointer<Drawable> bigIcon (getBigIcon());
ScopedPointer<Drawable> smallIcon (getSmallIcon());
if (bigIcon != nullptr && smallIcon != nullptr)
{
const int step = jmax (bigIcon->getWidth(), bigIcon->getHeight()) / 8;
writeIcon (target.getChildFile ("res/drawable-xhdpi/icon.png"), getBestIconForSize (step * 8, false));
writeIcon (target.getChildFile ("res/drawable-hdpi/icon.png"), getBestIconForSize (step * 6, false));
writeIcon (target.getChildFile ("res/drawable-mdpi/icon.png"), getBestIconForSize (step * 4, false));
writeIcon (target.getChildFile ("res/drawable-ldpi/icon.png"), getBestIconForSize (step * 3, false));
writeIcon (folder.getChildFile ("drawable-xhdpi/icon.png"), getBestIconForSize (step * 8, false));
writeIcon (folder.getChildFile ("drawable-hdpi/icon.png"), getBestIconForSize (step * 6, false));
writeIcon (folder.getChildFile ("drawable-mdpi/icon.png"), getBestIconForSize (step * 4, false));
writeIcon (folder.getChildFile ("drawable-ldpi/icon.png"), getBestIconForSize (step * 3, false));
}
else if (Drawable* icon = bigIcon != nullptr ? bigIcon : smallIcon)
{
writeIcon (target.getChildFile ("res/drawable-mdpi/icon.png"), rescaleImageForIcon (*icon, icon->getWidth()));
writeIcon (folder.getChildFile ("drawable-mdpi/icon.png"), rescaleImageForIcon (*icon, icon->getWidth()));
}
}
protected:
//==============================================================================
class AndroidBuildConfiguration : public BuildConfiguration
template <typename BuildConfigType>
String getABIs (bool forDebug) const
{
public:
AndroidBuildConfiguration (Project& p, const ValueTree& settings)
: BuildConfiguration (p, settings)
{
if (getArchitectures().isEmpty())
getArchitecturesValue() = "armeabi armeabi-v7a";
}
Value getArchitecturesValue() { return getValue (Ids::androidArchitectures); }
String getArchitectures() const { return config [Ids::androidArchitectures]; }
var getDefaultOptimisationLevel() const override { return var ((int) (isDebug() ? gccO0 : gccO3)); }
void createConfigProperties (PropertyListBuilder& props) override
for (ConstConfigIterator config (*this); config.next();)
{
addGCCOptimisationProperty (props);
const BuildConfigType& androidConfig = dynamic_cast<const BuildConfigType&> (*config);
props.add (new TextPropertyComponent (getArchitecturesValue(), "Architectures", 256, false),
"A list of the ARM architectures to build (for a fat binary).");
if (config->isDebug() == forDebug)
return androidConfig.getArchitectures();
}
};
BuildConfiguration::Ptr createBuildConfig (const ValueTree& v) const override
{
return new AndroidBuildConfiguration (project, v);
return String();
}
private:
//==============================================================================
XmlElement* createManifestXML() const
{
@@ -334,119 +409,109 @@ private:
return manifest;
}
StringArray getPermissionsRequired() const
{
StringArray s;
s.addTokens (getOtherPermissions(), ", ", "");
if (getInternetNeeded()) s.add ("android.permission.INTERNET");
if (getAudioRecordNeeded()) s.add ("android.permission.RECORD_AUDIO");
//==============================================================================
Value sdkPath, ndkPath;
return getCleanedStringArray (s);
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidProjectExporterBase)
};
//==============================================================================
void findAllFilesToCompile (const Project::Item& projectItem, Array<RelativePath>& results) const
{
if (projectItem.isGroup())
{
for (int i = 0; i < projectItem.getNumChildren(); ++i)
findAllFilesToCompile (projectItem.getChild(i), results);
}
else
{
if (projectItem.shouldBeCompiled())
results.add (RelativePath (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder));
}
}
//==============================================================================
//==============================================================================
class AndroidAntProjectExporter : public AndroidProjectExporterBase
{
public:
//==============================================================================
String getActivityName() const
{
return getActivityClassPath().fromLastOccurrenceOf (".", false, false);
}
static const char* getName() { return "Android Project"; }
static const char* getValueTreeTypeName() { return "ANDROID"; }
String getActivitySubClassName() const
static AndroidAntProjectExporter* createForSettings (Project& project, const ValueTree& settings)
{
String activityPath = getActivitySubClassPath();
if (settings.hasType (getValueTreeTypeName()))
return new AndroidAntProjectExporter (project, settings);
return (activityPath.isEmpty()) ? getActivityName() : activityPath.fromLastOccurrenceOf (".", false, false);
return nullptr;
}
String getActivityClassPackage() const
//==============================================================================
AndroidAntProjectExporter (Project& p, const ValueTree& t)
: AndroidProjectExporterBase (p, t)
{
return getActivityClassPath().upToLastOccurrenceOf (".", false, false);
}
name = getName();
String getJNIActivityClassName() const
{
return getActivityClassPath().replaceCharacter ('.', '/');
if (getTargetLocationString().isEmpty())
getTargetLocationValue() = getDefaultBuildsRootFolder() + "Android";
}
static LibraryModule* getCoreModule (const OwnedArray<LibraryModule>& modules)
//==============================================================================
void createExporterProperties (PropertyListBuilder& props) override
{
for (int i = modules.size(); --i >= 0;)
if (modules.getUnchecked(i)->getID() == "juce_core")
return modules.getUnchecked(i);
return nullptr;
AndroidProjectExporterBase::createExporterProperties (props);
}
void copyActivityJavaFiles (const OwnedArray<LibraryModule>& modules) const
void create (const OwnedArray<LibraryModule>& modules) const override
{
const String className (getActivityName());
const String package (getActivityClassPackage());
String path (package.replaceCharacter ('.', File::separator));
if (path.isEmpty() || className.isEmpty())
throw SaveError ("Invalid Android Activity class name: " + getActivityClassPath());
AndroidProjectExporterBase::create (modules);
const File classFolder (getTargetFolder().getChildFile ("src")
.getChildFile (path));
createDirectoryOrThrow (classFolder);
const File target (getTargetFolder());
const File jniFolder (target.getChildFile ("jni"));
LibraryModule* const coreModule = getCoreModule (modules);
createDirectoryOrThrow (jniFolder);
createDirectoryOrThrow (target.getChildFile ("res").getChildFile ("values"));
createDirectoryOrThrow (target.getChildFile ("libs"));
createDirectoryOrThrow (target.getChildFile ("bin"));
if (coreModule != nullptr)
{
File javaDestFile (classFolder.getChildFile (className + ".java"));
File javaSourceFile (coreModule->getFolder().getChildFile ("native")
.getChildFile ("java")
.getChildFile ("JuceAppActivity.java"));
ScopedPointer<XmlElement> manifest (createManifestXML());
writeXmlOrThrow (*manifest, target.getChildFile ("AndroidManifest.xml"), "utf-8", 100, true);
}
MemoryOutputStream newFile;
newFile << javaSourceFile.loadFileAsString()
.replace ("JuceAppActivity", className)
.replace ("package com.juce;", "package " + package + ";");
writeApplicationMk (jniFolder.getChildFile ("Application.mk"));
writeAndroidMk (jniFolder.getChildFile ("Android.mk"));
overwriteFileIfDifferentOrThrow (javaDestFile, newFile);
{
ScopedPointer<XmlElement> antBuildXml (createAntBuildXML());
writeXmlOrThrow (*antBuildXml, target.getChildFile ("build.xml"), "UTF-8", 100);
}
writeProjectPropertiesFile (target.getChildFile ("project.properties"));
writeLocalPropertiesFile (target.getChildFile ("local.properties"));
writeStringsFile (target.getChildFile ("res/values/strings.xml"));
writeIcons (target.getChildFile ("res"));
}
String getABIs (bool forDebug) const
//==============================================================================
class AndroidBuildConfiguration : public BuildConfiguration
{
for (ConstConfigIterator config (*this); config.next();)
public:
AndroidBuildConfiguration (Project& p, const ValueTree& settings)
: BuildConfiguration (p, settings)
{
const AndroidBuildConfiguration& androidConfig = dynamic_cast<const AndroidBuildConfiguration&> (*config);
if (config->isDebug() == forDebug)
return androidConfig.getArchitectures();
if (getArchitectures().isEmpty())
getArchitecturesValue() = "armeabi armeabi-v7a";
}
return String();
}
Value getArchitecturesValue() { return getValue (Ids::androidArchitectures); }
String getArchitectures() const { return config [Ids::androidArchitectures]; }
String getCppFlags() const
{
String flags ("-fsigned-char -fexceptions -frtti");
var getDefaultOptimisationLevel() const override { return var ((int) (isDebug() ? gccO0 : gccO3)); }
if (! getNDKToolchainVersionString().startsWithIgnoreCase ("clang"))
flags << " -Wno-psabi";
void createConfigProperties (PropertyListBuilder& props) override
{
addGCCOptimisationProperty (props);
return flags;
props.add (new TextPropertyComponent (getArchitecturesValue(), "Architectures", 256, false),
"A list of the ARM architectures to build (for a fat binary).");
}
};
BuildConfiguration::Ptr createBuildConfig (const ValueTree& v) const override
{
return new AndroidBuildConfiguration (project, v);
}
private:
//==============================================================================
String getToolchainVersion() const
{
String v (getNDKToolchainVersionString());
@@ -466,9 +531,9 @@ private:
<< "NDK_TOOLCHAIN_VERSION := " << getToolchainVersion() << newLine
<< newLine
<< "ifeq ($(NDK_DEBUG),1)" << newLine
<< " APP_ABI := " << getABIs (true) << newLine
<< " APP_ABI := " << getABIs<AndroidBuildConfiguration> (true) << newLine
<< "else" << newLine
<< " APP_ABI := " << getABIs (false) << newLine
<< " APP_ABI := " << getABIs<AndroidBuildConfiguration> (false) << newLine
<< "endif" << newLine;
overwriteFileIfDifferentOrThrow (file, mo);
@@ -478,8 +543,13 @@ private:
{
Array<RelativePath> files;
struct Predicate
{
bool operator() (const Project::Item& projectItem) const { return projectItem.shouldBeAddedToTargetProject(); }
};
for (int i = 0; i < getAllGroups().size(); ++i)
findAllFilesToCompile (getAllGroups().getReference(i), files);
findAllProjectItemsWithPredicate (getAllGroups().getReference(i), files, Predicate());
MemoryOutputStream mo;
writeAndroidMk (mo, files);
@@ -687,15 +757,6 @@ private:
equals->setAttribute ("arg2", "debug");
}
String getAppPlatform() const
{
int ndkVersion = getMinimumSDKVersionString().getIntValue();
if (ndkVersion == 9)
ndkVersion = 10; // (doesn't seem to be a version '9')
return "android-" + String (ndkVersion);
}
void writeProjectPropertiesFile (const File& file) const
{
MemoryOutputStream mo;
@@ -725,22 +786,6 @@ private:
overwriteFileIfDifferentOrThrow (file, mo);
}
void writeIcon (const File& file, const Image& im) const
{
if (im.isValid())
{
createDirectoryOrThrow (file.getParentDirectory());
PNGImageFormat png;
MemoryOutputStream mo;
if (! png.writeImageToStream (im, mo))
throw SaveError ("Can't generate Android icon file");
overwriteFileIfDifferentOrThrow (file, mo);
}
}
void writeStringsFile (const File& file) const
{
XmlElement strings ("resources");
@@ -751,19 +796,6 @@ private:
writeXmlOrThrow (strings, file, "utf-8", 100);
}
void initialiseDependencyPathValues()
{
sdkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidSDKPath),
Ids::androidSDKPath,
TargetOS::getThisOS())));
ndkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidNDKPath),
Ids::androidNDKPath,
TargetOS::getThisOS())));
}
//==============================================================================
Value sdkPath, ndkPath;
JUCE_DECLARE_NON_COPYABLE (AndroidProjectExporter)
JUCE_DECLARE_NON_COPYABLE (AndroidAntProjectExporter)
};

+ 616
- 0
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_AndroidStudio.h View File

@@ -0,0 +1,616 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2015 - ROLI Ltd.
Permission is granted to use this software under the terms of either:
a) the GPL v2 (or any later version)
b) the Affero GPL v3
Details of these licenses can be found at: www.gnu.org/licenses
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.juce.com for more information.
==============================================================================
*/
class AndroidStudioProjectExporter : public AndroidProjectExporterBase
{
public:
//==============================================================================
static const char* getName() { return "Android Studio"; }
static const char* getValueTreeTypeName() { return "ANDROIDSTUDIO"; }
static AndroidStudioProjectExporter* createForSettings (Project& project, const ValueTree& settings)
{
if (settings.hasType (getValueTreeTypeName()))
return new AndroidStudioProjectExporter (project, settings);
return nullptr;
}
//==============================================================================
AndroidStudioProjectExporter (Project& p, const ValueTree& t)
: AndroidProjectExporterBase (p, t),
androidStudioExecutable (findAndroidStudioExecutable())
{
name = getName();
if (getTargetLocationString().isEmpty())
getTargetLocationValue() = getDefaultBuildsRootFolder() + "AndroidStudio";
}
//==============================================================================
bool canLaunchProject() override
{
return androidStudioExecutable.exists();
}
bool launchProject() override
{
if (! androidStudioExecutable.exists())
{
jassertfalse;
return false;
}
const File targetFolder (getTargetFolder());
return androidStudioExecutable.startAsProcess (targetFolder.getFullPathName());
}
void createExporterProperties (PropertyListBuilder& props) override
{
AndroidProjectExporterBase::createExporterProperties (props);
}
void create (const OwnedArray<LibraryModule>& modules) const override
{
const File targetFolder (getTargetFolder());
targetFolder.deleteRecursively();
{
const String package (getActivityClassPackage());
const String path (package.replaceCharacter ('.', File::separator));
const File javaTarget (targetFolder.getChildFile ("app/src/main/java").getChildFile (path));
copyActivityJavaFiles (modules, javaTarget, package);
}
writeSettingsDotGradle (targetFolder);
writeLocalDotProperties (targetFolder);
writeBuildDotGradleRoot (targetFolder);
writeBuildDotGradleApp (targetFolder);
writeGradleWrapperProperties (targetFolder);
writeAndroidManifest (targetFolder);
writeStringsXML (targetFolder);
writeAppIcons (targetFolder);
createSourceSymlinks (targetFolder);
}
static File findAndroidStudioExecutable()
{
#if JUCE_WINDOWS
const File defaultInstallation ("C:\\Program Files\\Android\\Android Studio\\bin");
if (defaultInstallation.exists())
{
{
const File studio64 = defaultInstallation.getChildFile ("studio64.exe");
if (studio64.existsAsFile())
return studio64;
}
{
const File studio = defaultInstallation.getChildFile ("studio.exe");
if (studio.existsAsFile())
return studio;
}
}
#elif JUCE_MAC
const File defaultInstallation ("/Applications/Android Studio.app");
if (defaultInstallation.exists())
return defaultInstallation;
#endif
return File::nonexistent;
}
protected:
//==============================================================================
class AndroidStudioBuildConfiguration : public BuildConfiguration
{
public:
AndroidStudioBuildConfiguration (Project& p, const ValueTree& settings)
: BuildConfiguration (p, settings)
{
if (getArchitectures().isEmpty())
getArchitecturesValue() = "armeabi armeabi-v7a";
}
Value getArchitecturesValue() { return getValue (Ids::androidArchitectures); }
String getArchitectures() const { return config [Ids::androidArchitectures]; }
var getDefaultOptimisationLevel() const override { return var ((int) (isDebug() ? gccO0 : gccO3)); }
void createConfigProperties (PropertyListBuilder& props) override
{
addGCCOptimisationProperty (props);
props.add (new TextPropertyComponent (getArchitecturesValue(), "Architectures", 256, false),
"A list of the ARM architectures to build (for a fat binary).");
}
};
BuildConfiguration::Ptr createBuildConfig (const ValueTree& v) const override
{
return new AndroidStudioBuildConfiguration (project, v);
}
private:
static void createSymboicLinkAndCreateParentFolders (const File& originalFile, const File& linkFile)
{
{
const File linkFileParentDirectory (linkFile.getParentDirectory());
// this will recursively creative the parent directories for the file
// without this, the symlink would fail because it doesn't automatically create
// the folders if they don't exist
if (! linkFileParentDirectory.createDirectory())
throw SaveError (String ("Could not create directory ") + linkFileParentDirectory.getFullPathName());
}
if (! originalFile.createSymbolicLink (linkFile, true))
throw SaveError (String ("Failed to create symlink from ")
+ linkFile.getFullPathName() + " to "
+ originalFile.getFullPathName() + "!");
}
void makeSymlinksForGroup (const Project::Item& group, const File& targetFolder) const
{
if (! group.isGroup())
{
throw SaveError ("makeSymlinksForGroup was called with something other than a group!");
}
for (int i = 0; i < group.getNumChildren(); ++i)
{
const Project::Item& projectItem = group.getChild (i);
if (projectItem.isGroup())
{
makeSymlinksForGroup (projectItem, targetFolder.getChildFile (projectItem.getName()));
}
else if (projectItem.shouldBeAddedToTargetProject()) // must be a file then
{
const File originalFile (projectItem.getFile());
const File targetFile (targetFolder.getChildFile (originalFile.getFileName()));
createSymboicLinkAndCreateParentFolders (originalFile, targetFile);
}
}
}
void createSourceSymlinks (const File& folder) const
{
const File targetFolder (folder.getChildFile ("app/src/main/jni"));
// here we make symlinks to only to files included in the groups inside the project
// this is because Android Studio does not have a concept of groups and just uses
// the file system layout to determine what's to be compiled
{
const Array<Project::Item>& groups = getAllGroups();
for (int i = 0; i < groups.size(); ++i)
{
const Project::Item projectItem (groups.getReference (i));
const String projectItemName (projectItem.getName());
if (projectItem.isGroup())
makeSymlinksForGroup (projectItem, projectItemName == "Juce Modules" ? targetFolder.getChildFile ("JuceModules") : targetFolder);
}
}
}
void writeAppIcons (const File& folder) const
{
writeIcons (folder.getChildFile ("app/src/main/res/"));
}
void writeSettingsDotGradle (const File& folder) const
{
MemoryOutputStream memoryOutputStream;
memoryOutputStream << "include ':app'";
overwriteFileIfDifferentOrThrow (folder.getChildFile ("settings.gradle"), memoryOutputStream);
}
static String sanitisePath (String path)
{
if (path.startsWith ("~"))
{
const String homeFolder (File::getSpecialLocation (File::SpecialLocationType::userHomeDirectory).getFullPathName());
path = path.replaceSection (0, 1, homeFolder);
}
return path.replace ("\\", "\\\\");
}
void writeLocalDotProperties (const File& folder) const
{
MemoryOutputStream memoryOutputStream;
memoryOutputStream << "ndk.dir=" << sanitisePath (getNDKPathString()) << newLine
<< "sdk.dir=" << sanitisePath (getSDKPathString());
overwriteFileIfDifferentOrThrow (folder.getChildFile ("local.properties"), memoryOutputStream);
}
void writeGradleWrapperProperties (const File& folder) const
{
MemoryOutputStream memoryOutputStream;
memoryOutputStream << "distributionUrl=https\\://services.gradle.org/distributions/gradle-2.6-all.zip";
overwriteFileIfDifferentOrThrow (folder.getChildFile ("gradle/wrapper/gradle-wrapper.properties"), memoryOutputStream);
}
void writeBuildDotGradleRoot (const File& folder) const
{
MemoryOutputStream memoryOutputStream;
const String indent = getIndentationString();
// this is needed to make sure the correct version of
// the gradle build tools is available
// otherwise, the user will get an error about
// com.android.tools.something not being available
memoryOutputStream << "buildscript {" << newLine
<< indent << "repositories {" << newLine
<< indent << indent << "jcenter()" << newLine
<< indent << "}" << newLine
<< indent << "dependencies {" << newLine
<< indent << indent << "classpath 'com.android.tools.build:gradle-experimental:0.3.0-alpha7'" << newLine
<< indent << "}" << newLine
<< "}" << newLine
<< newLine
<< "allprojects {" << newLine
<< indent << "repositories {" << newLine
<< indent << indent << "jcenter()" << newLine
<< indent << "}" << newLine
<< "}";
overwriteFileIfDifferentOrThrow (folder.getChildFile ("build.gradle"), memoryOutputStream);
}
void writeStringsXML (const File& folder) const
{
XmlElement strings ("resources");
XmlElement* resourceName = strings.createNewChildElement ("string");
resourceName->setAttribute ("name", "app_name");
resourceName->addTextElement (projectName);
writeXmlOrThrow (strings, folder.getChildFile ("app/src/main/res/values/string.xml"), "utf-8", 100, true);
}
void writeAndroidManifest (const File& folder) const
{
ScopedPointer<XmlElement> manifest (createManifestXML());
writeXmlOrThrow (*manifest, folder.getChildFile ("app/src/main/AndroidManifest.xml"), "utf-8", 100, true);
}
String createModelDotAndroid (const String& indent, const String& minimumSDKVersion, const String& bundleIdentifier) const
{
String result;
result << "android {" << newLine
<< indent << "compileSdkVersion = " << minimumSDKVersion << newLine
<< indent << "buildToolsVersion = \"" << "23.0.1" << "\"" << newLine
<< indent << "defaultConfig.with {" << newLine
<< indent << indent << "applicationId = \"" << bundleIdentifier.toLowerCase() << "\"" << newLine
<< indent << indent << "minSdkVersion.apiLevel = 11" << newLine
<< indent << indent << "targetSdkVersion.apiLevel = " << minimumSDKVersion << newLine
<< indent << "}" << newLine
<< "}" << newLine;
return result;
}
String createModelDotCompileOptions (const String& indent) const
{
String result;
result << "compileOptions.with {" << newLine
<< indent << "sourceCompatibility = JavaVersion.VERSION_1_7" << newLine
<< indent << indent << "targetCompatibility = JavaVersion.VERSION_1_7" << newLine
<< "}" << newLine;
return result;
}
String createModelDotAndroidSources (const String& indent) const
{
String result;
result << "android.sources {" << newLine
<< indent << "main {" << newLine
<< indent << indent << "jni {" << newLine
<< indent << indent << indent << "source {" << newLine
<< indent << indent << indent << indent << "exclude \"**/JuceModules/\"" << newLine
<< indent << indent << indent << "}" << newLine
<< indent << indent << "}" << newLine
<< indent << "}" << newLine
<< "}" << newLine;
return result;
}
StringArray getCPPFlags() const
{
StringArray result;
result.add ("\"-fsigned-char\"");
result.add ("\"-fexceptions\"");
result.add ("\"-frtti\"");
if (isCPP11Enabled())
result.add ("\"-std=gnu++11\"");
// preprocessor definitions
{
StringPairArray preprocessorDefinitions = getAllPreprocessorDefs();
preprocessorDefinitions.set ("JUCE_ANDROID", "1");
preprocessorDefinitions.set ("JUCE_ANDROID_ACTIVITY_CLASSNAME", getJNIActivityClassName().replaceCharacter ('/', '_'));
preprocessorDefinitions.set ("JUCE_ANDROID_ACTIVITY_CLASSPATH", "\\\"" + getActivityClassPath().replaceCharacter('.', '/') + "\\\"");
const StringArray& keys = preprocessorDefinitions.getAllKeys();
for (int i = 0; i < keys.size(); ++i)
result.add (String ("\"-D") + keys[i] + String ("=") + preprocessorDefinitions[keys[i]] + "\"");
}
// include paths
result.add ("\"-I${project.rootDir}/app\".toString()");
result.add ("\"-I${ext.juceRootDir}\".toString()");
result.add ("\"-I${ext.juceModuleDir}\".toString()");
{
Array<RelativePath> cppFiles;
const Array<Project::Item>& groups = getAllGroups();
struct Predicate
{
bool operator() (const Project::Item& projectItem) const { return projectItem.shouldBeAddedToTargetProject(); }
};
for (int i = 0; i < groups.size(); ++i)
findAllProjectItemsWithPredicate (groups.getReference (i), cppFiles, Predicate());
for (int i = 0; i < cppFiles.size(); ++i)
{
const RelativePath absoluteSourceFile (cppFiles.getReference (i).rebased (getTargetFolder(),
project.getProjectFolder(),
RelativePath::projectFolder));
const String absoluteIncludeFolder (sanitisePath (project.getProjectFolder().getFullPathName() + "/"
+ absoluteSourceFile.toUnixStyle().upToLastOccurrenceOf ("/", false, false)));
result.addIfNotAlreadyThere ("\"-I" + absoluteIncludeFolder + "\".toString()");
}
}
return result;
}
StringArray getLDLibs() const
{
StringArray result;
result.add ("android");
result.add ("EGL");
result.add ("GLESv2");
result.add ("log");
result.addArray (StringArray::fromTokens(getExternalLibrariesString(), ";", ""));
return result;
}
String createModelDotAndroidNDK (const String& indent) const
{
String result;
result << "android.ndk {" << newLine
<< indent << "moduleName = \"juce_jni\"" << newLine
<< indent << "stl = \"gnustl_static\"" << newLine
<< indent << "toolchainVersion = 4.9" << newLine
<< indent << "ext {" << newLine
<< indent << indent << "juceRootDir = \"" << "${project.rootDir}/../../../../" << "\".toString()" << newLine
<< indent << indent << "juceModuleDir = \"" << "${juceRootDir}/modules" << "\".toString()" << newLine
<< indent << "}" << newLine;
// CPP flags
{
StringArray cppFlags (getCPPFlags());
for (int i = 0; i < cppFlags.size(); ++i)
result << indent << "cppFlags += " << cppFlags[i] << newLine;
}
// libraries
{
StringArray libraries (getLDLibs());
result << indent << "ldLibs += [";
for (int i = 0; i < libraries.size(); ++i)
{
result << "\"" << libraries[i] << "\"";
if (i + 1 != libraries.size())
result << ", ";
}
result << "]" << newLine;
}
result << "}" << newLine;
return result;
}
String getGradleCPPFlags (const String& indent, const ConstConfigIterator& config) const
{
String result;
StringArray rootFlags;
StringArray ndkFlags;
if (config->isDebug())
{
ndkFlags.add ("debuggable = true");
ndkFlags.add ("cppFlags += \"-g\"");
ndkFlags.add ("cppFlags += \"-DDEBUG=1\"");
ndkFlags.add ("cppFlags += \"-D_DEBUG=1\"");
}
else
{
rootFlags.add ("minifyEnabled = true");
rootFlags.add ("proguardFiles += 'proguard-android-optimize.txt'");
ndkFlags.add ("cppFlags += \"-DNDEBUG=1\"");
}
{
StringArray extraFlags (StringArray::fromTokens (getExtraCompilerFlagsString(), " ", ""));
for (int i = 0; extraFlags.size(); ++i)
ndkFlags.add (String ("cppFlags += \"") + extraFlags[i] + "\"");
}
// there appears to be an issue with build types that have a name other than
// "debug" or "release". Apparently this is hard coded in Android Studio ...
{
const String configName (config->getName());
if (configName != "Debug" && configName != "Release")
throw SaveError ("Build configurations other than Debug and Release are not yet support for Android Studio");
result << configName.toLowerCase() << " {" << newLine;
}
for (int i = 0; i < rootFlags.size(); ++i)
result << indent << rootFlags[i] << newLine;
result << indent << "ndk.with {" << newLine;
for (int i = 0; i < ndkFlags.size(); ++i)
result << indent << indent << ndkFlags[i] << newLine;
result << indent << "}" << newLine
<< "}" << newLine;
return result;
}
String createModelDotAndroidDotBuildTypes (const String& indent) const
{
String result;
result << "android.buildTypes {" << newLine;
for (ConstConfigIterator config (*this); config.next();)
result << CodeHelpers::indent (getGradleCPPFlags (indent, config), indent.length(), true);
result << "}";
return result;
}
String createModelDotAndroidDotProductFlavors (const String& indent) const
{
String result;
result << "android.productFlavors {" << newLine;
// TODO! - this needs to be changed so that it generates seperate flags for debug and release ...
// at present, it just generates all ABIs for all build types
StringArray architectures (StringArray::fromTokens (getABIs<AndroidStudioBuildConfiguration> (true), " ", ""));
architectures.mergeArray (StringArray::fromTokens (getABIs<AndroidStudioBuildConfiguration> (false), " ", ""));
if (architectures.size() == 0)
throw SaveError ("Can't build for no architectures!");
for (int i = 0; i < architectures.size(); ++i)
{
String architecture (architectures[i].trim());
if (architecture.isEmpty())
continue;
result << indent << "create(\"" << architecture << "\") {" << newLine
<< indent << indent << "ndk.abiFilters += \"" << architecture << "\"" << newLine
<< indent << "}" << newLine;
}
result << "}" << newLine;
return result;
}
void writeBuildDotGradleApp (const File& folder) const
{
MemoryOutputStream memoryOutputStream;
const String indent = getIndentationString();
const String minimumSDKVersion = getMinimumSDKVersionString();
const String bundleIdentifier = project.getBundleIdentifier().toString();
memoryOutputStream << "apply plugin: 'com.android.model.application'" << newLine
<< newLine
<< "model {" << newLine
<< CodeHelpers::indent (createModelDotAndroid (indent, minimumSDKVersion, bundleIdentifier), indent.length(), true)
<< newLine
<< CodeHelpers::indent (createModelDotCompileOptions (indent), indent.length(), true)
<< newLine
<< CodeHelpers::indent (createModelDotAndroidSources (indent), indent.length(), true)
<< newLine
<< CodeHelpers::indent (createModelDotAndroidNDK (indent), indent.length(), true)
<< newLine
<< CodeHelpers::indent (createModelDotAndroidDotBuildTypes (indent), indent.length(), true)
<< newLine
<< CodeHelpers::indent (createModelDotAndroidDotProductFlavors (indent), indent.length(), true)
<< "}";
overwriteFileIfDifferentOrThrow (folder.getChildFile ("app/build.gradle"), memoryOutputStream);
}
static const char* getIndentationString() noexcept
{
return " ";
}
const File androidStudioExecutable;
JUCE_DECLARE_NON_COPYABLE (AndroidStudioProjectExporter)
};

+ 28
- 23
extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp View File

@@ -29,6 +29,7 @@
#include "jucer_ProjectExport_MSVC.h"
#include "jucer_ProjectExport_XCode.h"
#include "jucer_ProjectExport_Android.h"
#include "jucer_ProjectExport_AndroidStudio.h"
#include "jucer_ProjectExport_CodeBlocks.h"
//==============================================================================
@@ -52,7 +53,8 @@ Array<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypes()
addType (types, MSVCProjectExporterVC2008::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize);
addType (types, MSVCProjectExporterVC2005::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize);
addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::projectIconLinuxMakefile_png, BinaryData::projectIconLinuxMakefile_pngSize);
addType (types, AndroidProjectExporter::getNameAndroid(), BinaryData::projectIconAndroid_png, BinaryData::projectIconAndroid_pngSize);
addType (types, AndroidStudioProjectExporter::getName(), BinaryData::projectIconAndroid_png, BinaryData::projectIconAndroid_pngSize);
addType (types, AndroidAntProjectExporter::getName(), BinaryData::projectIconAndroid_png, BinaryData::projectIconAndroid_pngSize);
addType (types, CodeBlocksProjectExporter::getNameWindows(), BinaryData::projectIconCodeblocks_png, BinaryData::projectIconCodeblocks_pngSize);
addType (types, CodeBlocksProjectExporter::getNameLinux(), BinaryData::projectIconCodeblocks_png, BinaryData::projectIconCodeblocks_pngSize);
@@ -65,18 +67,19 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int
switch (index)
{
case 0: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (false)), false); break;
case 1: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (true)), true); break;
case 2: exp = new MSVCProjectExporterVC2015 (project, ValueTree (MSVCProjectExporterVC2015::getValueTreeTypeName())); break;
case 3: exp = new MSVCProjectExporterVC2013 (project, ValueTree (MSVCProjectExporterVC2013::getValueTreeTypeName())); break;
case 4: exp = new MSVCProjectExporterVC2012 (project, ValueTree (MSVCProjectExporterVC2012::getValueTreeTypeName())); break;
case 5: exp = new MSVCProjectExporterVC2010 (project, ValueTree (MSVCProjectExporterVC2010::getValueTreeTypeName())); break;
case 6: exp = new MSVCProjectExporterVC2008 (project, ValueTree (MSVCProjectExporterVC2008::getValueTreeTypeName())); break;
case 7: exp = new MSVCProjectExporterVC2005 (project, ValueTree (MSVCProjectExporterVC2005::getValueTreeTypeName())); break;
case 8: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break;
case 9: exp = new AndroidProjectExporter (project, ValueTree (AndroidProjectExporter ::getValueTreeTypeName())); break;
case 10: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksProjectExporter::windowsTarget)), CodeBlocksProjectExporter::windowsTarget); break;
case 11: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksProjectExporter::linuxTarget)), CodeBlocksProjectExporter::linuxTarget); break;
case 0: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (false)), false); break;
case 1: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (true)), true); break;
case 2: exp = new MSVCProjectExporterVC2015 (project, ValueTree (MSVCProjectExporterVC2015 ::getValueTreeTypeName())); break;
case 3: exp = new MSVCProjectExporterVC2013 (project, ValueTree (MSVCProjectExporterVC2013 ::getValueTreeTypeName())); break;
case 4: exp = new MSVCProjectExporterVC2012 (project, ValueTree (MSVCProjectExporterVC2012 ::getValueTreeTypeName())); break;
case 5: exp = new MSVCProjectExporterVC2010 (project, ValueTree (MSVCProjectExporterVC2010 ::getValueTreeTypeName())); break;
case 6: exp = new MSVCProjectExporterVC2008 (project, ValueTree (MSVCProjectExporterVC2008 ::getValueTreeTypeName())); break;
case 7: exp = new MSVCProjectExporterVC2005 (project, ValueTree (MSVCProjectExporterVC2005 ::getValueTreeTypeName())); break;
case 8: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break;
case 9: exp = new AndroidStudioProjectExporter (project, ValueTree (AndroidStudioProjectExporter ::getValueTreeTypeName())); break;
case 10: exp = new AndroidAntProjectExporter (project, ValueTree (AndroidAntProjectExporter ::getValueTreeTypeName())); break;
case 11: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter ::getValueTreeTypeName (CodeBlocksProjectExporter::windowsTarget)), CodeBlocksProjectExporter::windowsTarget); break;
case 12: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter ::getValueTreeTypeName (CodeBlocksProjectExporter::linuxTarget)), CodeBlocksProjectExporter::linuxTarget); break;
default: jassertfalse; return 0;
}
@@ -117,16 +120,17 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const Str
ProjectExporter* ProjectExporter::createExporter (Project& project, const ValueTree& settings)
{
ProjectExporter* exp = MSVCProjectExporterVC2005::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2008::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2010::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2012::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2013::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2015::createForSettings (project, settings);
if (exp == nullptr) exp = XCodeProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = MakefileProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = AndroidProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = CodeBlocksProjectExporter::createForSettings (project, settings);
ProjectExporter* exp = MSVCProjectExporterVC2005 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2008 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2010 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2012 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2013 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2015 ::createForSettings (project, settings);
if (exp == nullptr) exp = XCodeProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = MakefileProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = AndroidStudioProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = AndroidAntProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = CodeBlocksProjectExporter ::createForSettings (project, settings);
jassert (exp != nullptr);
return exp;
@@ -152,6 +156,7 @@ bool ProjectExporter::canProjectBeLaunched (Project* project)
// (this doesn't currently launch.. not really sure what it would do on linux)
//MakefileProjectExporter::getValueTreeTypeName(),
#endif
AndroidStudioProjectExporter::getValueTreeTypeName(),
nullptr
};


+ 2
- 0
extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h View File

@@ -44,6 +44,8 @@ public:
String name;
const void* iconData;
int iconDataSize;
Image getIcon() const { return ImageCache::getFromMemory (iconData, iconDataSize); }
};
static StringArray getExporterNames();


+ 3
- 19
extras/Introjucer/Source/Project/jucer_ConfigTree_Base.h View File

@@ -174,6 +174,7 @@ public:
exportersTree.addListener (this);
}
bool isRoot() const override { return true; }
bool isProjectSettings() const override { return true; }
String getRenamingName() const override { return getDisplayName(); }
String getDisplayName() const override { return project.getTitle(); }
@@ -197,25 +198,8 @@ public:
void showPopupMenu() override
{
PopupMenu menu;
const StringArray exporters (ProjectExporter::getExporterNames());
for (int i = 0; i < exporters.size(); ++i)
menu.addItem (i + 1, "Create a new " + exporters[i] + " target");
launchPopupMenu (menu);
}
void handlePopupMenuResult (int resultCode) override
{
if (resultCode > 0)
{
String exporterName (ProjectExporter::getExporterNames() [resultCode - 1]);
if (exporterName.isNotEmpty())
project.addNewExporter (exporterName);
}
if (ProjectContentComponent* pcc = getProjectContentComponent())
pcc->showNewExporterMenu();
}
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override


+ 28
- 3
extras/Introjucer/Source/Project/jucer_ConfigTree_Exporter.h View File

@@ -27,12 +27,12 @@ class ExporterItem : public ConfigTreeItemBase
public:
ExporterItem (Project& p, ProjectExporter* e, int index)
: project (p), exporter (e), configListTree (exporter->getConfigurations()),
exporterIndex (index)
exporterIndex (index), icon (createIcon (exporter->getName()))
{
configListTree.addListener (this);
jassert (exporter != nullptr);
}
int getItemHeight() const override { return 22; }
bool canBeSelected() const override { return true; }
bool mightContainSubItems() override { return exporter->getNumConfigurations() > 0; }
String getUniqueName() const override { return "exporter_" + String (exporterIndex); }
@@ -40,9 +40,18 @@ public:
String getDisplayName() const override { return exporter->getName(); }
void setName (const String&) override {}
bool isMissing() override { return false; }
Icon getIcon() const override { return Icon (getIcons().exporter, getContrastingColour (0.5f)); }
Icon getIcon() const override { return Icon(); }
void showDocument() override { showSettingsPage (new SettingsComp (exporter)); }
void paintIcon (Graphics& g, Rectangle<int> area) override
{
g.setColour (Colours::black);
g.drawImageWithin (icon, area.getX(), area.getY(),
area.getWidth(), area.getHeight(),
RectanglePlacement::centred, false);
}
void deleteItem() override
{
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Exporter",
@@ -122,6 +131,22 @@ private:
ScopedPointer<ProjectExporter> exporter;
ValueTree configListTree;
int exporterIndex;
Image icon;
static Image createIcon (const String& exporterName)
{
Array<ProjectExporter::ExporterTypeInfo> types (ProjectExporter::getExporterTypes());
for (int i = 0; i < types.size(); ++i)
{
const ProjectExporter::ExporterTypeInfo& type = types.getReference (i);
if (type.name == exporterName)
return type.getIcon();
}
return Image();
}
//==============================================================================
class SettingsComp : public Component


+ 1
- 0
extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h View File

@@ -300,6 +300,7 @@ public:
moduleListTree.addListener (this);
}
int getItemHeight() const override { return 22; }
bool isModulesList() const override { return true; }
bool canBeSelected() const override { return true; }
bool mightContainSubItems() override { return true; }


+ 1
- 0
extras/Introjucer/Source/Project/jucer_Project.h View File

@@ -105,6 +105,7 @@ public:
//==============================================================================
File getGeneratedCodeFolder() const { return getFile().getSiblingFile ("JuceLibraryCode"); }
File getSourceFilesFolder() const { return getProjectFolder().getChildFile ("Source"); }
File getLocalModulesFolder() const { return getGeneratedCodeFolder().getChildFile ("modules"); }
File getLocalModuleFolder (const String& moduleID) const { return getLocalModulesFolder().getChildFile (moduleID); }
File getAppIncludeFile() const { return getGeneratedCodeFolder().getChildFile (getJuceSourceHFilename()); }


+ 82
- 22
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp View File

@@ -64,6 +64,11 @@ public:
#if JUCE_MAC || JUCE_WINDOWS
ApplicationCommandManager& commandManager = IntrojucerApp::getCommandManager();
addAndMakeVisible (createExporterButton);
createExporterButton.setCommandToTrigger (&commandManager, CommandIDs::createNewExporter, true);
createExporterButton.setButtonText (commandManager.getNameOfCommand (CommandIDs::createNewExporter));
createExporterButton.setColour (TextButton::buttonColourId, Colours::white.withAlpha (0.5f));
addAndMakeVisible (openProjectButton);
openProjectButton.setCommandToTrigger (&commandManager, CommandIDs::openInIDE, true);
openProjectButton.setButtonText (commandManager.getNameOfCommand (CommandIDs::openInIDE));
@@ -87,20 +92,32 @@ public:
if (openProjectButton.isVisible())
openProjectButton.setBounds (r.removeFromBottom (30).reduced (16, 4));
if (createExporterButton.isVisible())
{
r.removeFromBottom (10);
createExporterButton.setBounds (r.removeFromBottom (30).reduced (16, 4));
}
tree.setBounds (r);
}
static void reselect (TreeViewItem& item)
{
item.setSelected (false, true);
item.setSelected (true, true);
}
void showProjectSettings()
{
if (ConfigTreeItemTypes::ConfigTreeItemBase* root = dynamic_cast<ConfigTreeItemTypes::ConfigTreeItemBase*> (rootItem.get()))
if (root->isProjectSettings())
root->setSelected (true, true);
reselect (*root);
}
void showModules()
{
if (ConfigTreeItemTypes::ConfigTreeItemBase* mods = getModulesItem())
mods->setSelected (true, true);
reselect (*mods);
}
void showModule (const String& moduleID)
@@ -112,11 +129,11 @@ public:
for (int i = mods->getNumSubItems(); --i >= 0;)
if (ConfigTreeItemTypes::ModuleItem* m = dynamic_cast<ConfigTreeItemTypes::ModuleItem*> (mods->getSubItem (i)))
if (m->moduleID == moduleID)
m->setSelected (true, true);
reselect (*m);
}
}
TextButton openProjectButton, saveAndOpenButton;
TextButton createExporterButton, openProjectButton, saveAndOpenButton;
private:
ConfigTreeItemTypes::ConfigTreeItemBase* getModulesItem()
@@ -134,6 +151,12 @@ private:
//==============================================================================
struct LogoComponent : public Component
{
LogoComponent()
{
ScopedPointer<XmlElement> svg (XmlDocument::parse (BinaryData::background_logo_svg));
logo = Drawable::createFromSVG (*svg);
}
void paint (Graphics& g)
{
g.setColour (findColour (mainBackgroundColourId).contrasting (0.3f));
@@ -141,11 +164,10 @@ struct LogoComponent : public Component
Rectangle<int> r (getLocalBounds());
g.setFont (15.0f);
g.drawFittedText (getVersionInfo(), r.removeFromBottom (50), Justification::centred, 3);
g.drawFittedText (getVersionInfo(), r.removeFromBottom (50), Justification::centredBottom, 3);
const Path& logo = getIcons().mainJuceLogo;
g.fillPath (logo, RectanglePlacement (RectanglePlacement::centred)
.getTransformToFit (logo.getBounds(), r.toFloat()));
logo->drawWithin (g, r.withTrimmedBottom (r.getHeight() / 4).toFloat(),
RectanglePlacement (RectanglePlacement::centred), 1.0f);
}
static String getVersionInfo()
@@ -154,6 +176,8 @@ struct LogoComponent : public Component
+ newLine
+ IntrojucerApp::getApp().getVersionDescription();
}
ScopedPointer<Drawable> logo;
};
//==============================================================================
@@ -618,6 +642,42 @@ void ProjectContentComponent::openInIDE (bool saveFirst)
}
}
static void newExporterMenuCallback (int result, ProjectContentComponent* comp)
{
if (comp != nullptr && result > 0)
{
if (Project* p = comp->getProject())
{
String exporterName (ProjectExporter::getExporterNames() [result - 1]);
if (exporterName.isNotEmpty())
p->addNewExporter (exporterName);
}
}
}
void ProjectContentComponent::showNewExporterMenu()
{
if (project != nullptr)
{
PopupMenu menu;
menu.addSectionHeader ("Create a new export target:");
Array<ProjectExporter::ExporterTypeInfo> exporters (ProjectExporter::getExporterTypes());
for (int i = 0; i < exporters.size(); ++i)
{
const ProjectExporter::ExporterTypeInfo& type = exporters.getReference(i);
menu.addItem (i + 1, type.name, true, false, type.getIcon());
}
menu.showMenuAsync (PopupMenu::Options(),
ModalCallbackFunction::forComponent (newExporterMenuCallback, this));
}
}
void ProjectContentComponent::deleteSelectedTreeItems()
{
if (TreePanelBase* const tree = dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()))
@@ -695,6 +755,7 @@ void ProjectContentComponent::getAllCommands (Array <CommandID>& commands)
CommandIDs::closeProject,
CommandIDs::openInIDE,
CommandIDs::saveAndOpenInIDE,
CommandIDs::createNewExporter,
CommandIDs::showFilePanel,
CommandIDs::showConfigPanel,
CommandIDs::showProjectSettings,
@@ -779,32 +840,29 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
break;
case CommandIDs::openInIDE:
#if JUCE_MAC
result.setInfo ("Open in Xcode...",
#elif JUCE_WINDOWS
result.setInfo ("Open in Visual Studio...",
#else
result.setInfo ("Open as a Makefile...",
#endif
result.setInfo ("Open in IDE...",
"Launches the project in an external IDE",
CommandCategories::general, 0);
result.setActive (ProjectExporter::canProjectBeLaunched (project));
break;
case CommandIDs::saveAndOpenInIDE:
#if JUCE_MAC
result.setInfo ("Save Project and Open in Xcode...",
#elif JUCE_WINDOWS
result.setInfo ("Save Project and Open in Visual Studio...",
#else
result.setInfo ("Save Project and Open as a Makefile...",
#endif
result.setInfo ("Save Project and Open in IDE...",
"Saves the project and launches it in an external IDE",
CommandCategories::general, 0);
result.setActive (ProjectExporter::canProjectBeLaunched (project));
result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier | ModifierKeys::shiftModifier, 0));
break;
case CommandIDs::createNewExporter:
result.setInfo ("Create New Exporter...",
"Creates a new exporter for a compiler type",
CommandCategories::general, 0);
result.setActive (project != nullptr);
break;
case CommandIDs::showFilePanel:
result.setInfo ("Show File Panel",
"Shows the tree of files for this project",
@@ -901,6 +959,8 @@ bool ProjectContentComponent::perform (const InvocationInfo& info)
case CommandIDs::openInIDE: openInIDE (false); break;
case CommandIDs::saveAndOpenInIDE: openInIDE (true); break;
case CommandIDs::createNewExporter: showNewExporterMenu(); break;
case CommandIDs::deleteSelectedItem: deleteSelectedTreeItems(); break;
case CommandIDs::showTranslationTool: showTranslationTool(); break;


+ 1
- 0
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h View File

@@ -73,6 +73,7 @@ public:
void closeProject();
void openInIDE (bool saveFirst);
void openInIDE (int exporterIndex, bool saveFirst);
void showNewExporterMenu();
void showFilesTab();
void showConfigTab();


+ 5
- 7
extras/Introjucer/Source/Project/jucer_ProjectTree_Base.h View File

@@ -38,14 +38,12 @@ public:
}
//==============================================================================
virtual bool isRoot() const { return false; }
virtual bool acceptsFileDrop (const StringArray& files) const = 0;
virtual bool acceptsDragItems (const OwnedArray<Project::Item>& selectedNodes) = 0;
//==============================================================================
String getDisplayName() const override { return item.getName(); }
String getRenamingName() const override { return getDisplayName(); }
String getDisplayName() const override { return item.getName(); }
String getRenamingName() const override { return getDisplayName(); }
void setName (const String& newName) override
{
@@ -55,10 +53,10 @@ public:
item.getNameValue() = newName;
}
bool isMissing() override { return isFileMissing; }
virtual File getFile() const { return item.getFile(); }
bool isMissing() override { return isFileMissing; }
virtual File getFile() const { return item.getFile(); }
void deleteItem() override { item.removeItemFromProject(); }
void deleteItem() override { item.removeItemFromProject(); }
virtual void deleteAllSelectedItems() override
{


+ 0
- 5
extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp View File

@@ -84,11 +84,6 @@ Font JucerTreeViewBase::getFont() const
return Font (getItemHeight() * 0.6f);
}
float JucerTreeViewBase::getIconSize() const
{
return jmin (getItemHeight() - 4.0f, 18.0f);
}
void JucerTreeViewBase::paintOpenCloseButton (Graphics& g, const Rectangle<float>& area, Colour /*backgroundColour*/, bool isMouseOver)
{
TreeViewItem::paintOpenCloseButton (g, area, getOwnerView()->findColour (mainBackgroundColourId), isMouseOver);


+ 8
- 8
extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h View File

@@ -37,7 +37,7 @@ public:
~JucerTreeViewBase();
int getItemWidth() const override { return -1; }
int getItemHeight() const override { return 20; }
int getItemHeight() const override { return isRoot() ? 23 : 20; }
void paintOpenCloseButton (Graphics&, const Rectangle<float>& area, Colour backgroundColour, bool isMouseOver) override;
Component* createItemComponent() override;
@@ -48,17 +48,18 @@ public:
void cancelDelayedSelectionTimer();
//==============================================================================
virtual bool isRoot() const { return false; }
virtual Font getFont() const;
virtual String getRenamingName() const = 0;
virtual String getDisplayName() const = 0;
virtual void setName (const String& newName) = 0;
virtual bool isMissing() = 0;
virtual Icon getIcon() const = 0;
virtual float getIconSize() const;
virtual bool isIconCrossedOut() const { return false; }
virtual bool isIconCrossedOut() const { return false; }
virtual void paintIcon (Graphics& g, Rectangle<int> area) { getIcon().draw (g, area.reduced (2).toFloat(), isIconCrossedOut()); }
virtual void paintContent (Graphics& g, const Rectangle<int>& area);
virtual int getMillisecsAllowedForDragGesture() { return 120; };
virtual File getDraggableFile() const { return File::nonexistent; }
virtual int getMillisecsAllowedForDragGesture() { return 120; };
virtual File getDraggableFile() const { return File(); }
void refreshSubItems();
virtual void deleteItem();
@@ -206,13 +207,12 @@ public:
void paintIcon (Graphics& g)
{
item.getIcon().draw (g, Rectangle<float> (4.0f, 2.0f, item.getIconSize(), getHeight() - 4.0f),
item.isIconCrossedOut());
item.paintIcon (g, Rectangle<int> (getHeight(), getHeight()));
}
void resized() override
{
item.textX = (int) item.getIconSize() + 8;
item.textX = getHeight() + 4;
Rectangle<int> r (getLocalBounds());


+ 1
- 1
extras/Introjucer/Source/Wizards/jucer_NewProjectWizardComponent.h View File

@@ -139,7 +139,7 @@ public:
for (int i = 0; i < types.size(); ++i)
{
const ProjectExporter::ExporterTypeInfo& type = types.getReference (i);
platforms.add (new PlatformType (ImageCache::getFromMemory (type.iconData, type.iconDataSize), type.name));
platforms.add (new PlatformType (type.getIcon(), type.name));
}
listBox.setRowHeight (35);


+ 35
- 0
modules/juce_core/files/juce_File.cpp View File

@@ -886,6 +886,41 @@ File File::createTempFile (StringRef fileNameEnding)
return tempFile;
}
bool File::createSymbolicLink (const File& linkFileToCreate, bool overwriteExisting) const
{
if (linkFileToCreate.exists())
{
if (! linkFileToCreate.isSymbolicLink())
{
// user has specified an existing file / directory as the link
// this is bad! the user could end up unintentionally destroying data
jassertfalse;
return false;
}
if (overwriteExisting)
linkFileToCreate.deleteFile();
}
#if JUCE_MAC || JUCE_LINUX
// one common reason for getting an error here is that the file already exists
if (symlink (fullPath.toRawUTF8(), linkFileToCreate.getFullPathName().toRawUTF8()) == -1)
{
jassertfalse;
return false;
}
return true;
#elif JUCE_WINDOWS
return CreateSymbolicLink (linkFileToCreate.getFullPathName().toWideCharPointer(),
fullPath.toWideCharPointer(),
isDirectory() ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0) != FALSE;
#else
jassertfalse; // symbolic links not supported on this platform!
return false;
#endif
}
//==============================================================================
MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr), range (0, file.getSize()), fileHandle (0)


+ 21
- 15
modules/juce_core/files/juce_File.h View File

@@ -360,14 +360,6 @@ public:
*/
bool isHidden() const;
/** Returns true if this file is a link or alias that can be followed using getLinkedTarget(). */
bool isLink() const;
/** If this file is a link or alias, this returns the file that it points to.
If the file isn't actually link, it'll just return itself.
*/
File getLinkedTarget() const;
/** Returns a unique identifier for the file, if one is available.
Depending on the OS and file-system, this may be a unix inode number or
@@ -880,7 +872,6 @@ public:
*/
static File createTempFile (StringRef fileNameEnding);
//==============================================================================
/** Returns the current working directory.
@see setAsCurrentWorkingDirectory
@@ -946,8 +937,28 @@ public:
/** Adds a separator character to the end of a path if it doesn't already have one. */
static String addTrailingSeparator (const String& path);
#if JUCE_MAC || JUCE_IOS || DOXYGEN
//==============================================================================
/** Tries to create a symbolic link and returns a boolean to indicate success */
bool createSymbolicLink (const File& linkFileToCreate, bool overwriteExisting) const;
/** Returns true if this file is a link or alias that can be followed using getLinkedTarget(). */
bool isSymbolicLink() const;
/** If this file is a link or alias, this returns the file that it points to.
If the file isn't actually link, it'll just return itself.
*/
File getLinkedTarget() const;
#if JUCE_WINDOWS
/** Windows ONLY - Creates a win32 .LNK shortcut file that links to this file. */
bool createShortcut (const String& description, const File& linkFileToCreate) const;
/** Windows ONLY - Returns true if this is a win32 .LNK file. */
bool isShortcut() const;
#endif
//==============================================================================
#if JUCE_MAC || JUCE_IOS || DOXYGEN
/** OSX ONLY - Finds the OSType of a file from the its resources. */
OSType getMacOSType() const;
@@ -960,11 +971,6 @@ public:
void addToDock() const;
#endif
#if JUCE_WINDOWS
/** Windows ONLY - Creates a win32 .LNK shortcut file that links to this file. */
bool createLink (const String& description, const File& linkFileToCreate) const;
#endif
private:
//==============================================================================
String fullPath;


+ 1
- 1
modules/juce_core/native/juce_linux_CommonFile.cpp View File

@@ -65,7 +65,7 @@ static String getLinkedFile (const String& file)
return String::fromUTF8 (buffer, jmax (0, numBytes));
};
bool File::isLink() const
bool File::isSymbolicLink() const
{
return getLinkedFile (getFullPathName()).isNotEmpty();
}


+ 7
- 2
modules/juce_core/native/juce_mac_Files.mm View File

@@ -285,7 +285,7 @@ static NSString* getFileLink (const String& path)
#endif
}
bool File::isLink() const
bool File::isSymbolicLink() const
{
return getFileLink (fullPath) != nil;
}
@@ -401,7 +401,12 @@ bool JUCE_CALLTYPE Process::openDocument (const String& fileName, const String&
{
JUCE_AUTORELEASEPOOL
{
NSURL* filenameAsURL = [NSURL URLWithString: juceStringToNS (fileName)];
NSString* fileNameAsNS (juceStringToNS (fileName));
NSURL* filenameAsURL ([NSURL URLWithString: fileNameAsNS]);
if (filenameAsURL == nil)
filenameAsURL = [NSURL fileURLWithPath: fileNameAsNS];
#if JUCE_IOS
(void) parameters;


+ 34
- 2
modules/juce_core/native/juce_win32_Files.cpp View File

@@ -631,13 +631,45 @@ String File::getVersion() const
}
//==============================================================================
bool File::isLink() const
bool File::isSymbolicLink() const
{
return (GetFileAttributes (fullPath.toWideCharPointer()) & FILE_ATTRIBUTE_REPARSE_POINT) != 0;
}
bool File::isShortcut() const
{
return hasFileExtension (".lnk");
}
File File::getLinkedTarget() const
{
{
HANDLE h = CreateFile (getFullPathName().toWideCharPointer(),
GENERIC_READ, FILE_SHARE_READ, nullptr,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (h != INVALID_HANDLE_VALUE)
{
DWORD requiredSize = ::GetFinalPathNameByHandleW (h, nullptr, 0, FILE_NAME_NORMALIZED);
if (requiredSize > 0)
{
HeapBlock<WCHAR> buffer (requiredSize + 2);
buffer.clear (requiredSize + 2);
requiredSize = ::GetFinalPathNameByHandleW (h, buffer, requiredSize, FILE_NAME_NORMALIZED);
if (requiredSize > 0)
{
CloseHandle (h);
return File (String (buffer));
}
}
CloseHandle (h);
}
}
File result (*this);
String p (getFullPathName());
@@ -664,7 +696,7 @@ File File::getLinkedTarget() const
return result;
}
bool File::createLink (const String& description, const File& linkFileToCreate) const
bool File::createShortcut (const String& description, const File& linkFileToCreate) const
{
linkFileToCreate.deleteFile();


+ 6
- 0
modules/juce_core/text/juce_StringArray.cpp View File

@@ -173,6 +173,12 @@ void StringArray::addArray (const StringArray& otherArray, int startIndex, int n
strings.add (otherArray.strings.getReference (startIndex++));
}
void StringArray::mergeArray (const StringArray& otherArray, const bool ignoreCase)
{
for (int i = 0; i < otherArray.size(); ++i)
addIfNotAlreadyThere (otherArray[i], ignoreCase);
}
void StringArray::set (const int index, const String& newString)
{
strings.set (index, newString);


+ 9
- 0
modules/juce_core/text/juce_StringArray.h View File

@@ -209,6 +209,15 @@ public:
int startIndex = 0,
int numElementsToAdd = -1);
/** Merges the strings from another array into this one.
This will not add a string that already exists.
@param other the array to add
@param ignoreCase ignore case when merging
*/
void mergeArray (const StringArray& other,
bool ignoreCase = false);
/** Breaks up a string into tokens and adds them to this array.
This will tokenise the given string using whitespace characters as the


Loading…
Cancel
Save